sidegraph 0.3.0__tar.gz → 0.4.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 (367) hide show
  1. {sidegraph-0.3.0 → sidegraph-0.4.0}/CHANGELOG.md +39 -0
  2. {sidegraph-0.3.0 → sidegraph-0.4.0}/CLAUDE.md +1 -1
  3. {sidegraph-0.3.0 → sidegraph-0.4.0}/PKG-INFO +5 -4
  4. {sidegraph-0.3.0 → sidegraph-0.4.0}/README.md +4 -3
  5. {sidegraph-0.3.0 → sidegraph-0.4.0}/SECURITY.md +4 -3
  6. sidegraph-0.4.0/docs/README.md +56 -0
  7. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/data-model.md +10 -6
  8. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/mind-model.md +3 -2
  9. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/retrieval.md +22 -20
  10. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/getting-started/bootstrap.md +2 -6
  11. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/getting-started/claude-code-setup.md +6 -10
  12. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/getting-started/codex-setup.md +12 -15
  13. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/getting-started/installation.md +31 -31
  14. sidegraph-0.4.0/docs/getting-started/quickstart.md +71 -0
  15. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/capturing-decisions.md +11 -8
  16. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/ci-cd-maintenance.md +85 -138
  17. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/naming-your-domains.md +5 -5
  18. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/retrieval-in-sessions.md +23 -24
  19. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/semantic-docs.md +10 -8
  20. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/team-workflow.md +13 -13
  21. sidegraph-0.4.0/docs/guides/verifying-your-setup.md +78 -0
  22. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/integrations/claude-code.md +18 -23
  23. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/integrations/codex.md +10 -10
  24. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/integrations/graphify.md +2 -2
  25. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/llms.txt +8 -8
  26. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/README.md +25 -11
  27. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/cli.md +62 -73
  28. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/configuration.md +6 -6
  29. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/git-bindings.md +4 -3
  30. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/hooks.md +30 -9
  31. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/mcp-tools.md +49 -30
  32. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/operations.md +12 -9
  33. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/releasing.md +37 -29
  34. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/stability.md +6 -6
  35. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/store-format.md +21 -21
  36. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
  37. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
  38. {sidegraph-0.3.0 → sidegraph-0.4.0}/pyproject.toml +1 -1
  39. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/__init__.py +1 -1
  40. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/integrations.py +6 -1
  41. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/config.py +8 -0
  42. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/gitio.py +6 -5
  43. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/host/hooks.py +48 -12
  44. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/server.py +39 -23
  45. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_cli.py +1 -1
  46. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_integrations.py +64 -0
  47. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_docs_claims.py +103 -7
  48. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_drift_nudge.py +8 -5
  49. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_pretool.py +33 -0
  50. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_session_key.py +93 -0
  51. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_stop.py +31 -2
  52. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_touch_events.py +25 -0
  53. sidegraph-0.4.0/tests/test_server_prewrite_anchor_validation.py +214 -0
  54. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_migration.py +1 -1
  55. {sidegraph-0.3.0 → sidegraph-0.4.0}/uv.lock +1 -1
  56. sidegraph-0.3.0/docs/README.md +0 -78
  57. sidegraph-0.3.0/docs/getting-started/quickstart.md +0 -102
  58. sidegraph-0.3.0/docs/guides/verifying-your-setup.md +0 -517
  59. {sidegraph-0.3.0 → sidegraph-0.4.0}/.agents/plugins/marketplace.json +0 -0
  60. {sidegraph-0.3.0 → sidegraph-0.4.0}/.claude-plugin/marketplace.json +0 -0
  61. {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/CODEOWNERS +0 -0
  62. {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  63. {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  64. {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  65. {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  66. {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/secret_scanning.yml +0 -0
  67. {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/workflows/ci.yml +0 -0
  68. {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/workflows/publish.yml +0 -0
  69. {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/workflows/scorecard.yml +0 -0
  70. {sidegraph-0.3.0 → sidegraph-0.4.0}/.gitignore +0 -0
  71. {sidegraph-0.3.0 → sidegraph-0.4.0}/.gitleaks.toml +0 -0
  72. {sidegraph-0.3.0 → sidegraph-0.4.0}/.pre-commit-config.yaml +0 -0
  73. {sidegraph-0.3.0 → sidegraph-0.4.0}/.python-version +0 -0
  74. {sidegraph-0.3.0 → sidegraph-0.4.0}/AGENTS.md +0 -0
  75. {sidegraph-0.3.0 → sidegraph-0.4.0}/CODE_OF_CONDUCT.md +0 -0
  76. {sidegraph-0.3.0 → sidegraph-0.4.0}/CONTRIBUTING.md +0 -0
  77. {sidegraph-0.3.0 → sidegraph-0.4.0}/LICENSE +0 -0
  78. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/anchoring.md +0 -0
  79. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/decision-memory.md +0 -0
  80. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/surviving-refactors.md +0 -0
  81. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/corpus_fit.py +0 -0
  82. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/judge-prompt.md +0 -0
  83. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/questions-prompt.md +0 -0
  84. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/rubric-template.md +0 -0
  85. {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/whitepaper/index.md +0 -0
  86. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/.mcp.json +0 -0
  87. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/codex/hooks.json +0 -0
  88. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/codex/mcp.json +0 -0
  89. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/hooks/hooks.json +0 -0
  90. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
  91. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
  92. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
  93. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
  94. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
  95. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
  96. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
  97. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
  98. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
  99. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
  100. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
  101. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
  102. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
  103. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
  104. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
  105. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
  106. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
  107. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
  108. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
  109. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
  110. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
  111. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/stats/agents/openai.yaml +0 -0
  112. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
  113. {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
  114. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/anchoring.py +0 -0
  115. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/__init__.py +0 -0
  116. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/apply.py +0 -0
  117. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/catalog.py +0 -0
  118. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/cli.py +0 -0
  119. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/model.py +0 -0
  120. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/planner.py +0 -0
  121. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/proof.py +0 -0
  122. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/review.py +0 -0
  123. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/scan.py +0 -0
  124. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/capture.py +0 -0
  125. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/cli.py +0 -0
  126. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/doc_import.py +0 -0
  127. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/doctor.py +0 -0
  128. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/domains.py +0 -0
  129. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/engine/__init__.py +0 -0
  130. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/engine/reader.py +0 -0
  131. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/host/__init__.py +0 -0
  132. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/host/claude_settings.py +0 -0
  133. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/importer.py +0 -0
  134. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/okf.py +0 -0
  135. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/profiles.py +0 -0
  136. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/retrieval.py +0 -0
  137. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/schema.py +0 -0
  138. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/stats/__init__.py +0 -0
  139. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/stats/model.py +0 -0
  140. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/stats/render.py +0 -0
  141. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/store.py +0 -0
  142. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/sync.py +0 -0
  143. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/verify.py +0 -0
  144. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/__init__.py +0 -0
  145. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
  146. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/model.py +0 -0
  147. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/render.py +0 -0
  148. {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/template.html +0 -0
  149. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/__init__.py +0 -0
  150. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/conftest.py +0 -0
  151. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
  152. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bitfinex_slice.json +0 -0
  153. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
  154. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
  155. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
  156. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
  157. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
  158. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/graph.json +0 -0
  159. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
  160. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
  161. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
  162. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
  163. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
  164. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
  165. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
  166. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
  167. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
  168. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
  169. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
  170. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
  171. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
  172. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
  173. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
  174. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
  175. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
  176. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
  177. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
  178. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
  179. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
  180. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
  181. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
  182. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
  183. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/design.md +0 -0
  184. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
  185. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
  186. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
  187. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
  188. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
  189. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
  190. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
  191. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
  192. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
  193. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
  194. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
  195. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
  196. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
  197. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
  198. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
  199. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/mini_graph.json +0 -0
  200. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_anchoring.py +0 -0
  201. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_anchoring_mapping_refresh.py +0 -0
  202. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_apply.py +0 -0
  203. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_catalog.py +0 -0
  204. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_model.py +0 -0
  205. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_planner.py +0 -0
  206. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_proof.py +0 -0
  207. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_review.py +0 -0
  208. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_scan.py +0 -0
  209. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_auto_accept.py +0 -0
  210. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_facts.py +0 -0
  211. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_integration.py +0 -0
  212. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_neighbors.py +0 -0
  213. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_propose.py +0 -0
  214. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_redact.py +0 -0
  215. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_compact.py +0 -0
  216. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_doctor.py +0 -0
  217. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_domains.py +0 -0
  218. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_import.py +0 -0
  219. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_init.py +0 -0
  220. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_okf.py +0 -0
  221. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_ratify.py +0 -0
  222. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_ratify_facts.py +0 -0
  223. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_stats.py +0 -0
  224. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_sync.py +0 -0
  225. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_sync_check.py +0 -0
  226. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_viz.py +0 -0
  227. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_codex_plugin.py +0 -0
  228. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_community_baseline.py +0 -0
  229. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_config.py +0 -0
  230. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_corpus_expected_renders.py +0 -0
  231. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_corpus_self_corpus.py +0 -0
  232. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_coverage_telemetry_e2e.py +0 -0
  233. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_digest_integrity.py +0 -0
  234. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doc_corpus_integration.py +0 -0
  235. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doc_import.py +0 -0
  236. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor.py +0 -0
  237. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_auto_share.py +0 -0
  238. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_code_drift.py +0 -0
  239. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_dangling_supports.py +0 -0
  240. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_duplicate_entity.py +0 -0
  241. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
  242. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_never_surfaced.py +0 -0
  243. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_scan.py +0 -0
  244. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_stale_instructions.py +0 -0
  245. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_unratified_accept.py +0 -0
  246. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_domains.py +0 -0
  247. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_entity_duplicate_resolution.py +0 -0
  248. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_entity_get_or_create_race.py +0 -0
  249. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_env_isolation.py +0 -0
  250. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_fact_reachability_gate.py +0 -0
  251. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_flow_profile.py +0 -0
  252. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_git_bindings_blame.py +0 -0
  253. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_git_bindings_hook.py +0 -0
  254. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_git_bindings_provenance.py +0 -0
  255. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_claude_settings.py +0 -0
  256. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_session_start.py +0 -0
  257. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_importer.py +0 -0
  258. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_mind_model_additive_fields.py +0 -0
  259. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_okf.py +0 -0
  260. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_openspec_profile.py +0 -0
  261. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_pathless_descriptor_adoption.py +0 -0
  262. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
  263. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_proposal_lifecycle.py +0 -0
  264. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_ratify_listing_gone_dark.py +0 -0
  265. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_ratify_policy.py +0 -0
  266. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_community_labels.py +0 -0
  267. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_doc_nodes.py +0 -0
  268. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_graph.py +0 -0
  269. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_integration.py +0 -0
  270. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_nodes_in_file.py +0 -0
  271. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_perf.py +0 -0
  272. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_rationale.py +0 -0
  273. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_read.py +0 -0
  274. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_resolve.py +0 -0
  275. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_subdir_mismatch.py +0 -0
  276. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_version.py +0 -0
  277. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_redaction_seeded.py +0 -0
  278. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_repoint_integration.py +0 -0
  279. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_budget_counters.py +0 -0
  280. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_context.py +0 -0
  281. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_drift_marker.py +0 -0
  282. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_drilldown.py +0 -0
  283. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_facts.py +0 -0
  284. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_ids.py +0 -0
  285. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_integration.py +0 -0
  286. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_rank.py +0 -0
  287. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_seeds.py +0 -0
  288. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_shown_ids.py +0 -0
  289. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_terminal_evidence.py +0 -0
  290. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_thin_tools.py +0 -0
  291. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_toc.py +0 -0
  292. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_toptier.py +0 -0
  293. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_unratified.py +0 -0
  294. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sandbox_hygiene.py +0 -0
  295. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_schema_descriptor.py +0 -0
  296. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_schema_domain.py +0 -0
  297. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_schema_fact.py +0 -0
  298. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_add_anchors.py +0 -0
  299. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_anchoring.py +0 -0
  300. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_capture.py +0 -0
  301. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_coverage_events.py +0 -0
  302. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_domains.py +0 -0
  303. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_drilldown.py +0 -0
  304. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_facts.py +0 -0
  305. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_find_entity.py +0 -0
  306. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_get_store.py +0 -0
  307. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_get_task_context.py +0 -0
  308. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_import.py +0 -0
  309. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_mcp_smoke.py +0 -0
  310. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_ratify_facts.py +0 -0
  311. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_redaction.py +0 -0
  312. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_render_events.py +0 -0
  313. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_supersede.py +0 -0
  314. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_sync_anchors.py +0 -0
  315. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_telemetry.py +0 -0
  316. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_thin_tools.py +0 -0
  317. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_verify.py +0 -0
  318. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_graph.py +0 -0
  319. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_model.py +0 -0
  320. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_render.py +0 -0
  321. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_skill.py +0 -0
  322. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_snapshot.py +0 -0
  323. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store.py +0 -0
  324. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
  325. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_canonical_stat.py +0 -0
  326. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_compact.py +0 -0
  327. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_compact_review.py +0 -0
  328. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_concurrent_open.py +0 -0
  329. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_coverage_telemetry.py +0 -0
  330. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_derived_community.py +0 -0
  331. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_domains.py +0 -0
  332. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_entities.py +0 -0
  333. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_fact_cascade.py +0 -0
  334. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_facts.py +0 -0
  335. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_meta.py +0 -0
  336. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_mutation_guard.py +0 -0
  337. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_mutation_immediate.py +0 -0
  338. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
  339. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_persistence.py +0 -0
  340. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_ratification.py +0 -0
  341. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_rebuild_atomicity.py +0 -0
  342. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_render_events.py +0 -0
  343. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_retrieval.py +0 -0
  344. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_slug_conflicts.py +0 -0
  345. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_stamping_marker.py +0 -0
  346. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_telemetry.py +0 -0
  347. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_threading.py +0 -0
  348. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_tmp_sweep_age.py +0 -0
  349. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_clean.py +0 -0
  350. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_domains.py +0 -0
  351. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_drift_cache.py +0 -0
  352. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_fresh_clone.py +0 -0
  353. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_integration.py +0 -0
  354. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_rebind.py +0 -0
  355. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_repoint.py +0 -0
  356. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_report_has_findings.py +0 -0
  357. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_run.py +0 -0
  358. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_toc_cache.py +0 -0
  359. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_volatile_heal.py +0 -0
  360. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_wiring.py +0 -0
  361. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_telemetry_retention.py +0 -0
  362. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_verify_snapshot.py +0 -0
  363. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_verify_transitions.py +0 -0
  364. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_viz_asset_packaged.py +0 -0
  365. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_viz_model.py +0 -0
  366. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_viz_render_html.py +0 -0
  367. {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_viz_render_json.py +0 -0
@@ -7,6 +7,45 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.0] — 2026-09-22
11
+
12
+ ### Fixed
13
+
14
+ - **`supersede_decision` no longer half-applies when an anchor is invalid.** It wrote the
15
+ successor and closed the predecessor before checking the anchors, so an illegal `relation`
16
+ left an accepted successor with none, or only some, of its bindings: wholly or partly
17
+ invisible to task-seeded retrieval, and permanent in an append-only store. An anchor list
18
+ in which no anchor had a `name` reached the same state without any error.
19
+ - **All five anchor-taking tools (`add_decision`, `supersede_decision`, `add_fact`,
20
+ `supersede_fact`, `add_anchors`) now validate the whole anchor list before their first
21
+ write.** An illegal `relation` is now rejected on every path; `supersede_decision` used to
22
+ accept it silently when no graph was present or the anchor had no `name`. Two cases are
23
+ newly rejected. The first is a `name` or `file_path` that is not a string, which used to
24
+ half-write on the fact paths and `add_anchors`, and on the decision paths whenever a graph
25
+ was present. The second is a non-empty list in which no anchor has a `name`, which used to
26
+ succeed while binding nothing. On `add_fact` it also bypassed the check that an anchorless
27
+ fact supports a live decision.
28
+
29
+ ## [0.3.1] — 2026-09-19
30
+
31
+ ### Fixed
32
+
33
+ - **A session is now identified by its transcript, not by the host's `session_id`.** That
34
+ field does not mean the same thing on every host: Claude Code mints one per session (and
35
+ names the transcript after it), while Codex reports the *workspace* session — one id that
36
+ outlives a single session, survives `resume`, and is shared by every thread beneath it. On
37
+ Codex that put a whole store's history in one bucket (measured: 1928 of 1929 recorded events
38
+ in one live store, spanning 27 hours) and, worse, made every per-session guard fire once per
39
+ workspace instead of once per session: the second thread opened within a minute had its
40
+ context map dropped as a duplicate injection, and the first thread to finish spent the
41
+ capture nudge for all of them. All four hook sites now take the session from
42
+ `transcript_path`'s file name, falling back to `session_id` when no transcript is given.
43
+ On Claude Code this is the same string it already recorded — verified against a live store,
44
+ where all 74 recorded session ids are exactly transcript names — so nothing moves there.
45
+ The workspace session is kept beside it in the new `telemetry:session_group` meta key, as
46
+ the only link between sibling threads. See
47
+ [`docs/reference/hooks.md`](docs/reference/hooks.md#which-session-a-hook-is-in).
48
+
10
49
  ## [0.3.0] — 2026-09-19
11
50
 
12
51
  ### 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.3.0) — the full loop (capture, ratification, mistakes-first
16
+ Sidegraph is pre-1.0 (v0.4.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.3.0
3
+ Version: 0.4.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
@@ -63,11 +63,11 @@ Works cold: no existing ADRs required. No API key — the core loop is fully loc
63
63
 
64
64
  ```bash
65
65
  # 1. Install the graph engine and build a graph over your repo (code or markdown)
66
- uv tool install graphifyy # double "y" — that's the PyPI name; CLI is `graphify`
66
+ uv tool install "graphifyy==0.9.6" # double "y" — that's the PyPI name; CLI is `graphify`
67
67
  cd /path/to/your/repo && graphify update .
68
68
  ```
69
69
 
70
- `[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]"`) — it adds
70
+ `[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]==0.9.6"`) — it adds
71
71
  Graphify's *own* MCP server, a deeper structure-query layer over the same graph. Sidegraph
72
72
  only ever reads `graph.json`, so the plain install above is all it needs.
73
73
 
@@ -91,7 +91,8 @@ sidegraph-init
91
91
 
92
92
  4. **Name your domains** — turns the graph's communities into a described table of
93
93
  contents. Tell your agent *"name my domains"* (or run `/sidegraph:name-domains`) and
94
- pick one of the 2–3 ready-made sets it proposes. CLI alternative for scripted/CI use:
94
+ review its proposed grouping (larger graphs may get 2–3 alternatives). CLI alternative
95
+ for scripted/CI use:
95
96
  `sidegraph-domains bootstrap` + `sidegraph-ratify` —
96
97
  see [naming your domains](docs/guides/naming-your-domains.md).
97
98
 
@@ -35,11 +35,11 @@ Works cold: no existing ADRs required. No API key — the core loop is fully loc
35
35
 
36
36
  ```bash
37
37
  # 1. Install the graph engine and build a graph over your repo (code or markdown)
38
- uv tool install graphifyy # double "y" — that's the PyPI name; CLI is `graphify`
38
+ uv tool install "graphifyy==0.9.6" # double "y" — that's the PyPI name; CLI is `graphify`
39
39
  cd /path/to/your/repo && graphify update .
40
40
  ```
41
41
 
42
- `[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]"`) — it adds
42
+ `[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]==0.9.6"`) — it adds
43
43
  Graphify's *own* MCP server, a deeper structure-query layer over the same graph. Sidegraph
44
44
  only ever reads `graph.json`, so the plain install above is all it needs.
45
45
 
@@ -63,7 +63,8 @@ sidegraph-init
63
63
 
64
64
  4. **Name your domains** — turns the graph's communities into a described table of
65
65
  contents. Tell your agent *"name my domains"* (or run `/sidegraph:name-domains`) and
66
- pick one of the 2–3 ready-made sets it proposes. CLI alternative for scripted/CI use:
66
+ review its proposed grouping (larger graphs may get 2–3 alternatives). CLI alternative
67
+ for scripted/CI use:
67
68
  `sidegraph-domains bootstrap` + `sidegraph-ratify` —
68
69
  see [naming your domains](docs/guides/naming-your-domains.md).
69
70
 
@@ -16,9 +16,10 @@ Sidegraph is a local-only tool. Its entire data surface:
16
16
  (`.sidegraph/` by convention) — small, human-readable JSON record files meant to be
17
17
  committed to your repo, a derived and gitignored `index.db` (a local SQLite index
18
18
  rebuilt from those files for fast queries, never itself committed), a committed format
19
- marker, and a `.gitignore` the store writes for itself. Opening a pre-0.4.0 single-file
20
- store (`decisions.db`) triggers a one-time migration that renames the legacy file to
21
- `decisions.db.migrated-backup` (kept, never deleted) alongside writing the new
19
+ marker, and a `.gitignore` the store writes for itself. Opening a legacy single-file
20
+ store (`decisions.db`, from before store schema 0.4.0) triggers a one-time migration
21
+ that renames the legacy file to `decisions.db.migrated-backup` (kept, never deleted)
22
+ alongside writing the new
22
23
  directory layout. Outside `.sidegraph/`, the only filesystem writes are the standard
23
24
  config snippets you install yourself (`.mcp.json`, hook entries) — Sidegraph touches
24
25
  nothing else. See [`docs/reference/store-format.md`](docs/reference/store-format.md)
@@ -0,0 +1,56 @@
1
+ # Sidegraph documentation
2
+
3
+ Sidegraph stores durable decisions and non-derivable facts beside the repository they
4
+ describe. Start with the task you have now; [`llms.txt`](llms.txt) is the flat index for an
5
+ agent.
6
+
7
+ ## Install and prove it works
8
+
9
+ 1. [Install Sidegraph and Graphify](getting-started/installation.md).
10
+ 2. Follow the [end-to-end quickstart](getting-started/quickstart.md).
11
+ 3. Use the recommended host path for [Claude Code](getting-started/claude-code-setup.md) or
12
+ [Codex](getting-started/codex-setup.md).
13
+ 4. Run the [four-case verification checklist](guides/verifying-your-setup.md).
14
+
15
+ If the repository already has ADRs or specs, use the
16
+ [preview-first bootstrap](getting-started/bootstrap.md) after installation.
17
+
18
+ ## Use it during normal work
19
+
20
+ - [Retrieve context before editing](guides/retrieval-in-sessions.md).
21
+ - [Capture decisions and supporting facts](guides/capturing-decisions.md).
22
+ - [Name domains for the SessionStart table of contents](guides/naming-your-domains.md).
23
+ - [Share and review the store as a team](guides/team-workflow.md).
24
+
25
+ ## Operate and maintain it
26
+
27
+ - [Survive refactors and heal anchors](guides/surviving-refactors.md).
28
+ - [Run CI and scheduled maintenance](guides/ci-cd-maintenance.md).
29
+ - [Import decision-shaped documents](guides/semantic-docs.md).
30
+ - [See runtime cost and operational boundaries](reference/operations.md).
31
+ - [Cut a Sidegraph release](reference/releasing.md) (maintainers).
32
+
33
+ The [pilot kit](pilot-kit/README.md) is an evaluation protocol for teams deciding whether to
34
+ adopt Sidegraph. The engineering whitepaper is generated in the published snapshot at
35
+ [`docs/whitepaper/index.md`](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/whitepaper/index.md);
36
+ it is optional background on evidence, limits, and repository fit.
37
+
38
+ ## Understand the model
39
+
40
+ - [Decision memory](concepts/decision-memory.md) — what belongs in the store.
41
+ - [Mind model](concepts/mind-model.md) — domains, TOC, and drill-down.
42
+ - [Data model](concepts/data-model.md) — persisted record shapes.
43
+ - [Anchoring](concepts/anchoring.md) — how records stay attached to code and docs.
44
+ - [Retrieval](concepts/retrieval.md) — ranking, trust quarantine, and budgets.
45
+
46
+ ## Look up an exact contract
47
+
48
+ - [MCP tools](reference/mcp-tools.md)
49
+ - [CLI](reference/cli.md)
50
+ - [Hooks](reference/hooks.md)
51
+ - [Configuration](reference/configuration.md)
52
+ - [Store format](reference/store-format.md)
53
+ - [Stability levels](reference/stability.md)
54
+ - [Git bindings](reference/git-bindings.md)
55
+ - Integrations: [Claude Code](integrations/claude-code.md),
56
+ [Codex](integrations/codex.md), [Graphify](integrations/graphify.md)
@@ -254,20 +254,24 @@ written; a garbled row raises and leaves the legacy file untouched) into the can
254
254
  file-per-record layout, stamped at the running code's current `SCHEMA_VERSION`; the legacy
255
255
  file is renamed to `<name>.migrated-backup` (never deleted) rather than removed. Both `0.2.0`
256
256
  and `0.3.0` sources go through this same export, not a stamp-only rewrite — see
257
- [store format: migration to 0.4.0](../reference/store-format.md#migration-to-040-from-02x-and-03x)
257
+ [store format: migration to schema 0.4.0](../reference/store-format.md#migration-to-schema-040-from-schema-02x-and-03x)
258
258
  for the full four-step sequence. Any other mismatch (a version older than `0.2.0`, a
259
259
  newer/future version, or an unrecognized string) is a hard rejection: use a fresh store.
260
260
 
261
261
  ## `Initiative` — the Tier-0 grouping container
262
262
 
263
- Not a record type in its own right: a flat label a decision can be bound to at tier 0, so
264
- "everything decided during the retry-hardening work" is retrievable as a set even when
265
- those decisions touch unrelated code. Created implicitly at capture (a draft's
266
- `initiative` field, or the git branch name when one is not given).
263
+ The high-level capture APIs use an initiative as a flat Tier-0 abstract entity named
264
+ `initiative:<label>`. Passing a draft's `initiative` field creates that entity and binding;
265
+ omitting it creates neither. Capture may derive the label from a branch before it reaches
266
+ this step, but the storage layer does not do so implicitly.
267
+
268
+ The `Initiative` model below is a separate low-level persisted record supported by
269
+ `Store.upsert_initiative`. Current MCP capture paths do not create one, so do not expect an
270
+ `initiatives/<id>.json` file merely because a decision has an `initiative:*` binding.
267
271
 
268
272
  | Field | Type | Meaning |
269
273
  |---|---|---|
270
274
  | `id` | ULID | Record identity. |
271
275
  | `name` | str | The label as written at capture — a branch name or a short phrase. |
272
276
  | `description` | str \| `null` | Optional one-liner; usually absent for branch-derived initiatives. |
273
- | `tags` | list[str] | Free-text tags, slugified into `tag:<slug>` entities like a decision's own. |
277
+ | `tags` | list[str] | Stored strings on the low-level record; `upsert_initiative` does not slugify them or create `tag:*` entities. |
@@ -187,7 +187,7 @@ Three ways to group decisions across entities exist now, and they answer differe
187
187
  |---|---|---|---|
188
188
  | **Tag** (`tag:<slug>`) | "which decisions carry this cross-cutting label?" | a bare slug, no prose | none — get-or-create, no ratification, no supersession |
189
189
  | **Domain** | "what is this named area of the system, and what do I need to know about it?" | slug + title + required WHY-IT-EXISTS summary + optional parent/communities/path_prefixes | full record: proposed → accepted, append-only supersession to revise |
190
- | **Initiative** | "which decisions belong to this piece of work?" | a name + optional description | flat container, no ratification gate of its own |
190
+ | **Initiative** (`initiative:<label>`) | "which decisions belong to this piece of work?" | a Tier-0 label on captured decisions | flat grouping, no ratification gate of its own |
191
191
 
192
192
  A tag is the cheapest of the three — free-form text slugified into a durable entity at capture
193
193
  (`add_decision(tags=[...])`, or a draft's `tags` field), many-to-many, tier-0, no lifecycle to
@@ -196,7 +196,8 @@ describing *why performance work exists here* — that's what a domain's summary
196
196
  domain is the only one of the three that is itself ratified content: it has a required summary,
197
197
  it can be superseded, and it is what the TOC and `drill_down` are built from. An initiative
198
198
  groups decisions around a unit of *work* (a branch, a project) rather than a unit of the
199
- *system* — it has no summary field and nothing renders a description-first view of it the way
199
+ *system*. Current capture paths implement it as an abstract entity and binding, not as an
200
+ `Initiative` record with a description; nothing renders a description-first view of it the way
200
201
  `drill_down` does for a domain.
201
202
 
202
203
  ## See also
@@ -55,12 +55,12 @@ at two points:
55
55
  rebuild it.
56
56
  2. **Every `ratify` call (MCP tool or `sidegraph-ratify` CLI) that actually accepted or dropped
57
57
  at least one domain** — immediately, without waiting for the next sync. This is what makes
58
- `bootstrap → ratify` visibly turn the TOC on in the very same session: a lazy sync alone
59
- only refreshes `last_synced_graph_version`, never the TOC cache, so without this the domain
60
- layer would look inert until the next real graph rebuild.
58
+ `bootstrap → ratify` visibly turn the TOC on in the very same session, even when no graph
59
+ sync is needed.
61
60
 
62
- A decisions-only ratify (no domain ids in the batch) leaves the cache untouched — it wouldn't
63
- change the TOC anyway.
61
+ A decisions-only ratify (no domain ids in the batch) does not rebuild the cache immediately.
62
+ It can change a rendered mistake count; the next completed or skipped sync refreshes that
63
+ count. Domain acceptance is the special case refreshed in the ratify operation itself.
64
64
 
65
65
  ## `drill_down(domain_slug)` — the Axis-1 operation
66
66
 
@@ -104,8 +104,10 @@ render actually deliver on real ADR-scale content instead of dropping it.)
104
104
 
105
105
  ### Ranking buckets, and why mistakes come first
106
106
 
107
- Decisions are gathered from seeds outward and ranked into ordered buckets, each sorted by
108
- recency (`valid_from` descending) within itself:
107
+ Decisions are gathered from seeds outward and ranked into ordered buckets. Each source list
108
+ (a seed entity, community/domain, peripheral entity, or global scope) is sorted by recency
109
+ before it is appended; the implementation does not perform a second global recency sort across
110
+ all sources in the same bucket.
109
111
 
110
112
  | Bucket | Section | Contents |
111
113
  |---|---|---|
@@ -154,20 +156,19 @@ not the other way around.
154
156
  A `Fact` rides the same `memory_chars` budget as decisions, spent strictly after them, in two
155
157
  forms:
156
158
 
157
- - **Inline evidence.** In buckets B-D, the moment a decision line is placed
158
- (`rank_decisions.add()`), its live supporting facts (`store.facts_for_decision` — "live" =
159
- status `accepted` or `proposed`, `valid_to` unset; a `superseded` fact never renders
160
- inline, only its successor does, via its own anchors) render immediately as adjacent
161
- ` evidence: <statement> [<source>]` lines directly under that decision, tagged
162
- `[unratified]` when still `proposed` (a decision line can also carry `[drifted]` — see
163
- the code-drift marker below). Bucket A (mistakes) defers this to a second pass
159
+ - **Inline evidence.** In buckets B-D, the moment an accepted decision line is placed
160
+ (`rank_decisions.add()`), its live **accepted** supporting facts render immediately as
161
+ adjacent ` evidence: <statement> [<source>]` lines. A live proposed supporting fact is
162
+ quarantined in the final **Unratified proposals** section instead; a superseded fact does
163
+ not render. Bucket A (mistakes) defers accepted evidence to a second pass
164
164
  instead of rendering it immediately — see the mistakes-budget guarantee below for why.
165
165
  Either way, evidence lines degrade/drop with their decision under budget pressure — a fact
166
166
  only ever renders next to a decision that itself made the cut.
167
167
  - **The Known-facts bucket** (`## Known facts`, rendered right after `## Decisions`, ahead of
168
- the structural map). Standalone facts — ones not already rendered inline under a decision
169
- above — bound to a seed or peripheral entity, walked in the same seed-then-peripheral order
170
- every other bucket uses, sorted by fact id for determinism. Populated only AFTER every
168
+ the structural map). Accepted standalone facts — ones not already rendered inline under a
169
+ decision above — bound to a seed or peripheral entity, walked in the same
170
+ seed-then-peripheral order every other bucket uses, sorted by fact id for determinism.
171
+ Proposed facts go to **Unratified proposals**. This bucket is populated only AFTER every
171
172
  decision bucket (A-D) and the superseded one-liners have already had first claim on the
172
173
  budget.
173
174
 
@@ -304,9 +305,10 @@ too (see [mind model](mind-model.md#how-domains-relate-to-engine-communities)).
304
305
  ### Rendering
305
306
 
306
307
  `TaskContext.render()` emits, in order: **Known mistakes & gotchas**, **Decisions** (with any
307
- inline `evidence:` lines nested under the decision they support), **Known facts** (standalone
308
- facts — see above), **Structural map** (the budgeted subgraph around the seeds, rendered as
309
- pointers — `- name (file_type) [file_path:line]`, never inlined code), then **Related**.
308
+ accepted inline `evidence:` lines nested under the decision they support), **Known facts**
309
+ (accepted standalone facts — see above), **Structural map** (the budgeted subgraph around the
310
+ seeds, rendered as pointers — `- name (file_type) [file_path:line]`, never inlined code),
311
+ **Related**, then **Unratified proposals**.
310
312
  Missing sections are omitted; an empty result renders `"No context found."`.
311
313
 
312
314
  ## See also
@@ -152,12 +152,8 @@ supported-document path against it:
152
152
  > cannot run today. This is the intended reproduction path once it ships; there is no working
153
153
  > substitute before then.
154
154
 
155
- > **`@main` is a mutable ref.** Every `git+…@main` command on this page tracks the
156
- > branch: what you install today is not what you installed yesterday, and a `uvx` cache
157
- > refresh can change it under you. Fine for trying Sidegraph out; for anything you depend
158
- > on — CI, a shared team setup, a pilot you intend to measure — replace `@main` with a
159
- > commit SHA (`git+https://github.com/SantyagoSeaman/sidegraph@<sha>`) so the version is a
160
- > decision you made rather than whatever HEAD happened to be. See [`reference/stability.md`](../reference/stability.md) for what each surface promises.
155
+ This command follows the current development branch. For durable environments, see
156
+ [how to pin mutable development references](installation.md#mutable-development-references).
161
157
 
162
158
  ```bash
163
159
  git clone --branch demo https://github.com/SantyagoSeaman/sidegraph.git sidegraph-demo
@@ -13,12 +13,8 @@ Run these in the repo you want memory over (not the Sidegraph checkout).
13
13
 
14
14
  Inside a Claude Code session, in that repo:
15
15
 
16
- > **`@main` is a mutable ref.** Every `git+…@main` command on this page tracks the
17
- > branch: what you install today is not what you installed yesterday, and a `uvx` cache
18
- > refresh can change it under you. Fine for trying Sidegraph out; for anything you depend
19
- > on — CI, a shared team setup, a pilot you intend to measure — replace `@main` with a
20
- > commit SHA (`git+https://github.com/SantyagoSeaman/sidegraph@<sha>`) so the version is a
21
- > decision you made rather than whatever HEAD happened to be. See [`reference/stability.md`](../reference/stability.md) for what each surface promises.
16
+ The commands below follow the current development branch. For durable environments, see
17
+ [how to pin mutable development references](installation.md#mutable-development-references).
22
18
 
23
19
  ```
24
20
  /plugin marketplace add SantyagoSeaman/sidegraph
@@ -73,10 +69,10 @@ flag if you want a private, user-local registration instead.
73
69
  `uv run --project /ABSOLUTE/PATH/TO/sidegraph sidegraph-mcp` (CLI form: `-- uv run --project
74
70
  /ABSOLUTE/PATH/TO/sidegraph sidegraph-mcp`).
75
71
 
76
- > **Once Sidegraph is published to PyPI**, both shorten further, to `uvx --from sidegraph
77
- > sidegraph-mcp` — see
78
- > [`integrations/claude-code.md`](../integrations/claude-code.md#plugin-install-path)
79
- > for the pin-at-1.0 policy.
72
+ The released package is available from PyPI, so both shorten further, to `uvx --from
73
+ sidegraph sidegraph-mcp` — see
74
+ [`integrations/claude-code.md`](../integrations/claude-code.md#plugin-install-path)
75
+ for the pinning policy. Use `sidegraph==X.Y.Z` in automation.
80
76
 
81
77
  The store (`SIDEGRAPH_DIR`) is meant to live **inside the repo it documents** — commit
82
78
  `.sidegraph/` alongside your code (its committed record directories, not the gitignored
@@ -17,12 +17,8 @@ and AGENTS.md registered separately, for fine control or a source checkout).
17
17
 
18
18
  Inside a Codex CLI session, in that repo:
19
19
 
20
- > **`@main` is a mutable ref.** Every `git+…@main` command on this page tracks the
21
- > branch: what you install today is not what you installed yesterday, and a `uvx` cache
22
- > refresh can change it under you. Fine for trying Sidegraph out. For anything you depend
23
- > on, such as CI, a shared team setup, or a pilot you intend to measure, replace `@main`
24
- > with a commit SHA (`git+https://github.com/SantyagoSeaman/sidegraph@<sha>`) so the version
25
- > is a decision you made rather than whatever HEAD happened to be. See [`reference/stability.md`](../reference/stability.md) for what each surface promises.
20
+ The commands below follow the current development branch. For durable environments, see
21
+ [how to pin mutable development references](installation.md#mutable-development-references).
26
22
 
27
23
  ```
28
24
  /plugin marketplace add SantyagoSeaman/sidegraph
@@ -47,7 +43,7 @@ Skip to [Verify](#verify) once installed.
47
43
 
48
44
  ## Option B: manual registration
49
45
 
50
- Prefer explicit `config.toml`/`.codex/hooks/hooks.json` files (e.g. for review in a PR), or
46
+ Prefer explicit `.codex/config.toml`/`.codex/hooks.json` files (e.g. for review in a PR), or
51
47
  want to point at a source checkout? Register the pieces yourself.
52
48
 
53
49
  ### 1. Register the MCP server
@@ -58,7 +54,7 @@ Via the CLI:
58
54
  codex mcp add sidegraph -- bash -lc "cd /ABSOLUTE/PATH/TO/your-repo && SIDEGRAPH_DIR=.sidegraph SIDEGRAPH_GRAPH=graphify-out/graph.json uv run --project /ABSOLUTE/PATH/TO/sidegraph sidegraph-mcp"
59
55
  ```
60
56
 
61
- Or add directly to `~/.codex/config.toml`:
57
+ Or add it to the repo's `.codex/config.toml` (recommended for project-specific setup):
62
58
 
63
59
  ```toml
64
60
  [mcp_servers.sidegraph]
@@ -69,9 +65,10 @@ args = [
69
65
  ]
70
66
  ```
71
67
 
72
- `config.toml` is a single global file, not per-project, so the `cd` wrapper pins each
73
- registration to the repo whose `.sidegraph/` it should read — use a distinct
74
- `[mcp_servers.*]` name per repo if you wire up more than one.
68
+ Codex also reads `~/.codex/config.toml`. Use the project file when the registration belongs
69
+ to this repository; use the global file only when you intentionally want the server in every
70
+ project. The `cd` wrapper remains useful in either scope because Sidegraph's relative paths
71
+ must resolve against the repository whose memory it serves.
75
72
 
76
73
  ### 2. Tell the agent about Sidegraph
77
74
 
@@ -89,7 +86,7 @@ first. When you make a real decision or hit a hard-won gotcha, call `propose_dec
89
86
 
90
87
  ### 3. Add the hooks
91
88
 
92
- Create `.codex/hooks/hooks.json` in the repo:
89
+ Create `.codex/hooks.json` in the repo:
93
90
 
94
91
  ```json
95
92
  {
@@ -125,9 +122,9 @@ working on a non-git corpus too (Sidegraph doesn't require the corpus to be a gi
125
122
  [`integrations/graphify.md`](../integrations/graphify.md#non-git-and-doc-only-corpora)), where a
126
123
  bare `git rev-parse --show-toplevel` would fail and leave `cd` with no argument.
127
124
 
128
- No `PreToolUse` entry is included above: Codex CLI's `PreToolUse` event (as of this writing)
129
- only intercepts Bash/patch/MCP tool calls, not file-read tools like `Read`/`Grep`, so Claude
130
- Code's Read/Grep redirect nudge
125
+ No `PreToolUse` entry is included above. Codex can invoke that event for local function tools,
126
+ but it has no stable `Read`/`Grep` tool pair to which Sidegraph's Claude-specific redirect can
127
+ attach. Therefore Claude Code's Read/Grep redirect nudge
131
128
  (`sidegraph-pre-tool-use`) has no Codex counterpart to wire up yet — see
132
129
  [`integrations/codex.md`](../integrations/codex.md) for details.
133
130
 
@@ -11,6 +11,15 @@ Sidegraph has two parts: **Sidegraph itself** (the decision store + MCP server +
11
11
  - An MCP- and hooks-capable agent host: [Claude Code](claude-code-setup.md) or
12
12
  [OpenAI Codex CLI](codex-setup.md).
13
13
 
14
+ ## Mutable development references
15
+
16
+ The `git+…@main` examples below track a mutable branch: a later `uvx` cache refresh can
17
+ install different code. That is useful while trying Sidegraph. For CI, shared setup, or a
18
+ measured pilot, replace `@main` with a release tag or commit SHA, for example
19
+ `git+https://github.com/SantyagoSeaman/sidegraph.git@<sha>`. The plugin marketplace is the
20
+ exception: its public manifests intentionally track `main`. See
21
+ [`reference/stability.md`](../reference/stability.md) for the promises made by each surface.
22
+
14
23
  ## Install Sidegraph
15
24
 
16
25
  ### Option A — PyPI (recommended for the package + CLIs)
@@ -26,28 +35,24 @@ That puts `sidegraph-mcp` and every `sidegraph-*` CLI on your PATH. Pin a versio
26
35
  `uvx --from sidegraph sidegraph-mcp` works — the entry-point name differs from the package
27
36
  name, so `--from sidegraph` is required (a bare `uvx sidegraph-mcp` will not resolve).
28
37
 
29
- ### Option B — Claude Code plugin (recommended for Claude Code — auto-wires the hooks)
30
-
31
- Inside a Claude Code session, in the repo you want memory over:
38
+ ### Option B — host plugin (recommended for Claude Code and Codex)
32
39
 
33
- > **`@main` is a mutable ref.** Every `git+…@main` command on this page tracks the
34
- > branch: what you install today is not what you installed yesterday, and a `uvx` cache
35
- > refresh can change it under you. Fine for trying Sidegraph out; for anything you depend
36
- > on — CI, a shared team setup, a pilot you intend to measure — replace `@main` with a
37
- > commit SHA (`git+https://github.com/SantyagoSeaman/sidegraph@<sha>`) so the version is a
38
- > decision you made rather than whatever HEAD happened to be. See [`reference/stability.md`](../reference/stability.md) for what each surface promises.
40
+ Inside an interactive host session, in the repo you want memory over:
39
41
 
40
42
  ```
41
43
  /plugin marketplace add SantyagoSeaman/sidegraph
42
44
  /plugin install sidegraph@sidegraph
43
45
  ```
44
46
 
45
- Installs the MCP server and all three hooks (`SessionStart`, `Stop`, `PreToolUse`)
46
- automatically. The plugin's bundled config runs everything via `uvx --from
47
- git+https://github.com/SantyagoSeaman/sidegraph.git@main`, so it builds straight from this
48
- repository with `uv` — **no PyPI publish needed, works today**. See
49
- [the plugin install path](../integrations/claude-code.md#plugin-install-path) for what the
50
- bundled `.mcp.json`/`hooks.json` actually run, and the cwd-pinning details.
47
+ The Claude Code host installs the MCP server and all three hooks (`SessionStart`, `Stop`,
48
+ `PreToolUse`). Codex installs the MCP server, `SessionStart`/`Stop`, and the bundled skills;
49
+ its tool surface has no equivalent target for the Claude-specific Read/Grep nudge. The
50
+ plugin's bundled config runs everything via `uvx --from
51
+ git+https://github.com/SantyagoSeaman/sidegraph.git@main`: unlike the package install, the
52
+ plugin deliberately follows the public repository's `main` branch and does not use the
53
+ PyPI package. See
54
+ the integration details for [Claude Code](../integrations/claude-code.md#plugin-install-path)
55
+ or [Codex](../integrations/codex.md#plugin-install-path).
51
56
 
52
57
  ### Option C — uvx directly from git (latest / unreleased)
53
58
 
@@ -92,7 +97,7 @@ runs against Sidegraph's own `.venv`. Silence it with `uv run --no-active --proj
92
97
  deactivating the other venv first.
93
98
 
94
99
 
95
- ### Entry points
100
+ ## Entry points
96
101
 
97
102
  This table is the terminal reference. In day-to-day use you rarely type any of it: everyday
98
103
  operations (recording, ratifying, syncing, domain work) run conversationally inside a
@@ -109,25 +114,23 @@ setup, scripted/CI use, and the two deliberately human-run jobs (`sidegraph-impo
109
114
  | `sidegraph-pre-tool-use` | `PreToolUse` hook — redirects a blind `Read`/`Grep` toward `get_task_context`/`drill_down`. |
110
115
  | `sidegraph-bootstrap` | Guided CLI — scan one of six supported ADR/spec profiles, preview and review candidates, write only after confirmation, verify anchors/host integration, and prove production retrieval. |
111
116
  | `sidegraph-init` | CLI — bootstrap `.sidegraph/` in a repo: create the store, check for the graph, print the plugin install path (and the no-plugin `claude mcp add` alternative). |
112
- | `sidegraph-ratify` | CLI — review/accept/drop proposed decisions and domains. |
117
+ | `sidegraph-ratify` | CLI — review/accept/drop proposed decisions, facts, and domains. |
113
118
  | `sidegraph-sync` | CLI — re-anchor the store after a Graphify rebuild. |
114
119
  | `sidegraph-import` | CLI — bootstrap decisions from Graphify rationale nodes (code docstrings, or ADR/SAD prose after a semantic pass), or from existing ADR/spec markdown directly (`--docs`). |
115
120
  | `sidegraph-domains` | CLI — author Domain proposals: `bootstrap` from graph communities, or `add` manually. |
116
121
  | `sidegraph-compact` | CLI — pack terminal-status (superseded/rejected/dropped) decisions and domains into an immutable archive segment. |
117
122
  | `sidegraph-verify` | CLI — lint the store's canonical files against its write-path invariants (schema, validity windows, referential integrity, ULID uniqueness); `--against <git-ref>` additionally checks that every store file changed vs that ref was mutated legally (CI mode). |
118
123
  | `sidegraph-doctor` | CLI — one-stop store health: composes `sidegraph-verify`'s strict lint with an advisory curation pass (stale proposals, dangling/degraded/orphaned records, never-surfaced decisions); `--check` also fails on advisory findings. |
119
- | `sidegraph-viz` | CLI — render a read-only interactive HTML graph of the decision/fact store (nodes = decisions + facts + anchored entities; edges colored by anchor status; supersede + fact→decision links) plus a JSON sibling. |
124
+ | `sidegraph-viz` | CLI — render an interactive HTML/JSON view of decisions, facts, entities, anchor status, supersession, and evidence links. |
120
125
  | `sidegraph-export-okf` | CLI — project the store into a deterministic [Open Knowledge Format v0.1](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf) bundle any OKF-aware tool can read; strictly one-way, the store stays the source of truth. |
121
126
  | `sidegraph-stats` | CLI — one screen of local usage statistics from the gitignored index (how often memory was asked for, how much of the code worked on has memory anchored to it, what the store holds, anchor health); read-only, never creates the index, `--json` for the same report as data. Reachable in a session as `/sidegraph:stats`. |
122
- | `sidegraph-prepare-commit-msg` | `prepare-commit-msg` git hook — comments candidate `Sidegraph-Decision:` trailers into the commit message template for the human/agent to uncomment; never blocks or stalls `git commit`. See [`reference/git-bindings.md`](../reference/git-bindings.md). |
127
+ | `sidegraph-prepare-commit-msg` | `prepare-commit-msg` git hook — comments candidate `Sidegraph-Decision:` trailers into the commit message template; fail-open with bounded git/SQLite stages. See [`reference/git-bindings.md`](../reference/git-bindings.md). |
123
128
  | `sidegraph-blame` | CLI — `git blame` a file, joined to the decisions/facts each hunk's commit carries (commit trailers + `provenance.commit`). See [`reference/git-bindings.md`](../reference/git-bindings.md). |
124
129
 
125
- All of them read `SIDEGRAPH_GRAPH` (default `graphify-out/graph.json`) from the environment,
126
- resolved relative to the process's working directory. Same for `SIDEGRAPH_DIR` — every command
127
- (`sidegraph-mcp`, the three hooks, and every `cli.py` subcommand including `sidegraph-init`)
128
- resolves the store directory through the same shared precedence: an explicit `--db` flag,
129
- then `$SIDEGRAPH_DIR`, then the deprecated `$SIDEGRAPH_DB`, then an existing `.sidegraph/`,
130
- then the default `.sidegraph` — see
130
+ Commands that need the graph use `SIDEGRAPH_GRAPH` (default
131
+ `graphify-out/graph.json`). Store-aware entry points resolve `SIDEGRAPH_DIR` through the same
132
+ shared precedence: an explicit `--db` flag where available, then `$SIDEGRAPH_DIR`, then the
133
+ deprecated `$SIDEGRAPH_DB`, then an existing `.sidegraph/`, then the default `.sidegraph` — see
131
134
  [`reference/configuration.md`](../reference/configuration.md#store-path-resolution) for the
132
135
  exact rules.
133
136
 
@@ -150,7 +153,7 @@ Fallback if you don't use `uv`: `pip install 'graphifyy==0.9.6'`.
150
153
  `[mcp]` is an **optional** extra (`uv tool install "graphifyy[mcp]==0.9.6"`) that adds Graphify's
151
154
  *own* MCP server — a deeper structure-query layer over the same `graph.json`. It coexists
152
155
  fine with Sidegraph; Sidegraph only ever reads `graph.json` directly and doesn't need it. Add
153
- `[pdf]` if your corpus includes PDFs (extras compose: `"graphifyy[mcp,pdf]"`).
156
+ `[pdf]` if your corpus includes PDFs (extras compose: `"graphifyy[mcp,pdf]==0.9.6"`).
154
157
 
155
158
  See [`integrations/graphify.md`](../integrations/graphify.md) for how Sidegraph reads
156
159
  Graphify's output, corpus types, and troubleshooting.
@@ -161,8 +164,5 @@ Continue to the [quickstart](quickstart.md) for the shortest path to a first cap
161
164
  retrieved decision. If the repository already contains ADRs or supported flow specs, use the
162
165
  [Bootstrap existing rationale guide](bootstrap.md) for the preview-first path instead. Once
163
166
  you've done that, run through
164
- [verifying your setup](../guides/verifying-your-setup.md) — a nine-case checklist that
165
- proves domain onboarding, domain management, durability, mistakes-first retrieval, quiet
166
- capture, refactor survival, git-native merges, facts evidence and cascade, and your own usage statistics
167
- actually work on your repo, each with an exact command and an observable
168
- result.
167
+ [verifying your setup](../guides/verifying-your-setup.md) — a four-case checklist for host
168
+ wiring, durable capture/retrieval, ratification with evidence, and sync/repository hygiene.
@@ -0,0 +1,71 @@
1
+ # Quickstart
2
+
3
+ This is one complete loop: build the graph, create the store, connect one host, record one
4
+ anchored gotcha, and retrieve it in a new session. It assumes the package and Graphify are
5
+ installed as described in [Installation](installation.md).
6
+
7
+ Run the shell commands from the repository that Sidegraph should remember.
8
+
9
+ ## 1. Build the graph and store
10
+
11
+ ```bash
12
+ graphify update .
13
+ sidegraph-init
14
+ ```
15
+
16
+ `graphify update .` creates `graphify-out/graph.json`; Sidegraph reads it but never writes to
17
+ it. `sidegraph-init` creates the repo-committed `.sidegraph/` record directories and a
18
+ gitignored derived `index.db`. Both commands are safe to run again.
19
+
20
+ If the repository already contains ADRs or supported flow specs, you can now switch to the
21
+ [preview-first bootstrap](bootstrap.md). Otherwise continue here.
22
+
23
+ ## 2. Connect your host
24
+
25
+ The plugin is the recommended route for both Claude Code and Codex:
26
+
27
+ ```text
28
+ /plugin marketplace add SantyagoSeaman/sidegraph
29
+ /plugin install sidegraph@sidegraph
30
+ ```
31
+
32
+ Start a new interactive session in the repository and approve the hook trust prompt. For a
33
+ manual or source-checkout setup, use the host-specific page:
34
+ [Claude Code](claude-code-setup.md) or [Codex](codex-setup.md).
35
+
36
+ ## 3. Record one real gotcha
37
+
38
+ Choose a real file or symbol in the repository. Tell the agent:
39
+
40
+ > Record this gotcha against `<real path or symbol>`: caching parser output by file path
41
+ > failed because the same path can identify different content across branches; key it by a
42
+ > content hash instead.
43
+
44
+ This human-requested path calls `add_decision`, so the record lands accepted. Confirm that a
45
+ new JSON file exists under `.sidegraph/decisions/` and that its binding points at the file or
46
+ symbol you named.
47
+
48
+ ## 4. Retrieve it from a fresh session
49
+
50
+ Start another session in the same repository and ask:
51
+
52
+ > Before I edit `<the same path or symbol>`, retrieve the Sidegraph task context. What should
53
+ > I know?
54
+
55
+ The agent should call `get_task_context` with that path or entity. The gotcha appears in
56
+ **Known mistakes & gotchas**, ahead of accepted ADRs and related memory.
57
+
58
+ ## 5. Commit the durable part
59
+
60
+ ```bash
61
+ git status --short
62
+ sidegraph-verify
63
+ ```
64
+
65
+ Commit `.sidegraph/format`, `.sidegraph/.gitignore`, and the canonical JSON directories.
66
+ Do not commit `.sidegraph/index.db`; it is derived and already ignored.
67
+
68
+ The loop is now working. Next, run the short
69
+ [verification checklist](../guides/verifying-your-setup.md), then
70
+ [name domains](../guides/naming-your-domains.md) if you want a human-readable SessionStart
71
+ table of contents.