sidegraph 0.2.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. {sidegraph-0.2.0 → sidegraph-0.3.0}/CHANGELOG.md +36 -0
  2. {sidegraph-0.2.0 → sidegraph-0.3.0}/CLAUDE.md +1 -1
  3. {sidegraph-0.2.0 → sidegraph-0.3.0}/PKG-INFO +64 -167
  4. {sidegraph-0.2.0 → sidegraph-0.3.0}/README.md +63 -166
  5. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/README.md +1 -1
  6. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/codex-setup.md +1 -1
  7. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/installation.md +4 -3
  8. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/verifying-your-setup.md +89 -2
  9. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/integrations/codex.md +1 -1
  10. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/llms.txt +2 -2
  11. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/cli.md +165 -9
  12. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/configuration.md +1 -1
  13. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/mcp-tools.md +10 -0
  14. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/releasing.md +5 -1
  15. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/stability.md +1 -1
  16. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/store-format.md +16 -0
  17. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
  18. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
  19. sidegraph-0.3.0/plugin/sidegraph/skills/stats/SKILL.md +36 -0
  20. sidegraph-0.3.0/plugin/sidegraph/skills/stats/agents/openai.yaml +6 -0
  21. {sidegraph-0.2.0 → sidegraph-0.3.0}/pyproject.toml +2 -1
  22. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/__init__.py +1 -1
  23. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/cli.py +121 -17
  24. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/host/hooks.py +1 -1
  25. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/retrieval.py +68 -18
  26. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/server.py +123 -13
  27. sidegraph-0.3.0/src/sidegraph/stats/__init__.py +1 -0
  28. sidegraph-0.3.0/src/sidegraph/stats/model.py +582 -0
  29. sidegraph-0.3.0/src/sidegraph/stats/render.py +337 -0
  30. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/store.py +89 -6
  31. sidegraph-0.3.0/tests/test_cli_stats.py +613 -0
  32. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_codex_plugin.py +2 -2
  33. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_docs_claims.py +20 -1
  34. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_session_key.py +1 -1
  35. sidegraph-0.3.0/tests/test_retrieval_budget_counters.py +420 -0
  36. sidegraph-0.3.0/tests/test_server_render_events.py +356 -0
  37. sidegraph-0.3.0/tests/test_stats_graph.py +113 -0
  38. sidegraph-0.3.0/tests/test_stats_model.py +1387 -0
  39. sidegraph-0.3.0/tests/test_stats_render.py +1176 -0
  40. sidegraph-0.3.0/tests/test_stats_skill.py +35 -0
  41. sidegraph-0.3.0/tests/test_stats_snapshot.py +164 -0
  42. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_coverage_telemetry.py +1 -1
  43. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_mutation_guard.py +31 -3
  44. sidegraph-0.3.0/tests/test_store_render_events.py +101 -0
  45. {sidegraph-0.2.0 → sidegraph-0.3.0}/uv.lock +1 -1
  46. {sidegraph-0.2.0 → sidegraph-0.3.0}/.agents/plugins/marketplace.json +0 -0
  47. {sidegraph-0.2.0 → sidegraph-0.3.0}/.claude-plugin/marketplace.json +0 -0
  48. {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/CODEOWNERS +0 -0
  49. {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  50. {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  51. {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  52. {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  53. {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/secret_scanning.yml +0 -0
  54. {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/workflows/ci.yml +0 -0
  55. {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/workflows/publish.yml +0 -0
  56. {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/workflows/scorecard.yml +0 -0
  57. {sidegraph-0.2.0 → sidegraph-0.3.0}/.gitignore +0 -0
  58. {sidegraph-0.2.0 → sidegraph-0.3.0}/.gitleaks.toml +0 -0
  59. {sidegraph-0.2.0 → sidegraph-0.3.0}/.pre-commit-config.yaml +0 -0
  60. {sidegraph-0.2.0 → sidegraph-0.3.0}/.python-version +0 -0
  61. {sidegraph-0.2.0 → sidegraph-0.3.0}/AGENTS.md +0 -0
  62. {sidegraph-0.2.0 → sidegraph-0.3.0}/CODE_OF_CONDUCT.md +0 -0
  63. {sidegraph-0.2.0 → sidegraph-0.3.0}/CONTRIBUTING.md +0 -0
  64. {sidegraph-0.2.0 → sidegraph-0.3.0}/LICENSE +0 -0
  65. {sidegraph-0.2.0 → sidegraph-0.3.0}/SECURITY.md +0 -0
  66. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/anchoring.md +0 -0
  67. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/data-model.md +0 -0
  68. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/decision-memory.md +0 -0
  69. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/mind-model.md +0 -0
  70. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/retrieval.md +0 -0
  71. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/bootstrap.md +0 -0
  72. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/claude-code-setup.md +0 -0
  73. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/quickstart.md +0 -0
  74. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/capturing-decisions.md +0 -0
  75. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/ci-cd-maintenance.md +0 -0
  76. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/naming-your-domains.md +0 -0
  77. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/retrieval-in-sessions.md +0 -0
  78. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/semantic-docs.md +0 -0
  79. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/surviving-refactors.md +0 -0
  80. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/team-workflow.md +0 -0
  81. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/integrations/claude-code.md +0 -0
  82. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/integrations/graphify.md +0 -0
  83. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/README.md +0 -0
  84. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/corpus_fit.py +0 -0
  85. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/judge-prompt.md +0 -0
  86. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/questions-prompt.md +0 -0
  87. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/rubric-template.md +0 -0
  88. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/git-bindings.md +0 -0
  89. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/hooks.md +0 -0
  90. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/operations.md +0 -0
  91. {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/whitepaper/index.md +0 -0
  92. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/.mcp.json +0 -0
  93. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/codex/hooks.json +0 -0
  94. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/codex/mcp.json +0 -0
  95. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/hooks/hooks.json +0 -0
  96. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
  97. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
  98. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
  99. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
  100. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
  101. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
  102. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
  103. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
  104. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
  105. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
  106. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
  107. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
  108. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
  109. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
  110. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
  111. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
  112. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
  113. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
  114. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
  115. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
  116. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
  117. {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
  118. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/anchoring.py +0 -0
  119. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/__init__.py +0 -0
  120. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/apply.py +0 -0
  121. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/catalog.py +0 -0
  122. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/cli.py +0 -0
  123. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/integrations.py +0 -0
  124. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/model.py +0 -0
  125. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/planner.py +0 -0
  126. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/proof.py +0 -0
  127. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/review.py +0 -0
  128. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/scan.py +0 -0
  129. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/capture.py +0 -0
  130. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/config.py +0 -0
  131. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/doc_import.py +0 -0
  132. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/doctor.py +0 -0
  133. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/domains.py +0 -0
  134. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/engine/__init__.py +0 -0
  135. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/engine/reader.py +0 -0
  136. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/gitio.py +0 -0
  137. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/host/__init__.py +0 -0
  138. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/host/claude_settings.py +0 -0
  139. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/importer.py +0 -0
  140. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/okf.py +0 -0
  141. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/profiles.py +0 -0
  142. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/schema.py +0 -0
  143. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/sync.py +0 -0
  144. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/verify.py +0 -0
  145. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/__init__.py +0 -0
  146. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
  147. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/model.py +0 -0
  148. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/render.py +0 -0
  149. {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/template.html +0 -0
  150. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/__init__.py +0 -0
  151. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/conftest.py +0 -0
  152. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
  153. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bitfinex_slice.json +0 -0
  154. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
  155. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
  156. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
  157. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
  158. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
  159. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/graph.json +0 -0
  160. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
  161. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
  162. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
  163. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
  164. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
  165. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
  166. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
  167. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
  168. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
  169. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
  170. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
  171. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
  172. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
  173. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
  174. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
  175. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
  176. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
  177. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
  178. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
  179. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
  180. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
  181. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
  182. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
  183. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
  184. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design.md +0 -0
  185. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
  186. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
  187. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
  188. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
  189. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
  190. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
  191. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
  192. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
  193. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
  194. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
  195. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
  196. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
  197. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
  198. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
  199. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
  200. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/mini_graph.json +0 -0
  201. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_anchoring.py +0 -0
  202. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_anchoring_mapping_refresh.py +0 -0
  203. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_apply.py +0 -0
  204. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_catalog.py +0 -0
  205. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_cli.py +0 -0
  206. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_integrations.py +0 -0
  207. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_model.py +0 -0
  208. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_planner.py +0 -0
  209. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_proof.py +0 -0
  210. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_review.py +0 -0
  211. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_scan.py +0 -0
  212. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_auto_accept.py +0 -0
  213. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_facts.py +0 -0
  214. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_integration.py +0 -0
  215. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_neighbors.py +0 -0
  216. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_propose.py +0 -0
  217. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_redact.py +0 -0
  218. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_compact.py +0 -0
  219. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_doctor.py +0 -0
  220. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_domains.py +0 -0
  221. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_import.py +0 -0
  222. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_init.py +0 -0
  223. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_okf.py +0 -0
  224. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_ratify.py +0 -0
  225. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_ratify_facts.py +0 -0
  226. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_sync.py +0 -0
  227. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_sync_check.py +0 -0
  228. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_viz.py +0 -0
  229. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_community_baseline.py +0 -0
  230. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_config.py +0 -0
  231. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_corpus_expected_renders.py +0 -0
  232. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_corpus_self_corpus.py +0 -0
  233. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_coverage_telemetry_e2e.py +0 -0
  234. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_digest_integrity.py +0 -0
  235. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doc_corpus_integration.py +0 -0
  236. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doc_import.py +0 -0
  237. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor.py +0 -0
  238. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_auto_share.py +0 -0
  239. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_code_drift.py +0 -0
  240. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_dangling_supports.py +0 -0
  241. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_duplicate_entity.py +0 -0
  242. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
  243. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_never_surfaced.py +0 -0
  244. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_scan.py +0 -0
  245. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_stale_instructions.py +0 -0
  246. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_unratified_accept.py +0 -0
  247. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_domains.py +0 -0
  248. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_entity_duplicate_resolution.py +0 -0
  249. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_entity_get_or_create_race.py +0 -0
  250. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_env_isolation.py +0 -0
  251. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_fact_reachability_gate.py +0 -0
  252. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_flow_profile.py +0 -0
  253. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_git_bindings_blame.py +0 -0
  254. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_git_bindings_hook.py +0 -0
  255. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_git_bindings_provenance.py +0 -0
  256. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_claude_settings.py +0 -0
  257. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_drift_nudge.py +0 -0
  258. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_pretool.py +0 -0
  259. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_session_start.py +0 -0
  260. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_stop.py +0 -0
  261. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_touch_events.py +0 -0
  262. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_importer.py +0 -0
  263. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_mind_model_additive_fields.py +0 -0
  264. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_okf.py +0 -0
  265. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_openspec_profile.py +0 -0
  266. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_pathless_descriptor_adoption.py +0 -0
  267. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
  268. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_proposal_lifecycle.py +0 -0
  269. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_ratify_listing_gone_dark.py +0 -0
  270. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_ratify_policy.py +0 -0
  271. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_community_labels.py +0 -0
  272. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_doc_nodes.py +0 -0
  273. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_graph.py +0 -0
  274. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_integration.py +0 -0
  275. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_nodes_in_file.py +0 -0
  276. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_perf.py +0 -0
  277. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_rationale.py +0 -0
  278. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_read.py +0 -0
  279. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_resolve.py +0 -0
  280. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_subdir_mismatch.py +0 -0
  281. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_version.py +0 -0
  282. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_redaction_seeded.py +0 -0
  283. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_repoint_integration.py +0 -0
  284. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_context.py +0 -0
  285. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_drift_marker.py +0 -0
  286. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_drilldown.py +0 -0
  287. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_facts.py +0 -0
  288. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_ids.py +0 -0
  289. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_integration.py +0 -0
  290. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_rank.py +0 -0
  291. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_seeds.py +0 -0
  292. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_shown_ids.py +0 -0
  293. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_terminal_evidence.py +0 -0
  294. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_thin_tools.py +0 -0
  295. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_toc.py +0 -0
  296. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_toptier.py +0 -0
  297. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_unratified.py +0 -0
  298. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sandbox_hygiene.py +0 -0
  299. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_schema_descriptor.py +0 -0
  300. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_schema_domain.py +0 -0
  301. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_schema_fact.py +0 -0
  302. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_add_anchors.py +0 -0
  303. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_anchoring.py +0 -0
  304. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_capture.py +0 -0
  305. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_coverage_events.py +0 -0
  306. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_domains.py +0 -0
  307. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_drilldown.py +0 -0
  308. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_facts.py +0 -0
  309. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_find_entity.py +0 -0
  310. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_get_store.py +0 -0
  311. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_get_task_context.py +0 -0
  312. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_import.py +0 -0
  313. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_mcp_smoke.py +0 -0
  314. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_ratify_facts.py +0 -0
  315. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_redaction.py +0 -0
  316. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_supersede.py +0 -0
  317. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_sync_anchors.py +0 -0
  318. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_telemetry.py +0 -0
  319. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_thin_tools.py +0 -0
  320. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_verify.py +0 -0
  321. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store.py +0 -0
  322. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
  323. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_canonical_stat.py +0 -0
  324. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_compact.py +0 -0
  325. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_compact_review.py +0 -0
  326. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_concurrent_open.py +0 -0
  327. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_derived_community.py +0 -0
  328. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_domains.py +0 -0
  329. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_entities.py +0 -0
  330. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_fact_cascade.py +0 -0
  331. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_facts.py +0 -0
  332. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_meta.py +0 -0
  333. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_migration.py +0 -0
  334. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_mutation_immediate.py +0 -0
  335. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
  336. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_persistence.py +0 -0
  337. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_ratification.py +0 -0
  338. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_rebuild_atomicity.py +0 -0
  339. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_retrieval.py +0 -0
  340. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_slug_conflicts.py +0 -0
  341. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_stamping_marker.py +0 -0
  342. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_telemetry.py +0 -0
  343. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_threading.py +0 -0
  344. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_tmp_sweep_age.py +0 -0
  345. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_clean.py +0 -0
  346. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_domains.py +0 -0
  347. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_drift_cache.py +0 -0
  348. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_fresh_clone.py +0 -0
  349. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_integration.py +0 -0
  350. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_rebind.py +0 -0
  351. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_repoint.py +0 -0
  352. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_report_has_findings.py +0 -0
  353. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_run.py +0 -0
  354. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_toc_cache.py +0 -0
  355. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_volatile_heal.py +0 -0
  356. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_wiring.py +0 -0
  357. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_telemetry_retention.py +0 -0
  358. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_verify_snapshot.py +0 -0
  359. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_verify_transitions.py +0 -0
  360. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_viz_asset_packaged.py +0 -0
  361. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_viz_model.py +0 -0
  362. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_viz_render_html.py +0 -0
  363. {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_viz_render_json.py +0 -0
@@ -7,6 +7,42 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.0] — 2026-09-19
11
+
12
+ ### Added
13
+
14
+ - **`sidegraph-stats` — one screen of local usage statistics.** Reads the gitignored
15
+ `.sidegraph/index.db` and reports how often memory was asked for, how much of the code
16
+ worked on has memory anchored to it, what the store holds, and anchor health, with activation
17
+ first. It states what was shown, asked and touched, and makes no claim about effect.
18
+ Flags: `--db`, `--window DAYS` (default 30, the journal's retention), `--graph` and
19
+ `--json` (the same report as data, with a figure the text withholds as `null`, never a
20
+ zero). Read-only: it never creates or rebuilds the index,
21
+ exits `2` on a bad `--window`, a missing index, an unreadable one or an unparseable record
22
+ row, and says so in the report when there is too little data to print a ratio, when
23
+ recording is off, when the budget counts were never recorded, or when the index is behind
24
+ the committed records after a `git pull` (it never opens the store, so it states that
25
+ rather than printing the old numbers). A new console script, so a committed surface: see
26
+ [`docs/reference/cli.md`](docs/reference/cli.md) and
27
+ [`docs/reference/stability.md`](docs/reference/stability.md).
28
+ - **`/sidegraph:stats` skill**, with its Codex twin (explicit invocation only). It runs
29
+ `sidegraph-stats` and shows the output verbatim, without restating or interpreting the
30
+ numbers.
31
+ - **A `render_events` journal and an optional `intent` parameter.** `get_task_context` and
32
+ `query_decisions` now record what each render selected and what survived the budget in a
33
+ new table of the local index (`drill_down` records the decisions it returned there too, with
34
+ no budget figures), and accept an optional `intent` label for what asked. The
35
+ label is recorded for statistics only and never affects what is returned. Both stay local:
36
+ no network calls, `SIDEGRAPH_TELEMETRY=off` stops the recording, and the 30-day pruning
37
+ keeps running when it is off, so opting out only reduces what is kept. See
38
+ [`docs/reference/store-format.md`](docs/reference/store-format.md) and
39
+ [`docs/reference/mcp-tools.md`](docs/reference/mcp-tools.md).
40
+
41
+ ### Changed
42
+
43
+ - **The README's privacy note describes the local diagnostics as what was shown and
44
+ touched**, rather than which memory is "earning its keep".
45
+
10
46
  ## [0.2.0] — 2026-09-18
11
47
 
12
48
  ### Added
@@ -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.2.0) — the full loop (capture, ratification, mistakes-first
16
+ Sidegraph is pre-1.0 (v0.3.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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sidegraph
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Own the memory, rent the graph — a durable decision/lessons layer as a sidecar over a code-graph engine.
5
5
  Project-URL: Homepage, https://github.com/SantyagoSeaman/sidegraph
6
6
  Project-URL: Repository, https://github.com/SantyagoSeaman/sidegraph
@@ -28,11 +28,15 @@ Description-Content-Type: text/markdown
28
28
 
29
29
  # Sidegraph
30
30
 
31
- > **Every agent session starts fresh. Your project should not.**
31
+ [![tests](https://img.shields.io/github/actions/workflow/status/SantyagoSeaman/sidegraph/ci.yml?label=tests)](https://github.com/SantyagoSeaman/sidegraph/actions/workflows/ci.yml)
32
+ [![PyPI](https://img.shields.io/pypi/v/sidegraph)](https://pypi.org/project/sidegraph/)
33
+ ![Python 3.13+](https://img.shields.io/badge/python-3.13%2B-blue)
34
+ ![License](https://img.shields.io/badge/license-Apache--2.0-green)
35
+ ![MCP](https://img.shields.io/badge/MCP-server-8A2BE2)
32
36
 
33
- Sidegraph carries the project's accumulated decision map across sessions, so the next
34
- agent approaches its task with the context a returning engineer has built over years:
35
- why the code took its current shape, what was tried, and what the team learned.
37
+ > **Give an AI coding agent the mental model of a project that an experienced engineer carries — what exists,
38
+ > how it is connected, why it is built this way, and what was already tried — served task-aware, within budget,
39
+ > before the first grep; and make that why survive rebuilds, refactors, and time.**
36
40
 
37
41
  Coding agents broke an old equilibrium: **code is now produced faster than anyone
38
42
  accumulates the understanding of why it is the way it is.** The reasoning that shaped
@@ -45,69 +49,17 @@ decides projects is not: **why it's built this way, what was tried and abandoned
45
49
  constraint from outside the code forced the shape.** That information isn't in the
46
50
  artifact at all. No future model will recover it, because it exists exactly once — at
47
51
  decision time — and then evaporates: people leave, sessions end, the ticket from three
48
- years ago is never found.
49
-
50
- Sidegraph keeps that half and serves it back. Specs say what should be true and code
51
- says what was built; Sidegraph keeps the third line — *how one became the other*: the
52
- decisions, the rejected alternatives, and the lessons learned by doing — knowledge
53
- recoverable from neither the documents nor the code. Every record is bound into one
54
- graph with your code and your own planning artifacts, so the memory knows what it
55
- governs — and notices when it goes stale. And it reaches the agent at the moment of
56
- work, **mistakes first, before the first grep** — so no mistake is paid for twice, and
57
- an agent doesn't confidently re-propose the design your team already rejected.
52
+ years ago is never found. Sidegraph keeps that half and serves it back.
58
53
 
59
54
  **Deciding whether this is worth your team's time?** Read the
60
55
  [engineering whitepaper](docs/whitepaper/index.md) first. It states the idea,
61
- walks one real decision chain end to end, reports what running it showed
62
- (including the corpus where memory cost 25.5% more and answered worse), and
56
+ walks one real decision chain end to end, reports what running it showed, and
63
57
  gives a fit test you can apply to your own repository before installing anything.
64
58
 
65
- ```text
66
- You: "refactor risk/fee_gate.py"
67
-
68
- Injected into the agent's context — before it reads a single file:
69
-
70
- ## ⚠ Known mistakes & gotchas
71
- - [gotcha] HFT strategies require 0% maker/taker fees: assert_zero_fees()
72
- checks account fees up front and raises FeeGateError — the bot refuses
73
- to trade.
74
-
75
- ## Decisions
76
- - [adr] Stop levels ratchet monotonically: force_widen() is the only
77
- entry point allowed to widen an active stop.
78
- evidence: backtest showed ad-hoc re-widening added ~12% drawdown [internal backtest, 2026-03]
79
-
80
- ## Related
81
- ~ tried, reverted 2026-01: [adr] threshold-based fee checks
82
- ```
83
-
84
- **Maximum relevant context before the first grep — and no mistake paid for twice.**
85
-
86
- No vector database, no service, no API key: your team's **decision log as small text
87
- records in the repo** — decisions, domain definitions, anchors — merging like code and
88
- readable in the PR diff, plus a local MCP server and three hooks.
89
-
90
- [![tests](https://img.shields.io/github/actions/workflow/status/SantyagoSeaman/sidegraph/ci.yml?label=tests)](https://github.com/SantyagoSeaman/sidegraph/actions/workflows/ci.yml)
91
- [![PyPI](https://img.shields.io/pypi/v/sidegraph)](https://pypi.org/project/sidegraph/)
92
- ![Python 3.13+](https://img.shields.io/badge/python-3.13%2B-blue)
93
- ![License](https://img.shields.io/badge/license-Apache--2.0-green)
94
- ![MCP](https://img.shields.io/badge/MCP-server-8A2BE2)
95
-
96
- Green `tests` badge = the full suite (ruff · mypy · pytest) passing in CI on every push.
97
- Install: **`pip install sidegraph`** (or `uv tool install sidegraph`) — a pure-Python package
98
- (`sidegraph` on PyPI: the MCP server, the three hooks, and the `sidegraph-*` CLIs), no service,
99
- no API key.
100
-
101
59
  ## Quickstart
102
60
 
103
61
  Works cold: no existing ADRs required. No API key — the core loop is fully local
104
- (one optional docs-analysis feature uses one; it's clearly marked below).
105
-
106
- Already have ADRs or supported flow specifications? After building the graph, run
107
- `sidegraph-bootstrap --host claude-code` to preview, review, anchor, and prove one record
108
- through production retrieval. The 10–15 minute path is an explicitly unmeasured launch target;
109
- see the [Bootstrap guide](docs/getting-started/bootstrap.md) for the six supported profiles,
110
- host matrix, recovery contract, and reproducible dogfood path.
62
+ (one optional docs-analysis feature uses one; it's marked below).
111
63
 
112
64
  ```bash
113
65
  # 1. Install the graph engine and build a graph over your repo (code or markdown)
@@ -116,20 +68,16 @@ cd /path/to/your/repo && graphify update .
116
68
  ```
117
69
 
118
70
  `[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]"`) — it adds
119
- Graphify's *own* MCP server, a deeper structure-query layer over the same graph. It works fine
120
- installed alongside Sidegraph; Sidegraph itself only ever reads `graph.json`, so the plain
121
- install above is all it needs.
71
+ Graphify's *own* MCP server, a deeper structure-query layer over the same graph. Sidegraph
72
+ only ever reads `graph.json`, so the plain install above is all it needs.
122
73
 
123
74
  ```
124
75
  # 2. Inside a Claude Code session in that repo: install the plugin — MCP server + all
125
- # three hooks, wired automatically. Builds straight from this repo via uv; no PyPI
126
- # publish needed.
76
+ # three hooks, wired automatically.
127
77
  /plugin marketplace add SantyagoSeaman/sidegraph
128
78
  /plugin install sidegraph@sidegraph
129
79
  ```
130
80
 
131
- > **`@main` is a mutable ref.** These commands track the branch — fine for trying Sidegraph out, but pin a commit SHA (`…/sidegraph@<sha>`) for CI, a shared team setup, or a pilot you intend to measure. See [docs/reference/stability.md](docs/reference/stability.md).
132
-
133
81
  ```bash
134
82
  # 3. Install the CLIs + MCP server, then bootstrap the store in your repo
135
83
  # (creates .sidegraph/, prints setup instructions)
@@ -138,34 +86,25 @@ sidegraph-init
138
86
 
139
87
  # Prefer the latest unreleased build straight from git instead of PyPI? Swap step 3 for:
140
88
  # uvx --from git+https://github.com/SantyagoSeaman/sidegraph.git@main sidegraph-init
89
+ # `@main` is a mutable ref — it moves under you. Pin a tag or a SHA for CI.
141
90
  ```
142
91
 
143
92
  4. **Name your domains** — turns the graph's communities into a described table of
144
93
  contents. Tell your agent *"name my domains"* (or run `/sidegraph:name-domains`) and
145
- pick one of the 2–3 ready-made sets it proposes — no long list to hand-curate. CLI
146
- alternative for scripted/CI use: `sidegraph-domains bootstrap` + `sidegraph-ratify` —
94
+ pick one of the 2–3 ready-made sets it proposes. CLI alternative for scripted/CI use:
95
+ `sidegraph-domains bootstrap` + `sidegraph-ratify` —
147
96
  see [naming your domains](docs/guides/naming-your-domains.md).
148
97
 
149
98
  Then record your first decision in a session — *"record a gotcha: … anchor it to
150
99
  `<function or heading>` in `<file>`"* — and watch it come back at the top of the context
151
- next time the agent works near that code. The moment you accept a domain, `SessionStart`
152
- starts answering from the top — a named table of contents instead of a bare community
153
- listing. Full setup (hooks, env vars, Codex, and the source-checkout path for contributors):
154
- [docs/getting-started/quickstart.md](docs/getting-started/quickstart.md) and
155
- [docs/getting-started/installation.md](docs/getting-started/installation.md). Existing rationale:
156
- [docs/getting-started/bootstrap.md](docs/getting-started/bootstrap.md).
157
-
158
- **See it in action.** Sidegraph dogfoods itself: a
159
- [`demo` branch](https://github.com/SantyagoSeaman/sidegraph/tree/demo) will carry Sidegraph's
160
- own decision store — decisions and facts distilled from this project's design notes and
161
- anchored to its real code graph. Once it ships, clone it (`git clone -b demo …`), run
162
- `graphify update .`, and query the corpus to watch retrieval, supersession chains, and
163
- mistakes-first ranking on a genuine project. The `public`/plugin branch stays lean — the store
164
- ships only to `demo`, so installing the plugin never drags it along. **The `demo` branch ships
165
- with a later release** — it does not exist yet, so the link above and the clone command do not
166
- resolve today; see the
167
- [Bootstrap guide's reproduce-the-dogfood-path section](docs/getting-started/bootstrap.md#reproduce-the-dogfood-path)
168
- for the same note.
100
+ next time the agent works near that code.
101
+
102
+ Already have ADRs or design specs? `sidegraph-bootstrap --host claude-code` previews,
103
+ imports, anchors, and proves one record through retrieval — see the
104
+ [Bootstrap guide](docs/getting-started/bootstrap.md). Full setup (hooks, env vars, Codex,
105
+ and the source-checkout path for contributors):
106
+ [quickstart](docs/getting-started/quickstart.md) and
107
+ [installation](docs/getting-started/installation.md).
169
108
 
170
109
  ## Why
171
110
 
@@ -175,30 +114,18 @@ same problem, solved once. Settled questions stay settled — reopening one is a
175
114
  supersede with a reason, not amnesia.
176
115
 
177
116
  **For the project** — documentation that knows when it's stale: unlike a wiki, the memory
178
- is anchored into the code and flags its own decay when the code moves on. Decisions are
179
- made *in view of* prior decisions, so agent-speed production doesn't become agent-speed
180
- architectural drift.
181
-
182
- **For the business** — opex becomes an asset: today 100% of an agent's reasoning
183
- amortizes to zero the moment the session ends. With Sidegraph every agent session leaves
184
- a residue — decision capital that *compounds with project age* while everything else
185
- (human memory, doc accuracy) decays. And it's the one investment model progress can't
186
- commoditize: better models make derivable knowledge cheaper, not the non-derivable kind.
117
+ is anchored into the code and flags its own decay when the code moves on. Before an agent
118
+ edits, retrieval puts the decisions and dead ends already recorded for that code in front of
119
+ it, at whatever speed the agent works.
187
120
 
188
121
  **For the process** — a sidecar, not a reform: it sits beside whatever spec/ADR flow you
189
122
  already run, capture is a byproduct of ordinary sessions, and the single ritual is a
190
- ratification gate, human by default, or `auto-low-risk`: lessons, gotchas, and standalone
191
- facts self-ratify at write time, while `adr`/`constraint` decisions and domains still wait
192
- for a human either way. `sidegraph-init` asks which you want (default answer: yes) and
193
- commits the choice to `.claude/settings.json`. Provenance on every record (who decided,
194
- when, on what evidence) is a ready audit trail for the era of agent-made decisions.
195
-
196
- One honest boundary, stated up front: this is not "cheaper agents in general." Memory
197
- pays off where it replaces reading prose and where the answer isn't in the code at all;
198
- on a large monorepo where two greps answer the question, it costs more than it saves.
199
- What you buy is not speed — it's **owning your engineering judgment instead of renting it
200
- back every session**. And writing decisions down is necessary but not sufficient: records
201
- nothing surfaces at the moment of work simply go unread — delivery is the product.
123
+ ratification gate. Provenance on every record (who decided, when, on what evidence) is a
124
+ ready audit trail for the era of agent-made decisions.
125
+
126
+ One honest boundary: this is not "cheaper agents in general." Memory pays off where it
127
+ replaces reading prose and where the answer isn't in the code at all; on a large monorepo
128
+ where two greps answer the question, it costs more than it saves.
202
129
 
203
130
  Three kinds of tools circle this problem, and each misses it:
204
131
 
@@ -210,8 +137,7 @@ Three kinds of tools circle this problem, and each misses it:
210
137
  matters, with no link to the code it concerns.
211
138
 
212
139
  None of them can answer: **"which decisions touch *this* function — and how did they
213
- evolve?"** Sidegraph is built for exactly that question: decision memory, anchored to a
214
- real code graph, with temporal history.
140
+ evolve?"** Sidegraph is built for exactly that question.
215
141
 
216
142
  | | CLAUDE.md / AGENTS.md | Session memory tools | ADR markdown | Code-graph engines | OKF bundle | **Sidegraph** |
217
143
  |---|---|---|---|---|---|---|
@@ -224,13 +150,8 @@ real code graph, with temporal history.
224
150
  | Health is CI-gateable | ✗ | ✗ | ✗ | ✗ | ✓ `okf validate` | ✓ `sidegraph-verify` + `sidegraph-doctor` exit codes |
225
151
 
226
152
  [OKF](https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing/)
227
- is complementary, not competing: it standardizes portable knowledge *bundles*, not decision
228
- memory — and `sidegraph-export-okf` ships exactly that projection: the full store, history
229
- included, as an OKF v0.1 bundle any OKF consumer can read.
230
-
231
- The memory that matters most is what was tried, abandoned, and **why** — the mistake
232
- you'd otherwise pay for twice. Sidegraph keeps it attached to the code and retrievable
233
- long after everyone forgot.
153
+ standardizes portable knowledge *bundles*, not decision memory; `sidegraph-export-okf`
154
+ projects the full store, history included, into an OKF v0.1 bundle any OKF consumer can read.
234
155
 
235
156
  ## How it works
236
157
 
@@ -247,26 +168,19 @@ long after everyone forgot.
247
168
  blind Read/Grep ──▶ nudged back to get_task_context (once per session)
248
169
  ```
249
170
 
250
- Under the hood there are two layers that age differently: the **structure** layer
251
- (the code graph — entities, dependencies, communities: *the what*) and the **decision**
252
- layer on top (*the why*). The graph is disposable — the engine regenerates it from source at any moment. The
253
- memory must never be — so it lives in a separate store that nothing regenerates, and
254
- re-anchors itself as the code moves. The unit of memory is an **entity, never a line
255
- of code**: functions, classes, modules, document headings. Line numbers shift with every
256
- edit; entities persist through them.
257
-
258
- A third piece sits on top of both: named **domains**. Rather than hand-curate a
259
- 200-line list of raw communities, you tell your agent *"name my domains"* and pick one of
260
- 2–3 ready-made sets it proposes (`/sidegraph:name-domains`); each domain is a described area
261
- — title, WHY-IT-EXISTS summary, optional subdomains — so the agent's first read of a session
262
- is a table of contents it can answer from, not a blind community listing. A domain's
263
- membership anchors to durable entities, not volatile community ids, so it **survives a fresh
264
- clone and a graph rebuild** — the mind-model layer is repo-committed team memory, same as the
265
- decisions. See [docs/concepts/mind-model.md](docs/concepts/mind-model.md).
266
-
267
- That is the whole design in one line: **a decision log that stays alive — anchored
268
- precisely to code entities, durably to named domains, delivered mistakes-first before
269
- the agent's first grep, and merging like code.**
171
+ Two layers age differently: the **structure** layer (the code graph — entities,
172
+ dependencies, communities: *the what*) and the **decision** layer on top (*the why*). The
173
+ graph is disposable — the engine regenerates it from source at any moment. The memory must
174
+ never be — so it lives in a separate store that nothing regenerates, and re-anchors itself
175
+ as the code moves. The unit of memory is an **entity, never a line of code**: functions,
176
+ classes, modules, document headings. Line numbers shift with every edit; entities persist
177
+ through them.
178
+
179
+ On top of both sit named **domains**: each is a described area — title, WHY-IT-EXISTS
180
+ summary, optional subdomains — so the agent's first read of a session is a table of
181
+ contents it can answer from, not a bare community listing. A domain's membership anchors
182
+ to durable entities, not volatile community ids, so it survives a fresh clone and a graph
183
+ rebuild. See [docs/concepts/mind-model.md](docs/concepts/mind-model.md).
270
184
 
271
185
  ## What gets stored
272
186
 
@@ -281,11 +195,8 @@ the agent's first grep, and merging like code.**
281
195
  Append-only is a feature: a reversed decision is closed and superseded, never deleted —
282
196
  *"tried before, abandoned because…"* stays retrievable via `get_entity_history`.
283
197
 
284
- Facts ride the same append-only/ratification rules as decisions, plus a cascade: ratifying
285
- or dropping a decision carries every still-pending fact that supports it along in the same
286
- call — one verdict, both records move. Retrieval renders a live fact as an inline
287
- `evidence: <statement> [<source>]` line under the decision it supports, and a standalone one
288
- in its own `## Known facts` block — never displacing a mistake line. Details:
198
+ Facts follow the same append-only and ratification rules as decisions; ratifying or
199
+ dropping a decision carries its still-pending facts along in the same verdict. Details:
289
200
  [docs/concepts/data-model.md](docs/concepts/data-model.md) and
290
201
  [docs/guides/capturing-decisions.md#facts-the-evidence-layer](docs/guides/capturing-decisions.md#facts-the-evidence-layer).
291
202
 
@@ -303,7 +214,7 @@ in its own `## Known facts` block — never displacing a mistake line. Details:
303
214
  | `retrieve_decisions` / `list_facts` | List current decisions / current facts |
304
215
  | `propose_decisions` / `propose_domains` / `add_domain` | Draft a decision (plus attached or standalone facts) or name a domain, from a session or by hand |
305
216
  | `supersede_domain` | Lineage-correct rename/re-scope of a domain: closes the old, writes a `proposed` successor |
306
- | `list_proposed` / `ratify` | The human gate (by default — see `SIDEGRAPH_RATIFY_POLICY` in the configuration reference): review pending decisions, facts, *and* domains, accept/drop (dropping/accepting a decision cascades to its still-pending facts) |
217
+ | `list_proposed` / `ratify` | The human gate (see `SIDEGRAPH_RATIFY_POLICY` in the configuration reference): review pending decisions, facts, *and* domains, accept/drop (a decision's verdict cascades to its still-pending facts) |
307
218
  | `sync_anchors` | Diagnostic/heal MCP counterpart to `sidegraph-sync` — re-anchor against the current graph and return the rebind report as data |
308
219
  | `verify_store` | Read-only integrity lint of the store's canonical files — the MCP counterpart to `sidegraph-verify` |
309
220
  | `add_anchors` | Append bindings to an existing decision or fact — in-place re-anchoring for the `heal-anchors` triage flow |
@@ -320,9 +231,8 @@ Reference: [docs/reference/](docs/reference/mcp-tools.md).
320
231
  ## Works on code and on docs
321
232
 
322
233
  Anchor decisions to functions and classes — or to **headings in your architecture
323
- markdown** (LLM-free graph build, non-git folders supported). Already have ADRs or
324
- design specs? `sidegraph-bootstrap` parses them into anchored decisions deterministically,
325
- no LLM. See the [Bootstrap guide](docs/getting-started/bootstrap.md).
234
+ markdown** (LLM-free graph build, non-git folders supported). `sidegraph-bootstrap` parses
235
+ existing ADRs and design specs into anchored decisions deterministically, no LLM.
326
236
 
327
237
  An optional **semantic pass** (`graphify extract`, one API key, cached per file) goes a
328
238
  layer deeper on documentation: prose becomes `concept` nodes and thematic clusters, giving
@@ -336,8 +246,8 @@ retrieval a richer graph to anchor against. Walkthrough:
336
246
  plus a local, gitignored index it can always rebuild. **Nothing leaves your machine** —
337
247
  no network calls, no remote telemetry, no account. Sidegraph does keep local usage
338
248
  diagnostics in that gitignored index (which stored memory was shown, and which files a
339
- session touched afterwards) so you can tell which memory is earning its keep; they never
340
- travel, and `SIDEGRAPH_TELEMETRY=off` disables them.
249
+ session touched afterwards) so you can see which memory was shown and which files
250
+ those sessions then touched; they never travel, and `SIDEGRAPH_TELEMETRY=off` disables them.
341
251
  - **Secrets don't enter memory.** Proposed decisions and facts pass redaction before they
342
252
  are stored. A ratification gate controls what the agent's drafts can persist: human for
343
253
  `adr`/`constraint` decisions and domains always, and, if you answer yes to `sidegraph-init`'s
@@ -350,30 +260,17 @@ retrieval a richer graph to anchor against. Walkthrough:
350
260
 
351
261
  Entity extraction and graph construction come from
352
262
  [Graphify](https://github.com/safishamsi/graphify) (its LLM-free build covers both code
353
- and markdown), and Sidegraph never re-implements them or writes into the engine's output.
263
+ and markdown); Sidegraph never re-implements them or writes into the engine's output.
354
264
  The engine is optional at runtime: without a graph, records anchor to file paths and
355
265
  domains and retrieval still works, but symbol-level anchors, communities, and moved-code
356
- resolution need it (see the [operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)). Everything the engine produces is derived
357
- and regenerated on every rebuild; everything Sidegraph stores is deliberate, ratified,
358
- and permanent. That split is the design: **own the memory, rent the graph.**
266
+ resolution need it (see the [operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)).
267
+ Everything the engine produces is derived and regenerated on every rebuild; everything
268
+ Sidegraph stores is deliberate, ratified, and permanent. **Own the memory, rent the graph.**
359
269
 
360
270
  ## Status
361
271
 
362
- v0.2.0, on PyPI as [`sidegraph`](https://pypi.org/project/sidegraph/) (`pip install sidegraph`)
363
- — also installable via the Claude Code plugin or directly from git (see Quickstart).
364
- Published by a tag-triggered GitHub Actions workflow that gates on the full test suite
365
- (trusted publishing, no stored token). Interfaces may still move before 1.0. The full loop — capture, ratification,
366
- mistakes-first retrieval, refactor-surviving re-anchoring, semantic docs layer, the
367
- mind-model layer (named domains, `SessionStart` table of contents, `drill_down`), and now the
368
- facts layer (evidence attached to a decision or anchored standalone) — is exercised
369
- end-to-end on real code and ADR corpora (a 4,700-node Python trading system and a 15-document
370
- architecture corpus), with 2,462 tests as of this writing (a public checkout runs 2,240: the
371
- seven release-mechanics test files that read `tools/` aren't shipped, since `tools/` itself
372
- isn't shipped, and 3 internal-corpus calibration tests skip — they need a private design
373
- corpus not included here). Exact counts drift as tests are added; the `tests` badge above
374
- tracks the suite passing, not a frozen number.
375
- Honest boundaries: not a code indexer, not general agent memory, not a graph engine —
376
- decision memory over a rented graph, and nothing else.
272
+ Pre-1.0: interfaces may still move. Not a code indexer, not general agent memory, not a
273
+ graph engine — decision memory over a rented graph, and nothing else.
377
274
 
378
275
  ## Documentation
379
276