sidegraph 0.9.0__tar.gz → 0.10.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 (449) hide show
  1. {sidegraph-0.9.0 → sidegraph-0.10.0}/.agents/plugins/marketplace.json +1 -1
  2. {sidegraph-0.9.0 → sidegraph-0.10.0}/.claude-plugin/marketplace.json +1 -1
  3. {sidegraph-0.9.0 → sidegraph-0.10.0}/CHANGELOG.md +104 -0
  4. {sidegraph-0.9.0 → sidegraph-0.10.0}/CLAUDE.md +1 -1
  5. {sidegraph-0.9.0 → sidegraph-0.10.0}/PKG-INFO +22 -9
  6. {sidegraph-0.9.0 → sidegraph-0.10.0}/README.md +21 -8
  7. {sidegraph-0.9.0 → sidegraph-0.10.0}/SECURITY.md +15 -4
  8. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/concepts/mind-model.md +1 -1
  9. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/concepts/retrieval.md +50 -11
  10. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/getting-started/claude-code-setup.md +17 -4
  11. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/getting-started/codex-setup.md +7 -4
  12. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/getting-started/installation.md +9 -2
  13. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/getting-started/quickstart.md +20 -3
  14. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/guides/capturing-decisions.md +9 -7
  15. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/guides/retrieval-in-sessions.md +67 -16
  16. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/guides/semantic-docs.md +2 -2
  17. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/guides/team-workflow.md +11 -4
  18. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/guides/troubleshooting.md +3 -2
  19. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/integrations/claude-code.md +36 -18
  20. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/integrations/codex.md +41 -15
  21. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/llms.txt +1 -1
  22. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/reference/cli.md +55 -36
  23. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/reference/configuration.md +2 -2
  24. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/reference/hooks.md +52 -10
  25. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/reference/mcp-tools.md +207 -26
  26. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/reference/operations.md +12 -4
  27. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/reference/releasing.md +1 -1
  28. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/reference/stability.md +1 -1
  29. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
  30. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
  31. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/check-plan/SKILL.md +7 -3
  32. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/explain-why/SKILL.md +8 -6
  33. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +6 -5
  34. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +10 -2
  35. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +6 -2
  36. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/setup/SKILL.md +21 -6
  37. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +3 -3
  38. {sidegraph-0.9.0 → sidegraph-0.10.0}/pyproject.toml +1 -1
  39. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/__init__.py +1 -1
  40. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/apply.py +9 -5
  41. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/cli.py +31 -10
  42. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/doc_import.py +230 -50
  43. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/importer.py +52 -3
  44. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/retrieval.py +19 -6
  45. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/server.py +677 -57
  46. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/store.py +31 -0
  47. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bootstrap_apply.py +44 -0
  48. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doc_import.py +67 -0
  49. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_docs_claims.py +35 -9
  50. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_flow_profile.py +8 -1
  51. sidegraph-0.10.0/tests/test_import_dry_run_preview.py +619 -0
  52. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_importer.py +1 -0
  53. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_ratify_policy.py +14 -5
  54. sidegraph-0.10.0/tests/test_server_annotations.py +86 -0
  55. sidegraph-0.10.0/tests/test_server_argument_names.py +275 -0
  56. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_borrowed_graph.py +98 -0
  57. sidegraph-0.10.0/tests/test_server_decision_listing.py +773 -0
  58. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_mcp_smoke.py +10 -2
  59. sidegraph-0.10.0/tests/test_server_record_types.py +177 -0
  60. sidegraph-0.10.0/tests/test_store_record_types.py +77 -0
  61. {sidegraph-0.9.0 → sidegraph-0.10.0}/uv.lock +1 -1
  62. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/CODEOWNERS +0 -0
  63. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  64. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  65. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  66. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  67. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/secret_scanning.yml +0 -0
  68. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/workflows/ci.yml +0 -0
  69. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/workflows/publish.yml +0 -0
  70. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/workflows/scorecard.yml +0 -0
  71. {sidegraph-0.9.0 → sidegraph-0.10.0}/.github/workflows/session-link-gate.yml +0 -0
  72. {sidegraph-0.9.0 → sidegraph-0.10.0}/.gitignore +0 -0
  73. {sidegraph-0.9.0 → sidegraph-0.10.0}/.gitleaks.toml +0 -0
  74. {sidegraph-0.9.0 → sidegraph-0.10.0}/.pre-commit-config.yaml +0 -0
  75. {sidegraph-0.9.0 → sidegraph-0.10.0}/.python-version +0 -0
  76. {sidegraph-0.9.0 → sidegraph-0.10.0}/AGENTS.md +0 -0
  77. {sidegraph-0.9.0 → sidegraph-0.10.0}/CODE_OF_CONDUCT.md +0 -0
  78. {sidegraph-0.9.0 → sidegraph-0.10.0}/CONTRIBUTING.md +0 -0
  79. {sidegraph-0.9.0 → sidegraph-0.10.0}/LICENSE +0 -0
  80. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/README.md +0 -0
  81. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/concepts/anchoring.md +0 -0
  82. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/concepts/data-model.md +0 -0
  83. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/concepts/decision-memory.md +0 -0
  84. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/getting-started/bootstrap.md +0 -0
  85. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/guides/ci-cd-maintenance.md +0 -0
  86. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/guides/naming-your-domains.md +0 -0
  87. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/guides/surviving-refactors.md +0 -0
  88. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/guides/verifying-your-setup.md +0 -0
  89. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/integrations/graphify.md +0 -0
  90. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/pilot-kit/README.md +0 -0
  91. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/pilot-kit/corpus_fit.py +0 -0
  92. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/pilot-kit/judge-prompt.md +0 -0
  93. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/pilot-kit/questions-prompt.md +0 -0
  94. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/pilot-kit/rubric-template.md +0 -0
  95. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/reference/git-bindings.md +0 -0
  96. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/reference/store-format.md +0 -0
  97. {sidegraph-0.9.0 → sidegraph-0.10.0}/docs/whitepaper/index.md +0 -0
  98. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/.mcp.json +0 -0
  99. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/codex/hooks.json +0 -0
  100. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/codex/mcp.json +0 -0
  101. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/hooks/hooks.json +0 -0
  102. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
  103. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
  104. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
  105. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
  106. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
  107. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
  108. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
  109. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
  110. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
  111. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
  112. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
  113. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
  114. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
  115. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
  116. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
  117. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/stats/agents/openai.yaml +0 -0
  118. {sidegraph-0.9.0 → sidegraph-0.10.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
  119. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/anchoring.py +0 -0
  120. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bash_paths.py +0 -0
  121. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/__init__.py +0 -0
  122. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/catalog.py +0 -0
  123. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/cli.py +0 -0
  124. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/integrations.py +0 -0
  125. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/model.py +0 -0
  126. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/planner.py +0 -0
  127. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/proof.py +0 -0
  128. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/review.py +0 -0
  129. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/bootstrap/scan.py +0 -0
  130. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/capture.py +0 -0
  131. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/config.py +0 -0
  132. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/doctor.py +0 -0
  133. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/domains.py +0 -0
  134. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/engine/__init__.py +0 -0
  135. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/engine/reader.py +0 -0
  136. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/freshness.py +0 -0
  137. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/gitenv.py +0 -0
  138. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/githooks.py +0 -0
  139. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/gitio.py +0 -0
  140. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/host/__init__.py +0 -0
  141. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/host/claude_settings.py +0 -0
  142. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/host/hooks.py +0 -0
  143. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/host/launch.py +0 -0
  144. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/host/subagent.py +0 -0
  145. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/hot_index.py +0 -0
  146. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/integrity.py +0 -0
  147. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/nearest_anchored.py +0 -0
  148. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/okf.py +0 -0
  149. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/profiles.py +0 -0
  150. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/schema.py +0 -0
  151. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/seed_ladder.py +0 -0
  152. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/stats/__init__.py +0 -0
  153. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/stats/model.py +0 -0
  154. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/stats/render.py +0 -0
  155. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/store_layout.py +0 -0
  156. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/sync.py +0 -0
  157. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/text_paths.py +0 -0
  158. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/verify.py +0 -0
  159. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/viz/__init__.py +0 -0
  160. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
  161. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/viz/model.py +0 -0
  162. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/viz/render.py +0 -0
  163. {sidegraph-0.9.0 → sidegraph-0.10.0}/src/sidegraph/viz/template.html +0 -0
  164. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/__init__.py +0 -0
  165. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/conftest.py +0 -0
  166. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
  167. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bitfinex_slice.json +0 -0
  168. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
  169. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
  170. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
  171. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
  172. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
  173. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/graph.json +0 -0
  174. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
  175. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
  176. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
  177. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
  178. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
  179. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
  180. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
  181. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
  182. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
  183. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
  184. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
  185. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
  186. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
  187. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
  188. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
  189. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
  190. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
  191. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
  192. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
  193. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
  194. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
  195. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
  196. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
  197. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
  198. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/design.md +0 -0
  199. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
  200. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
  201. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
  202. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
  203. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
  204. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
  205. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
  206. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
  207. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
  208. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
  209. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
  210. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
  211. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
  212. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
  213. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
  214. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/member_names_python_graph.json +0 -0
  215. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/member_names_swift_graph.json +0 -0
  216. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/fixtures/mini_graph.json +0 -0
  217. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/githooks_support.py +0 -0
  218. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_agent_brief_manifests.py +0 -0
  219. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_anchoring.py +0 -0
  220. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_anchoring_mapping_refresh.py +0 -0
  221. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bash_paths.py +0 -0
  222. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bootstrap_catalog.py +0 -0
  223. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bootstrap_cli.py +0 -0
  224. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bootstrap_integrations.py +0 -0
  225. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bootstrap_model.py +0 -0
  226. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bootstrap_planner.py +0 -0
  227. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bootstrap_proof.py +0 -0
  228. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bootstrap_review.py +0 -0
  229. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_bootstrap_scan.py +0 -0
  230. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_capture_auto_accept.py +0 -0
  231. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_capture_facts.py +0 -0
  232. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_capture_initiative.py +0 -0
  233. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_capture_integration.py +0 -0
  234. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_capture_neighbors.py +0 -0
  235. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_capture_propose.py +0 -0
  236. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_capture_redact.py +0 -0
  237. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_compact.py +0 -0
  238. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_doctor.py +0 -0
  239. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_domains.py +0 -0
  240. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_graph_paths.py +0 -0
  241. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_import.py +0 -0
  242. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_init.py +0 -0
  243. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_init_hooks.py +0 -0
  244. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_okf.py +0 -0
  245. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_ratify.py +0 -0
  246. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_ratify_facts.py +0 -0
  247. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_stats.py +0 -0
  248. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_sync.py +0 -0
  249. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_sync_check.py +0 -0
  250. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_unreadable_paths.py +0 -0
  251. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_cli_viz.py +0 -0
  252. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_codex_plugin.py +0 -0
  253. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_community_baseline.py +0 -0
  254. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_config.py +0 -0
  255. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_config_ancestor_lookup.py +0 -0
  256. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_config_borrowed_graph.py +0 -0
  257. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_corpus_expected_renders.py +0 -0
  258. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_corpus_self_corpus.py +0 -0
  259. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_coverage_telemetry_e2e.py +0 -0
  260. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_digest_integrity.py +0 -0
  261. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doc_corpus_integration.py +0 -0
  262. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor.py +0 -0
  263. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_auto_share.py +0 -0
  264. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_code_drift.py +0 -0
  265. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_dangling_supports.py +0 -0
  266. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_duplicate_entity.py +0 -0
  267. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
  268. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_graph_stale.py +0 -0
  269. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_integrity.py +0 -0
  270. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_never_surfaced.py +0 -0
  271. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_scan.py +0 -0
  272. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_stale_instructions.py +0 -0
  273. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_doctor_unratified_accept.py +0 -0
  274. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_domains.py +0 -0
  275. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_entity_duplicate_resolution.py +0 -0
  276. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_entity_get_or_create_race.py +0 -0
  277. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_env_isolation.py +0 -0
  278. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_fact_reachability_gate.py +0 -0
  279. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_git_bindings_blame.py +0 -0
  280. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_git_bindings_hook.py +0 -0
  281. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_git_bindings_provenance.py +0 -0
  282. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_git_config_isolation.py +0 -0
  283. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_git_env.py +0 -0
  284. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_githooks.py +0 -0
  285. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_graph_freshness.py +0 -0
  286. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_hook_spawn_guard.py +0 -0
  287. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_agent_brief.py +0 -0
  288. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_agent_state.py +0 -0
  289. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_borrowed_graph.py +0 -0
  290. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_claude_settings.py +0 -0
  291. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_drift_nudge.py +0 -0
  292. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_integrity.py +0 -0
  293. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_launch.py +0 -0
  294. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_pretool.py +0 -0
  295. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_pretool_records.py +0 -0
  296. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_session_key.py +0 -0
  297. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_session_start.py +0 -0
  298. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_session_start_concurrent.py +0 -0
  299. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_stop.py +0 -0
  300. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_subagent_start.py +0 -0
  301. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_subdirectory_launch.py +0 -0
  302. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_touch_events.py +0 -0
  303. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_host_wiring_checks.py +0 -0
  304. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_hot_index.py +0 -0
  305. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_hot_index_hook.py +0 -0
  306. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_hot_path_imports.py +0 -0
  307. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_integrity.py +0 -0
  308. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_integrity_refresh_hook.py +0 -0
  309. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_integrity_replay.py +0 -0
  310. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_integrity_stranded.py +0 -0
  311. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_lazy_root.py +0 -0
  312. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_member_anchor_wiring.py +0 -0
  313. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_mind_model_additive_fields.py +0 -0
  314. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_nearest_anchored.py +0 -0
  315. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_okf.py +0 -0
  316. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_openspec_profile.py +0 -0
  317. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_pathless_descriptor_adoption.py +0 -0
  318. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
  319. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_proposal_lifecycle.py +0 -0
  320. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_public_hook_launch.py +0 -0
  321. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_ratify_listing_gone_dark.py +0 -0
  322. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_community_labels.py +0 -0
  323. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_doc_nodes.py +0 -0
  324. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_graph.py +0 -0
  325. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_integration.py +0 -0
  326. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_member_name_lookup.py +0 -0
  327. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_member_names.py +0 -0
  328. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_nodes_in_file.py +0 -0
  329. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_perf.py +0 -0
  330. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_rationale.py +0 -0
  331. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_read.py +0 -0
  332. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_resolve.py +0 -0
  333. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_subdir_mismatch.py +0 -0
  334. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_reader_version.py +0 -0
  335. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_redaction_seeded.py +0 -0
  336. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_repoint_integration.py +0 -0
  337. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_budget_counters.py +0 -0
  338. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_context.py +0 -0
  339. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_drift_marker.py +0 -0
  340. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_drilldown.py +0 -0
  341. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_facts.py +0 -0
  342. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_guessed.py +0 -0
  343. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_ids.py +0 -0
  344. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_integration.py +0 -0
  345. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_rank.py +0 -0
  346. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_seeds.py +0 -0
  347. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_shown_ids.py +0 -0
  348. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_terminal_evidence.py +0 -0
  349. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_thin_tools.py +0 -0
  350. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_toc.py +0 -0
  351. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_toptier.py +0 -0
  352. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_retrieval_unratified.py +0 -0
  353. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sandbox_hygiene.py +0 -0
  354. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_schema_descriptor.py +0 -0
  355. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_schema_domain.py +0 -0
  356. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_schema_fact.py +0 -0
  357. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_seed_ladder.py +0 -0
  358. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_add_anchors.py +0 -0
  359. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_anchoring.py +0 -0
  360. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_capture.py +0 -0
  361. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_commit_hint.py +0 -0
  362. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_coverage_events.py +0 -0
  363. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_domains.py +0 -0
  364. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_drilldown.py +0 -0
  365. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_facts.py +0 -0
  366. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_find_entity.py +0 -0
  367. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_get_store.py +0 -0
  368. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_get_task_context.py +0 -0
  369. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_graph_freshness.py +0 -0
  370. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_graph_path.py +0 -0
  371. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_import.py +0 -0
  372. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_nearest_anchored.py +0 -0
  373. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_prewrite_anchor_validation.py +0 -0
  374. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_ratify_facts.py +0 -0
  375. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_redaction.py +0 -0
  376. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_refresh.py +0 -0
  377. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_render_events.py +0 -0
  378. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_supersede.py +0 -0
  379. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_sync_anchors.py +0 -0
  380. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_telemetry.py +0 -0
  381. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_thin_tools.py +0 -0
  382. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_tolerant_seeds.py +0 -0
  383. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_server_verify.py +0 -0
  384. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_stats_graph.py +0 -0
  385. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_stats_health.py +0 -0
  386. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_stats_model.py +0 -0
  387. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_stats_render.py +0 -0
  388. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_stats_skill.py +0 -0
  389. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_stats_snapshot.py +0 -0
  390. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_stop_hot_path.py +0 -0
  391. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_stop_rearm.py +0 -0
  392. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store.py +0 -0
  393. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_agent_state.py +0 -0
  394. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
  395. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_bad_file.py +0 -0
  396. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_binding_index.py +0 -0
  397. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_canonical_stat.py +0 -0
  398. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_compact.py +0 -0
  399. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_compact_review.py +0 -0
  400. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_concurrent_open.py +0 -0
  401. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_coverage_telemetry.py +0 -0
  402. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_derived_community.py +0 -0
  403. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_domains.py +0 -0
  404. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_entities.py +0 -0
  405. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_fact_cascade.py +0 -0
  406. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_facts.py +0 -0
  407. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_git_root_symlink.py +0 -0
  408. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_meta.py +0 -0
  409. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_migration.py +0 -0
  410. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_mutation_guard.py +0 -0
  411. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_mutation_immediate.py +0 -0
  412. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
  413. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_persistence.py +0 -0
  414. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_ratification.py +0 -0
  415. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_rebuild_atomicity.py +0 -0
  416. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_record_identity.py +0 -0
  417. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_render_events.py +0 -0
  418. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_retrieval.py +0 -0
  419. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_slug_conflicts.py +0 -0
  420. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_stamping_marker.py +0 -0
  421. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_symlinks.py +0 -0
  422. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_telemetry.py +0 -0
  423. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_threading.py +0 -0
  424. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_tmp_sweep_age.py +0 -0
  425. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_store_update_meta_if.py +0 -0
  426. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_subagent_start_manifests.py +0 -0
  427. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_canonical_writes.py +0 -0
  428. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_clean.py +0 -0
  429. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_domains.py +0 -0
  430. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_drift_cache.py +0 -0
  431. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_fresh_clone.py +0 -0
  432. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_integration.py +0 -0
  433. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_moved_adoption.py +0 -0
  434. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_rebind.py +0 -0
  435. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_repoint.py +0 -0
  436. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_report_has_findings.py +0 -0
  437. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_run.py +0 -0
  438. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_toc_cache.py +0 -0
  439. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_volatile_heal.py +0 -0
  440. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_sync_wiring.py +0 -0
  441. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_telemetry_retention.py +0 -0
  442. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_text_paths.py +0 -0
  443. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_verify_snapshot.py +0 -0
  444. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_verify_transitions.py +0 -0
  445. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_viz_asset_packaged.py +0 -0
  446. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_viz_model.py +0 -0
  447. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_viz_render_html.py +0 -0
  448. {sidegraph-0.9.0 → sidegraph-0.10.0}/tests/test_viz_render_json.py +0 -0
  449. {sidegraph-0.9.0 → sidegraph-0.10.0}/tools/check_no_session_links.py +0 -0
@@ -8,7 +8,7 @@
8
8
  "source": "local",
9
9
  "path": "./plugin/sidegraph"
10
10
  },
11
- "description": "Durable decision/lessons memory over your code graph — captured in-session, human-ratified, retrieved mistakes-first, surviving refactors."
11
+ "description": "Durable decision/lessons memory over your code graph — captured in-session, ratified before it is trusted, retrieved mistakes-first, surviving refactors."
12
12
  }
13
13
  ]
14
14
  }
@@ -6,7 +6,7 @@
6
6
  {
7
7
  "name": "sidegraph",
8
8
  "source": "./plugin/sidegraph",
9
- "description": "Durable decision/lessons memory over your code graph — captured in-session, human-ratified, retrieved mistakes-first, surviving refactors.",
9
+ "description": "Durable decision/lessons memory over your code graph — captured in-session, ratified before it is trusted, retrieved mistakes-first, surviving refactors.",
10
10
  "homepage": "https://github.com/SantyagoSeaman/sidegraph"
11
11
  }
12
12
  ]
@@ -7,6 +7,110 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.10.0] — 2026-10-04
11
+
12
+ ### Added
13
+
14
+ - **Every MCP tool now carries annotations, so a host's auto-reviewer stops rejecting memory
15
+ reads.** In the field, Codex's auto-reviewer rejected 20 `get_task_context` calls, and each
16
+ one lost memory for that step: an unannotated tool takes the MCP defaults (destructive,
17
+ open-world), and the review's verdict then depends on the prompt. The seven tools that never
18
+ change a tracked file are read-only; the other 17 are non-destructive, closed-world local
19
+ writes. No tool sends anything off the machine and none deletes a record. A test runs the
20
+ read-only tools on a store where a lazy sync would adopt a moved symbol, and fails if one of
21
+ them changes a tracked file, so the annotation cannot drift from what the tool does. See the
22
+ [reference](docs/reference/mcp-tools.md#annotations) and the
23
+ [Codex page](docs/integrations/codex.md#the-auto-reviewer-and-memory-reads).
24
+ - **The seed tools accept the argument names agents try, and every tool names its parameters in
25
+ an error.** `get_task_context`, `query_structure` and `query_decisions` accept `paths` (as
26
+ `files`) and `seeds`; each seed goes to `files` when it looks like a path and to `entities`
27
+ otherwise. `task` is refused with a line saying there is no free-text query. Any other
28
+ unknown argument, on any tool, is an error that names it and lists the tool's real parameters;
29
+ FastMCP's own error named the argument but not the parameters.
30
+
31
+ ### Changed
32
+
33
+ - **`retrieve_decisions` no longer returns the whole store.** One call returned a full dump of
34
+ every visible decision: about 143,000 tokens on a store of 260 records, more than a host would
35
+ show, and in a field report most agents passed `include_superseded: true` and then either
36
+ printed the dump or filtered it by hand. The call now has two answers.
37
+ - With no narrowing filter it returns an **overview**: the total, counts by status and kind
38
+ (superseded and rejected records included, so the counts say that history exists), and the
39
+ newest records as compact rows (`id`, `kind`, `status`, `title`, `valid_from`).
40
+ - With a narrowing filter it returns **full records**, gotchas and lessons first and newest
41
+ first, cut at `limit` (default 25, at most 100) or `budget_chars` (default 24,000, at most
42
+ 60,000), whichever comes first. A `hint` says what cut the list, or why it is empty.
43
+ - The filters are new arguments, and they combine with AND: `status` and `kind` (a string or a
44
+ list), `files`, `query` (every word must occur in the record's text) and `ids` (exact record
45
+ ids, superseded ones too). `include_superseded` keeps its meaning: it widens the overview's
46
+ `newest` and a filtered call that has no `status`.
47
+ - `files` are read the way `get_task_context` reads them: a basename, a suffix, a directory or
48
+ a letter-case slip works. `unresolved_files` lists, for each path nothing could read (at most
49
+ ten, with `unresolved_omitted` counting the rest), why (`ambiguous`, `directory-too-large`,
50
+ `not-in-graph` or `no-graph`) and the candidates to pass instead.
51
+ - **The return type changed from a list to a JSON object, sent once as a single text block
52
+ with no structured copy**, so `budget_chars` is the real cost on every host. A client that
53
+ read the list now reads `decisions` of a filtered answer. The proposal policy is unchanged
54
+ and applies to every shape.
55
+ - The `check-plan`, `explain-why`, `triage-drift` and `heal-anchors` skills now call it with a
56
+ filter, and a test fails if a skill calls it without one. See the
57
+ [reference](docs/reference/mcp-tools.md#retrieve_decisions).
58
+
59
+ ### Fixed
60
+
61
+ - **A fault converting a reviewed item in `sidegraph-bootstrap` now prints the RESUME line.** The
62
+ conversion of each reviewed item, and the check that its ref still matches the candidate,
63
+ ran outside the per-item error handling. A fault there, after an earlier item had been
64
+ written, left `apply_review` without a report: an `AssertionError` ended the run as a
65
+ traceback, a `ValueError` was reported as a failure before anything was written, and neither
66
+ printed `RESUME`, though canonical files were already on disk. The fault now takes the path a
67
+ write error takes: the run stops, reports `partial-recoverable` with the durable candidates and
68
+ the failing ref, and prints the resume command. A fault on the first item, before anything is
69
+ written, now exits 2 with `STORE incomplete`, the failing ref and the resume command, where a
70
+ `ValueError` used to exit 1 with an `ERROR` line; the terminal shows the failing ref and not the
71
+ reason.
72
+ - **`sidegraph-import --dry-run` now says what auto-ratification would do.** Both import paths
73
+ decided auto-ratification only after a real write, so under a non-`manual`
74
+ `SIDEGRAPH_RATIFY_POLICY` a dry run could not show which records a real run would land
75
+ accepted without a human: on one fixture it reported 0 where the real run auto-ratified 2. The
76
+ dry run now runs the same eligibility gate on the record the write would produce and reports
77
+ the result in a new `would_auto_ratify` field on `ImportReport` and `DocImportReport`, and as
78
+ `auto_ratify_eligible` on each dry-run item. `auto_ratified` keeps its meaning, transitions
79
+ that actually happened, so it stays 0 in a dry run.
80
+ - **Behaviour change:** under a non-`manual` policy the summary line gains `would
81
+ auto-ratify M` before `(skipped:` and an eligible item line ends with ` [auto]`. Under
82
+ `manual` both are unchanged. A dry run still never carries the real run's `auto-ratified K`.
83
+ - The count is eligibility, not a guarantee: a real run's transition can still fail, for
84
+ example on a race or a refused cascade.
85
+ - A key repeated within one run no longer counts twice in the dry run. Two rationales with the
86
+ same title in one file count once. A document ref met more than once (one file named twice, a
87
+ directory plus a file inside it, or a live and an archived copy that a profile maps to one
88
+ ref) is classified against the records the earlier copies would have left there, as the real
89
+ run sees them: an identical repeat is skipped, a differing one supersedes, and a copy after a
90
+ `rejected` first copy is a fresh write. Two rare shapes can still differ in the
91
+ `superseded`/`skipped` split, not in the eligibility count where checked: a ref met three
92
+ times with the first content returning, under an auto policy, and a repeat with no anchor of
93
+ its own.
94
+ - **`find_entity` no longer calls a dangling record a decision.** Each binding was labelled
95
+ `fact` if a fact lookup found it and `decision` otherwise, so a binding whose record exists in
96
+ neither table (a record file removed by hand, or lost in a merge) came back as a decision that
97
+ `get_decision` could not fetch, and each binding cost a query of its own. The types of all of an
98
+ entity's bindings now come from one read of the index, and a binding with no record reports
99
+ `record_type: "unknown"`. The value is additive: a client that handles `decision` and `fact`
100
+ is unaffected. `get_entity_history` uses the same read and still skips such a binding. See the
101
+ [reference](docs/reference/mcp-tools.md#find_entity).
102
+ - **A document status like `should not be rejected` no longer lands `rejected`.** The check for
103
+ a turned-down status saw a negation only as `not` and one space directly before the word, so
104
+ `should not be rejected`, `not rejected` (two spaces), `never rejected` and `isn't rejected`
105
+ all read as rejections, and a false `rejected` lands closed and invisible to retrieval. A
106
+ negation is now `not`, `never` or a word ending `n't` within the three words before the word in
107
+ the same clause. A clause ends at `,` `;` `.` `:`, a pipe, a slash, an em or en dash, or a spaced
108
+ hyphen or `->`, so `not reviewed, rejected`, `Not accepted — rejected` and `Won't do / rejected`
109
+ still read as rejections, as does `not rejected, rejected`. A conjunction does not end a
110
+ clause: `Not adopted and rejected` reads as negated, and lands accepted unless `--propose` or
111
+ a draft marker sends it to the ratification queue. See the
112
+ [reference](docs/reference/cli.md#sidegraph-import).
113
+
10
114
  ## [0.9.0] — 2026-10-04
11
115
 
12
116
  ### 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.9.0) — the full loop (capture, ratification, mistakes-first
16
+ Sidegraph is pre-1.0 (v0.10.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.9.0
3
+ Version: 0.10.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
@@ -82,7 +82,9 @@ only ever reads `graph.json`, so the plain install above is all it needs.
82
82
 
83
83
  ```bash
84
84
  # 3. Install the CLIs + MCP server, then bootstrap the store in your repo
85
- # (creates .sidegraph/, prints setup instructions)
85
+ # (creates .sidegraph/, prints setup instructions). In a terminal it also asks
86
+ # whether to install a git hook that rebuilds the code graph after each commit,
87
+ # merge and branch switch; `sidegraph-init --remove-hooks` takes it out again
86
88
  uv tool install sidegraph # from PyPI — puts sidegraph-init / sidegraph-mcp / … on PATH
87
89
  sidegraph-init
88
90
 
@@ -172,6 +174,10 @@ projects the full store, history included, into an OKF v0.1 bundle any OKF consu
172
174
  Read / Edit / Bash read ──▶ the file's records delivered in the call (once per file per agent)
173
175
  ```
174
176
 
177
+ Subagents get the memory too: on Claude Code a hook appends the decisions for the files a
178
+ subagent's brief names to that brief, and on Claude Code and Codex another hook tells each new
179
+ subagent that decision memory exists and how to ask it.
180
+
175
181
  Two layers age differently: the **structure** layer (the code graph — entities,
176
182
  dependencies, communities: *the what*) and the **decision** layer on top (*the why*). The
177
183
  graph is disposable — the engine regenerates it from source at any moment. The memory must
@@ -215,7 +221,7 @@ dropping a decision carries its still-pending facts along in the same verdict. D
215
221
  | `add_decision` / `supersede_decision` | Append / reverse a decision (nothing is ever deleted) |
216
222
  | `add_fact` / `supersede_fact` | Append / falsify a non-derivable fact — evidence for a decision, or standalone |
217
223
  | `find_entity` / `get_entity_history` | Which decisions *and facts* touch this entity, and how they evolved |
218
- | `retrieve_decisions` / `list_facts` | List current decisions / current facts |
224
+ | `retrieve_decisions` / `list_facts` | Filter decisions (bounded) / list current facts |
219
225
  | `propose_decisions` / `propose_domains` / `add_domain` | Draft a decision (plus attached or standalone facts) or name a domain, from a session or by hand |
220
226
  | `supersede_domain` | Lineage-correct rename/re-scope of a domain: closes the old, writes a `proposed` successor |
221
227
  | `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) |
@@ -247,16 +253,22 @@ retrieval a richer graph to anchor against. Walkthrough:
247
253
 
248
254
  - **Everything is local.** Sidegraph reads your repo and the engine's `graph.json`
249
255
  (strictly read-only) and writes small human-readable JSON records inside your repo,
250
- plus a local, gitignored index it can always rebuild. **Nothing leaves your machine** —
256
+ plus a local, gitignored index it can always rebuild. Two things sit outside the store:
257
+ the git hooks that `sidegraph-init` can install to keep the graph fresh (a helper and
258
+ three hooks under `.git/hooks/`) and one cache file, `sidegraph/launch-commit`, under
259
+ `${XDG_CACHE_HOME:-~/.cache}`. [SECURITY.md](SECURITY.md) lists every write.
260
+ **Nothing leaves your machine** —
251
261
  no network calls, no remote telemetry, no account. Sidegraph does keep local usage
252
262
  diagnostics in that gitignored index (which stored memory was shown, and which files a
253
263
  session touched afterwards) so you can see which memory was shown and which files
254
264
  those sessions then touched; they never travel, and `SIDEGRAPH_TELEMETRY=off` disables them.
255
265
  - **Secrets don't enter memory.** Proposed decisions and facts pass redaction before they
256
- are stored. A ratification gate controls what the agent's drafts can persist: human for
257
- `adr`/`constraint` decisions and domains always, and, if you answer yes to `sidegraph-init`'s
258
- question (or set `SIDEGRAPH_RATIFY_POLICY` yourself), an auto-ratification stamp for lessons,
259
- gotchas, and standalone facts instead of a person's review.
266
+ are stored. A ratification gate controls which of the agent's drafts become trusted
267
+ memory. Under the default `manual` policy a person ratifies them. A proposal is stored first
268
+ and waits as `proposed` until then. If you answer yes to `sidegraph-init`'s
269
+ question (or set `SIDEGRAPH_RATIFY_POLICY` yourself), eligible records ratify themselves
270
+ at write time with a stamp that says so: lessons, gotchas, and standalone facts under
271
+ `auto-low-risk`, and also ADRs, constraints, and domains under `auto-all`.
260
272
  - **Nothing is silently rewritten.** The store is append-only; every change of mind is
261
273
  recorded as a supersession with its reason.
262
274
 
@@ -269,7 +281,8 @@ The engine is optional at runtime: without a graph, records anchor to file paths
269
281
  domains and retrieval still works, but symbol-level anchors, communities, and moved-code
270
282
  resolution need it (see the [operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)).
271
283
  Everything the engine produces is derived and regenerated on every rebuild; everything
272
- Sidegraph stores is deliberate, ratified, and permanent. **Own the memory, rent the graph.**
284
+ Sidegraph stores is deliberate and permanent, and it is trusted only once ratified (by a
285
+ person, or by the opt-in policy). **Own the memory, rent the graph.**
273
286
 
274
287
  ## Status
275
288
 
@@ -52,7 +52,9 @@ only ever reads `graph.json`, so the plain install above is all it needs.
52
52
 
53
53
  ```bash
54
54
  # 3. Install the CLIs + MCP server, then bootstrap the store in your repo
55
- # (creates .sidegraph/, prints setup instructions)
55
+ # (creates .sidegraph/, prints setup instructions). In a terminal it also asks
56
+ # whether to install a git hook that rebuilds the code graph after each commit,
57
+ # merge and branch switch; `sidegraph-init --remove-hooks` takes it out again
56
58
  uv tool install sidegraph # from PyPI — puts sidegraph-init / sidegraph-mcp / … on PATH
57
59
  sidegraph-init
58
60
 
@@ -142,6 +144,10 @@ projects the full store, history included, into an OKF v0.1 bundle any OKF consu
142
144
  Read / Edit / Bash read ──▶ the file's records delivered in the call (once per file per agent)
143
145
  ```
144
146
 
147
+ Subagents get the memory too: on Claude Code a hook appends the decisions for the files a
148
+ subagent's brief names to that brief, and on Claude Code and Codex another hook tells each new
149
+ subagent that decision memory exists and how to ask it.
150
+
145
151
  Two layers age differently: the **structure** layer (the code graph — entities,
146
152
  dependencies, communities: *the what*) and the **decision** layer on top (*the why*). The
147
153
  graph is disposable — the engine regenerates it from source at any moment. The memory must
@@ -185,7 +191,7 @@ dropping a decision carries its still-pending facts along in the same verdict. D
185
191
  | `add_decision` / `supersede_decision` | Append / reverse a decision (nothing is ever deleted) |
186
192
  | `add_fact` / `supersede_fact` | Append / falsify a non-derivable fact — evidence for a decision, or standalone |
187
193
  | `find_entity` / `get_entity_history` | Which decisions *and facts* touch this entity, and how they evolved |
188
- | `retrieve_decisions` / `list_facts` | List current decisions / current facts |
194
+ | `retrieve_decisions` / `list_facts` | Filter decisions (bounded) / list current facts |
189
195
  | `propose_decisions` / `propose_domains` / `add_domain` | Draft a decision (plus attached or standalone facts) or name a domain, from a session or by hand |
190
196
  | `supersede_domain` | Lineage-correct rename/re-scope of a domain: closes the old, writes a `proposed` successor |
191
197
  | `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) |
@@ -217,16 +223,22 @@ retrieval a richer graph to anchor against. Walkthrough:
217
223
 
218
224
  - **Everything is local.** Sidegraph reads your repo and the engine's `graph.json`
219
225
  (strictly read-only) and writes small human-readable JSON records inside your repo,
220
- plus a local, gitignored index it can always rebuild. **Nothing leaves your machine** —
226
+ plus a local, gitignored index it can always rebuild. Two things sit outside the store:
227
+ the git hooks that `sidegraph-init` can install to keep the graph fresh (a helper and
228
+ three hooks under `.git/hooks/`) and one cache file, `sidegraph/launch-commit`, under
229
+ `${XDG_CACHE_HOME:-~/.cache}`. [SECURITY.md](SECURITY.md) lists every write.
230
+ **Nothing leaves your machine** —
221
231
  no network calls, no remote telemetry, no account. Sidegraph does keep local usage
222
232
  diagnostics in that gitignored index (which stored memory was shown, and which files a
223
233
  session touched afterwards) so you can see which memory was shown and which files
224
234
  those sessions then touched; they never travel, and `SIDEGRAPH_TELEMETRY=off` disables them.
225
235
  - **Secrets don't enter memory.** Proposed decisions and facts pass redaction before they
226
- are stored. A ratification gate controls what the agent's drafts can persist: human for
227
- `adr`/`constraint` decisions and domains always, and, if you answer yes to `sidegraph-init`'s
228
- question (or set `SIDEGRAPH_RATIFY_POLICY` yourself), an auto-ratification stamp for lessons,
229
- gotchas, and standalone facts instead of a person's review.
236
+ are stored. A ratification gate controls which of the agent's drafts become trusted
237
+ memory. Under the default `manual` policy a person ratifies them. A proposal is stored first
238
+ and waits as `proposed` until then. If you answer yes to `sidegraph-init`'s
239
+ question (or set `SIDEGRAPH_RATIFY_POLICY` yourself), eligible records ratify themselves
240
+ at write time with a stamp that says so: lessons, gotchas, and standalone facts under
241
+ `auto-low-risk`, and also ADRs, constraints, and domains under `auto-all`.
230
242
  - **Nothing is silently rewritten.** The store is append-only; every change of mind is
231
243
  recorded as a supersession with its reason.
232
244
 
@@ -239,7 +251,8 @@ The engine is optional at runtime: without a graph, records anchor to file paths
239
251
  domains and retrieval still works, but symbol-level anchors, communities, and moved-code
240
252
  resolution need it (see the [operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)).
241
253
  Everything the engine produces is derived and regenerated on every rebuild; everything
242
- Sidegraph stores is deliberate, ratified, and permanent. **Own the memory, rent the graph.**
254
+ Sidegraph stores is deliberate and permanent, and it is trusted only once ratified (by a
255
+ person, or by the opt-in policy). **Own the memory, rent the graph.**
243
256
 
244
257
  ## Status
245
258
 
@@ -25,10 +25,21 @@ Sidegraph is a local-only tool. Its entire data surface:
25
25
  the visualization, OKF export and bootstrap-report commands write to the output paths you
26
26
  give them; and the optional `sidegraph-prepare-commit-msg` git hook, once you install it,
27
27
  adds commented decision trailers to the commit message file git hands it
28
- (normally `.git/COMMIT_EDITMSG`). Beyond those, the only filesystem writes are the standard config
29
- snippets you install yourself (`.mcp.json`, hook entries) — Sidegraph touches nothing
30
- else. See [`docs/reference/store-format.md`](docs/reference/store-format.md) for the full
31
- layout.
28
+ (normally `.git/COMMIT_EDITMSG`). Three more writes sit outside the repository's own
29
+ files. `sidegraph-init --hooks` (or a yes to its refresh question) writes a helper script
30
+ and a marked block in three git hooks (`post-commit`, `post-merge`, `post-checkout`) under
31
+ `.git/hooks/`. When `core.hooksPath` is set, `sidegraph-init` writes only the helper (to
32
+ `.git/hooks/`) and prints the lines to add to your hooks by hand. While it runs, the helper
33
+ also keeps a lock, a flag file and a log in the git directory. `sidegraph-init --no-hooks`
34
+ writes the git config key `sidegraph.graphRefresh` to the repository's own config, and
35
+ `sidegraph-init --remove-hooks` takes the blocks, the helper and that key out again. The
36
+ SessionStart hook writes one 40-character commit id to
37
+ `${XDG_CACHE_HOME:-~/.cache}/sidegraph/launch-commit`, and only when the running package was
38
+ installed from the canonical `git+https://github.com/SantyagoSeaman/sidegraph.git@main`. That
39
+ covers the plugin and the manual `uvx --from …@main` recipe. A PyPI, tag, SHA or editable
40
+ install never writes it. Beyond those, the only filesystem writes are the standard config
41
+ snippets you install yourself (`.mcp.json`, hook entries). See
42
+ [`docs/reference/store-format.md`](docs/reference/store-format.md) for the full layout.
32
43
  - **Network:** none. No remote telemetry, no phone-home, nothing leaves your machine. Local
33
44
  retrieval telemetry is recorded in the gitignored `index.db` by default (which records
34
45
  were shown and which files were touched, never uploaded); set `SIDEGRAPH_TELEMETRY=off` to
@@ -105,7 +105,7 @@ write below — the three raw authoring paths underneath it are:
105
105
  asked to) names a domain directly, optionally nesting it under a `parent_slug`.
106
106
 
107
107
  All three land `status=proposed`. **Every path passes through the same ratification gate** —
108
- the unified `ratify` MCP tool (`ratify_decisions` is a deprecated alias, kept for one release)
108
+ the unified `ratify` MCP tool (`ratify_decisions` is a deprecated alias, still kept)
109
109
  and the `sidegraph-ratify` CLI, which list and accept/drop decisions *and* domains side by
110
110
  side. By default no path bypasses human review, including bootstrap: a fresh repo can
111
111
  propose dozens of domains from its community structure in one command, but nothing is named
@@ -15,7 +15,8 @@ whether the store has any accepted domains yet:
15
15
  - **`render_toc(cache)`** — the real, domain-named table of contents (activated the moment the
16
16
  first domain is ratified — no sync required, see [below](#when-the-toc-goes-live)): one line
17
17
  per accepted domain (title, one-line summary truncated to 100 characters, mistake count,
18
- subdomain count when non-zero), then initiatives, then global mistakes. This is what "the
18
+ subdomain count when non-zero), then initiatives, then global mistakes, then any proposed
19
+ global mistakes under `## Unratified proposals`. This is what "the
19
20
  mind model comes alive" means in practice. The per-domain mistake count is what
20
21
  [`drill_down`](#drill_downdomain_slug--the-axis-1-operation) would serve for that domain:
21
22
  the accepted `gotcha`/`lesson`/`constraint` decisions in the union of those tagged to the
@@ -25,8 +26,12 @@ whether the store has any accepted domains yet:
25
26
  (the ratify and capture paths) leaves out the document branch until the next sync pass that
26
27
  has one.
27
28
  - **`top_tier_map(store, reader)`** — the legacy, nameless fallback: top communities by member
28
- count (labeled only by god-node name), initiatives, global mistakes. Runs on demand (no
29
- cache) whenever the store has zero accepted domains — a fresh repo, or one that hasn't
29
+ count (labeled only by god-node name), initiatives, global mistakes, then up to 10 other
30
+ accepted decisions under `## Recorded decisions`, up to 10 accepted facts under
31
+ `## Known facts`, and the proposals inside the surfacing window under
32
+ `## Unratified proposals`. The last three are what keep a store that has recorded its first
33
+ decisions and named no domain yet from showing an agent only engine communities. Runs on
34
+ demand (no cache) whenever the store has zero accepted domains — a fresh repo, or one that hasn't
30
35
  bootstrapped/ratified any domains yet, sees exactly the same output as before this layer
31
36
  existed.
32
37
 
@@ -38,8 +43,14 @@ covers every search surface, not just `Read`/`Grep`: *"When you need to find or
38
43
  code in this project, call `get_task_context(files=[…])` with repo-relative paths before any
39
44
  grep or file search — decisions, gotchas and a domain map are indexed here. Before a
40
45
  non-trivial change, run the sidegraph check-plan skill if it is available. If the tool is
41
- listed only by name, load it first."* Both degrade gracefully — an empty
42
- store still gets the instruction plus just the header. The `SessionStart` hook itself never
46
+ listed only by name, load it first."* A `Sidegraph X.Y.Z` line follows it, so a session
47
+ that launched an old install says so in its own context. Both degrade gracefully — an empty
48
+ store still gets the instruction, the version line and the header. After the map the hook
49
+ appends the integrity checks' status lines (records awaiting ratification, code drift, a stale
50
+ or missing graph, uncommitted store files and the rest), and sends a notice to the person for
51
+ the problems that need one; the texts and the order are in the
52
+ [hooks reference](../reference/hooks.md#sidegraph-session-start) and
53
+ [troubleshooting](../guides/troubleshooting.md). The `SessionStart` hook itself never
43
54
  blocks startup: any failure, or a cache it can't parse, falls back to `top_tier_map` rather
44
55
  than crashing; any failure in *that* prints `{}` and exits 0.
45
56
 
@@ -105,7 +116,8 @@ path with a stray `./`, a wrong prefix or a bare file name, a directory, and a `
105
116
  with no file. Every rewrite is a guess and is named as one in the reply, the seeds that resolved
106
117
  as written come first, and a guess that could mean several things is listed and never read (see
107
118
  [`get_task_context`](../reference/mcp-tools.md#seeds-are-read-tolerantly)). The rule is still
108
- exact matching, never similarity.
119
+ exact matching, never similarity. `query_structure` and `query_decisions` have no such ladder:
120
+ they take a seed exactly as written, so a loosely spelled path finds nothing there.
109
121
 
110
122
  A seed reaches the store's entities two ways, and both count: a named seed that matches a
111
123
  stored anchor name is that entity directly (whatever the graph calls the node, so a stored
@@ -297,9 +309,9 @@ and the old truncation behavior is unchanged, byte-for-byte.
297
309
  `query_structure(seeds, budget_chars)` and `query_decisions(seeds, budget_chars)` are
298
310
  `get_task_context` split down the middle — the structural-map half and the decision-memory half
299
311
  (mistakes, decisions, facts, related), exposed as their own MCP tools for a cheap follow-up once the
300
- caller already has one half and just needs the other. Both reuse the exact same seed-resolution
301
- and ranking code as `get_task_context` — they're thinner call surfaces, not a different
302
- algorithm. `query_structure` needs a reader (no graph, no structural map — it says so rather
312
+ caller already has one half and just needs the other. Both reuse the same seed-resolution
313
+ and ranking code as `get_task_context`, but not its [tolerant seed reading](#seeds): they match
314
+ seeds exactly as written. They're thinner call surfaces, not a different algorithm. `query_structure` needs a reader (no graph, no structural map — it says so rather
303
315
  than crashing); `query_decisions` degrades like `get_task_context` always has: named-seed
304
316
  resolution needs a reader, but `scope: global` decisions still surface without one.
305
317
 
@@ -352,8 +364,35 @@ not a normalized repo-relative path to a file (check it). In a linked worktree t
352
364
  main checkout's graph, a file that exists only on the branch gets one sentence saying the graph
353
365
  does not hold it, and the rebuild advice for any other file names the main checkout. With no graph
354
366
  at all and at least one seed, a `## No code graph` block names the path looked at and says to build
355
- it (or, when the graph is there and cannot be read, that it is not readable). `render()` itself
356
- does not produce either block.
367
+ it (or, when the graph is there and cannot be read, that it is not readable). A file seed with
368
+ no current record of its own, and anchored files near it, gets a `## Nearest anchored` sentence
369
+ that names those files (under `## Why this is empty` when the answer is empty). When the answer
370
+ holds no decision memory at all, the records of the named files follow under
371
+ `## Nearest anchored records (not anchored to your files)`; see
372
+ [the nearest anchored records](../reference/mcp-tools.md#the-nearest-anchored-records).
373
+ `render()` itself produces none of these blocks.
374
+
375
+ ## Records that arrive without a query
376
+
377
+ An agent does not always call `get_task_context`, and a subagent starts without the session's
378
+ context. So the read path has three more channels, all wired as hooks and all reading the
379
+ store's index directly (see [hooks](../reference/hooks.md)):
380
+
381
+ - **At the point of reading.** When a `Read`, `Edit`, `Write` or `Grep` call, or a Bash `sed`,
382
+ `grep`, `rg` or `cat` line, names a file that decisions are anchored to, the `PreToolUse` hook
383
+ hands the agent the top decisions for that file in the same tool call, mistakes first. Each file
384
+ is delivered once per agent. `SIDEGRAPH_GREP_NUDGE=off` stops it.
385
+ - **In a subagent's brief.** On an `Agent` call, the hook reads the files the brief names, and
386
+ the files named in a plan or notes document it names, and appends the decisions anchored to them
387
+ to the brief. The subagent sees the block in its first message; the parent's transcript keeps
388
+ the prompt it wrote. `SIDEGRAPH_AGENT_BRIEF=off` stops it.
389
+ - **At the start of a subagent.** The `SubagentStart` hook tells the new subagent that decision
390
+ memory exists, how to ask it, and how many decisions, files and mistakes it holds. It carries no
391
+ records. `SIDEGRAPH_SUBAGENT_BRIEF=off` stops it.
392
+
393
+ The first two deliver decisions only: their index reader has no fact query, so facts reach an
394
+ agent through `get_task_context`. The first two are Claude Code only. `SubagentStart` runs on Claude Code and on Codex. The day to
395
+ day view is in [retrieval in sessions](../guides/retrieval-in-sessions.md#memory-without-asking).
357
396
 
358
397
  ## See also
359
398
 
@@ -207,8 +207,9 @@ The env vars are inlined into the command because Claude Code hook entries have
207
207
  ids, and a line naming `get_task_context` for the rest. Each file arrives once per agent, at
208
208
  most three files per call and ten per agent, and the session's own agent and every subagent it
209
209
  starts count separately; a file with no records prints nothing. Bash is wired as four entries
210
- (`if` is `Bash(sed *)`, `Bash(grep *)`, `Bash(rg *)`, `Bash(cat *)`) with the same command, and
211
- needs Claude Code 2.1.89 for correct matching. Set `SIDEGRAPH_GREP_NUDGE=off` (alongside the
210
+ (`if` is `Bash(sed *)`, `Bash(grep *)`, `Bash(rg *)`, `Bash(cat *)`) with the same command.
211
+ The `if` field exists from Claude Code 2.1.85, and matching on compound command lines is
212
+ correct from 2.1.89, so use 2.1.89 or later. Set `SIDEGRAPH_GREP_NUDGE=off` (alongside the
212
213
  other env vars in the command) to turn off all of it. See
213
214
  [`reference/hooks.md`](../reference/hooks.md#sidegraph-pre-tool-use).
214
215
  - The `Agent|Task` group runs that same command when the agent spawns a subagent. It appends the
@@ -238,5 +239,17 @@ start (a stub if the store is empty — that's expected). Then follow the
238
239
 
239
240
  ## Reset / cleanup
240
241
 
241
- Everything Sidegraph owns in the target repo is `.sidegraph/`; everything Graphify owns is
242
- `graphify-out/`. Delete both to start over — your source files are never touched.
242
+ The store is `.sidegraph/`; everything Graphify owns is `graphify-out/`. Delete both to
243
+ start over. Your source files are never touched. Sidegraph can also leave a few things
244
+ outside those two directories:
245
+
246
+ - If you installed the graph refresh hook (`sidegraph-init --hooks`, or a yes to its
247
+ question), run `sidegraph-init --remove-hooks` first. Deleting the directories does not
248
+ remove the helper and the three hook blocks in `.git/hooks/`.
249
+ - `sidegraph-init --no-hooks` records the git config key `sidegraph.graphRefresh`.
250
+ `--remove-hooks` clears it.
251
+ - `sidegraph-init` may have written `SIDEGRAPH_RATIFY_POLICY` into `.claude/settings.json`.
252
+ - The SessionStart hook keeps `${XDG_CACHE_HOME:-~/.cache}/sidegraph/launch-commit`, one
253
+ file shared by every project on the machine.
254
+
255
+ [SECURITY.md](../../SECURITY.md) lists every write.
@@ -15,15 +15,18 @@ and AGENTS.md registered separately, for fine control or a source checkout).
15
15
 
16
16
  ## Option A: plugin (recommended)
17
17
 
18
- Inside a Codex CLI session, in that repo:
18
+ From a terminal, in that repo:
19
19
 
20
20
  The commands below follow the current development branch. For durable environments, see
21
21
  [how to pin mutable development references](installation.md#mutable-development-references).
22
22
 
23
+ ```bash
24
+ codex plugin marketplace add SantyagoSeaman/sidegraph
25
+ codex plugin add sidegraph@sidegraph
23
26
  ```
24
- /plugin marketplace add SantyagoSeaman/sidegraph
25
- /plugin install sidegraph@sidegraph
26
- ```
27
+
28
+ These are shell commands, not slash commands typed inside a Codex session. The marketplace
29
+ source takes `owner/repo[@ref]`, a local path or a Git URL.
27
30
 
28
31
  Installs the MCP server, the `SessionStart`/`Stop`/`SubagentStart` hooks, and all 12 skills in one step,
29
32
  pointed at `SIDEGRAPH_DIR=.sidegraph`/`SIDEGRAPH_GRAPH=graphify-out/graph.json` by default.
@@ -38,13 +38,20 @@ name, so `--from sidegraph` is required (a bare `uvx sidegraph-mcp` will not res
38
38
 
39
39
  ### Option B — host plugin (recommended for Claude Code and Codex)
40
40
 
41
- Inside an interactive host session, in the repo you want memory over:
41
+ In the repo you want memory over. In Claude Code, inside an interactive session:
42
42
 
43
43
  ```
44
44
  /plugin marketplace add SantyagoSeaman/sidegraph
45
45
  /plugin install sidegraph@sidegraph
46
46
  ```
47
47
 
48
+ In Codex, from a terminal:
49
+
50
+ ```bash
51
+ codex plugin marketplace add SantyagoSeaman/sidegraph
52
+ codex plugin add sidegraph@sidegraph
53
+ ```
54
+
48
55
  The Claude Code host installs the MCP server and all four hooks (`SessionStart`, `Stop`,
49
56
  `PreToolUse`, `SubagentStart`). Codex installs the MCP server, `SessionStart`/`Stop`/
50
57
  `SubagentStart`, and the bundled skills;
@@ -127,7 +134,7 @@ setup, scripted/CI use, and the two deliberately human-run jobs (`sidegraph-impo
127
134
  | `sidegraph-pre-tool-use` | `PreToolUse` hook — hands the agent the records anchored to a file when it reads or edits it (`Read`, `Grep`, `Edit`, `Write`, and `sed`/`grep`/`rg`/`cat` in Bash). |
128
135
  | `sidegraph-subagent-start` | `SubagentStart` hook — tells a starting subagent that decision memory exists and how to ask it. |
129
136
  | `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. |
130
- | `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). |
137
+ | `sidegraph-init` | CLI — bootstrap `.sidegraph/` in a repo: create the store, check for the graph, ask (in a terminal) whether to install the git hook that keeps the graph fresh (`--hooks`, `--no-hooks`, `--remove-hooks`), print the plugin install path (and the no-plugin `claude mcp add` alternative). |
131
138
  | `sidegraph-ratify` | CLI — review/accept/drop proposed decisions, facts, and domains. |
132
139
  | `sidegraph-sync` | CLI — re-anchor the store after a Graphify rebuild. |
133
140
  | `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`). |
@@ -17,18 +17,32 @@ sidegraph-init
17
17
  it. `sidegraph-init` creates the repo-committed `.sidegraph/` record directories and a
18
18
  gitignored derived `index.db`. Both commands are safe to run again.
19
19
 
20
+ In a terminal, `sidegraph-init` also asks whether to keep the code graph fresh. Yes installs a
21
+ helper and a marked block in the `post-commit`, `post-merge` and `post-checkout` git hooks, which
22
+ rebuild `graphify-out/graph.json` in the background. It never replaces a hook you already have.
23
+ `sidegraph-init --hooks` answers yes without asking, `--no-hooks` answers no and stops the
24
+ reminder, and `--remove-hooks` takes the hook out. Without a terminal it does not ask. See
25
+ [keeping the graph fresh](../integrations/graphify.md#keeping-the-graph-fresh-git-hooks).
26
+
20
27
  If the repository already contains ADRs or supported flow specs, you can now switch to the
21
28
  [preview-first bootstrap](bootstrap.md). Otherwise continue here.
22
29
 
23
30
  ## 2. Connect your host
24
31
 
25
- The plugin is the recommended route for both Claude Code and Codex:
32
+ The plugin is the recommended route for both Claude Code and Codex. In Claude Code:
26
33
 
27
34
  ```text
28
35
  /plugin marketplace add SantyagoSeaman/sidegraph
29
36
  /plugin install sidegraph@sidegraph
30
37
  ```
31
38
 
39
+ In Codex, from a terminal:
40
+
41
+ ```bash
42
+ codex plugin marketplace add SantyagoSeaman/sidegraph
43
+ codex plugin add sidegraph@sidegraph
44
+ ```
45
+
32
46
  Start a new interactive session in the repository and approve the hook trust prompt. For a
33
47
  manual or source-checkout setup, use the host-specific page:
34
48
  [Claude Code](claude-code-setup.md) or [Codex](codex-setup.md).
@@ -71,8 +85,11 @@ git status --short
71
85
  sidegraph-verify
72
86
  ```
73
87
 
74
- Commit `.sidegraph/format`, `.sidegraph/.gitignore`, and the canonical JSON directories.
75
- Do not commit `.sidegraph/index.db`; it is derived and already ignored.
88
+ Commit the whole `.sidegraph/` directory (`git add .sidegraph`). Its own `.gitignore` already
89
+ leaves out `index.db` (the derived index, with its SQLite sidecar files) and `*.tmp` files, so what
90
+ gets staged is what should travel: the `format` marker, `stamping_live_since`, `.gitignore` and the
91
+ record directories. A store file left uncommitted for a day is reported by
92
+ [`store-uncommitted`](../guides/troubleshooting.md#store-uncommitted).
76
93
 
77
94
  The loop is now working. Next, run the short
78
95
  [verification checklist](../guides/verifying-your-setup.md), then
@@ -103,9 +103,11 @@ guide is the checklist for.
103
103
 
104
104
  ## 2. The automated path: Stop hook → distill → propose → ratify
105
105
 
106
- At the end of a session, the `Stop` hook fires a one-time nudge (see
106
+ At the end of a session, the `Stop` hook fires a nudge (see
107
107
  [`reference/hooks.md`](../reference/hooks.md)) asking the agent to review the session for
108
- anything durable. The agent — not a separate LLM call, the same in-session agent — distills
108
+ anything durable. The first nudge comes once the session looks substantial. A session that
109
+ keeps working is nudged again, but only after at least 30 minutes and 10 new commits since the
110
+ last nudge ([re-arm](../reference/hooks.md#re-arm-after-more-work)). The agent — not a separate LLM call, the same in-session agent — distills
109
111
  what happened into one or more **What / Why / Where / Learned** drafts and calls
110
112
  `propose_decisions(drafts=[...])`.
111
113
 
@@ -134,9 +136,9 @@ The write pipeline (`src/sidegraph/capture.py`) is deterministic — no LLM key
134
136
  4. **Anchor** best-effort via the same multi-anchor resolution as `add_decision` (orphaned
135
137
  leaf if no graph is present).
136
138
 
137
- Proposed decisions are **not silently invisible**: they do surface in `get_task_context` and
138
- `retrieve_decisions`, but every rendered line is tagged `[unratified]` so you always know a
139
- draft hasn't been reviewed yet (see
139
+ Proposed decisions are **not silently invisible**: they do surface in `get_task_context`,
140
+ where every rendered line is tagged `[unratified]`, and in `retrieve_decisions`, where every
141
+ record carries its `status`, so you always know a draft hasn't been reviewed yet (see
140
142
  [`guides/retrieval-in-sessions.md`](retrieval-in-sessions.md)). Ratification is what removes
141
143
  that tag, not what makes the record appear.
142
144
 
@@ -148,8 +150,8 @@ Ratify without leaving the session. `SessionStart` tells you when something is w
148
150
  is two MCP tools: `list_proposed()` (human-readable render of everything pending) and
149
151
  `ratify(accept=[...], drop=[...])` — the unified tool that ratifies decisions *and* domains
150
152
  through one gate (see [mind model](../concepts/mind-model.md#domain-lifecycle)).
151
- `ratify_decisions(accept=[...], drop=[...])` still works but is a **deprecated alias**, kept
152
- for one release for existing callers only — prefer `ratify` in new code.
153
+ `ratify_decisions(accept=[...], drop=[...])` still works but is a **deprecated alias** (since
154
+ 0.1.0, still kept) for existing callers only — prefer `ratify` in new code.
153
155
 
154
156
  - **Accept** flips `proposed → accepted`. The record now reads untagged everywhere.
155
157
  - **Drop** is append-only, like everything else in the store: it sets `valid_to` and flips