sidegraph 0.15.0__tar.gz → 0.16.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 (575) hide show
  1. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/workflows/ci.yml +3 -1
  2. {sidegraph-0.15.0 → sidegraph-0.16.0}/CHANGELOG.md +36 -0
  3. {sidegraph-0.15.0 → sidegraph-0.16.0}/CLAUDE.md +1 -1
  4. {sidegraph-0.15.0 → sidegraph-0.16.0}/PKG-INFO +2 -2
  5. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/README.md +1 -0
  6. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/concepts/mind-model.md +5 -3
  7. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/concepts/retrieval.md +6 -0
  8. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/getting-started/installation.md +9 -8
  9. sidegraph-0.16.0/docs/guides/health-check.md +66 -0
  10. sidegraph-0.16.0/docs/guides/using-0.16.md +45 -0
  11. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/reference/cli.md +39 -17
  12. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/reference/hooks.md +14 -7
  13. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/reference/mcp-tools.md +45 -26
  14. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/reference/store-format.md +15 -11
  15. {sidegraph-0.15.0 → sidegraph-0.16.0}/package.json +1 -1
  16. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
  17. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
  18. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/.muse-plugin/plugin.json +5 -1
  19. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +4 -2
  20. sidegraph-0.16.0/plugin/sidegraph/skills/health-check/SKILL.md +83 -0
  21. sidegraph-0.16.0/plugin/sidegraph/skills/health-check/scripts/collect.py +1100 -0
  22. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +13 -8
  23. sidegraph-0.16.0/plugin/sidegraph/skills/stats/agents/openai.yaml +6 -0
  24. {sidegraph-0.15.0 → sidegraph-0.16.0}/pyproject.toml +4 -4
  25. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/__init__.py +1 -1
  26. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/cli.py +20 -5
  27. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/doctor.py +19 -4
  28. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/gitio.py +2 -1
  29. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/host/hooks.py +21 -16
  30. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/host/subagent.py +1 -0
  31. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/hot_index.py +2 -1
  32. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/retrieval.py +21 -10
  33. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/server.py +144 -19
  34. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/stats/model.py +6 -1
  35. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/stats/render.py +2 -0
  36. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/store.py +218 -91
  37. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/store_layout.py +35 -0
  38. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/sync.py +16 -2
  39. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/githooks_support.py +4 -0
  40. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bounded_listings.py +435 -0
  41. sidegraph-0.16.0/tests/test_cli_compact.py +299 -0
  42. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_codex_plugin.py +9 -2
  43. sidegraph-0.16.0/tests/test_health_check_skill.py +1195 -0
  44. sidegraph-0.16.0/tests/test_hook_contention.py +972 -0
  45. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_pretool_records.py +110 -22
  46. sidegraph-0.16.0/tests/test_retrieval_seeds.py +436 -0
  47. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_decision_listing.py +22 -6
  48. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_mcp_smoke.py +10 -3
  49. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_skill_frontmatter.py +1 -0
  50. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_stats_model.py +138 -0
  51. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_stats_render.py +41 -0
  52. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_stop_rearm.py +15 -2
  53. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_canonical_stat.py +34 -1
  54. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_compact.py +84 -4
  55. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_compact_review.py +16 -0
  56. {sidegraph-0.15.0 → sidegraph-0.16.0}/uv.lock +5 -5
  57. sidegraph-0.15.0/tests/test_cli_compact.py +0 -135
  58. sidegraph-0.15.0/tests/test_retrieval_seeds.py +0 -49
  59. {sidegraph-0.15.0 → sidegraph-0.16.0}/.agents/plugins/marketplace.json +0 -0
  60. {sidegraph-0.15.0 → sidegraph-0.16.0}/.claude-plugin/marketplace.json +0 -0
  61. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/CODEOWNERS +0 -0
  62. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  63. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  64. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  65. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  66. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/secret_scanning.yml +0 -0
  67. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/workflows/publish.yml +0 -0
  68. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/workflows/scorecard.yml +0 -0
  69. {sidegraph-0.15.0 → sidegraph-0.16.0}/.github/workflows/session-link-gate.yml +0 -0
  70. {sidegraph-0.15.0 → sidegraph-0.16.0}/.gitignore +0 -0
  71. {sidegraph-0.15.0 → sidegraph-0.16.0}/.gitleaks.toml +0 -0
  72. {sidegraph-0.15.0 → sidegraph-0.16.0}/.opencode/INSTALL.md +0 -0
  73. {sidegraph-0.15.0 → sidegraph-0.16.0}/.pre-commit-config.yaml +0 -0
  74. {sidegraph-0.15.0 → sidegraph-0.16.0}/.python-version +0 -0
  75. {sidegraph-0.15.0 → sidegraph-0.16.0}/AGENTS.md +0 -0
  76. {sidegraph-0.15.0 → sidegraph-0.16.0}/CODE_OF_CONDUCT.md +0 -0
  77. {sidegraph-0.15.0 → sidegraph-0.16.0}/CONTRIBUTING.md +0 -0
  78. {sidegraph-0.15.0 → sidegraph-0.16.0}/LICENSE +0 -0
  79. {sidegraph-0.15.0 → sidegraph-0.16.0}/README.md +0 -0
  80. {sidegraph-0.15.0 → sidegraph-0.16.0}/SECURITY.md +0 -0
  81. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/concepts/anchoring.md +0 -0
  82. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/concepts/data-model.md +0 -0
  83. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/concepts/decision-memory.md +0 -0
  84. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/getting-started/bootstrap.md +0 -0
  85. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/getting-started/claude-code-setup.md +0 -0
  86. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/getting-started/codex-setup.md +0 -0
  87. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/getting-started/quickstart.md +0 -0
  88. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/adr-export.md +0 -0
  89. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/capturing-decisions.md +0 -0
  90. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/ci-cd-maintenance.md +0 -0
  91. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/migrating-to-0.14.md +0 -0
  92. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/naming-your-domains.md +0 -0
  93. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/retrieval-in-sessions.md +0 -0
  94. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/semantic-docs.md +0 -0
  95. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/surviving-refactors.md +0 -0
  96. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/team-workflow.md +0 -0
  97. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/troubleshooting.md +0 -0
  98. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/using-0.15.md +0 -0
  99. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/guides/verifying-your-setup.md +0 -0
  100. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/integrations/claude-code.md +0 -0
  101. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/integrations/codex.md +0 -0
  102. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/integrations/graphify.md +0 -0
  103. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/integrations/muse.md +0 -0
  104. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/integrations/opencode.md +0 -0
  105. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/llms.txt +0 -0
  106. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/pilot-kit/README.md +0 -0
  107. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/pilot-kit/corpus_fit.py +0 -0
  108. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/pilot-kit/judge-prompt.md +0 -0
  109. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/pilot-kit/questions-prompt.md +0 -0
  110. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/pilot-kit/rubric-template.md +0 -0
  111. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/reference/configuration.md +0 -0
  112. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/reference/git-bindings.md +0 -0
  113. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/reference/operations.md +0 -0
  114. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/reference/releasing.md +0 -0
  115. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/reference/stability.md +0 -0
  116. {sidegraph-0.15.0 → sidegraph-0.16.0}/docs/whitepaper/index.md +0 -0
  117. {sidegraph-0.15.0 → sidegraph-0.16.0}/index.js +0 -0
  118. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/.mcp.json +0 -0
  119. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/codex/hooks.json +0 -0
  120. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/codex/mcp.json +0 -0
  121. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/hooks/hooks.json +0 -0
  122. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
  123. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
  124. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
  125. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
  126. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
  127. {sidegraph-0.15.0/plugin/sidegraph/skills/import-adrs → sidegraph-0.16.0/plugin/sidegraph/skills/health-check}/agents/openai.yaml +0 -0
  128. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
  129. {sidegraph-0.15.0/plugin/sidegraph/skills/manage-domains → sidegraph-0.16.0/plugin/sidegraph/skills/import-adrs}/agents/openai.yaml +0 -0
  130. {sidegraph-0.15.0/plugin/sidegraph/skills/name-domains → sidegraph-0.16.0/plugin/sidegraph/skills/manage-domains}/agents/openai.yaml +0 -0
  131. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
  132. {sidegraph-0.15.0/plugin/sidegraph/skills/setup → sidegraph-0.16.0/plugin/sidegraph/skills/name-domains}/agents/openai.yaml +0 -0
  133. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
  134. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
  135. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
  136. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
  137. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
  138. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
  139. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
  140. {sidegraph-0.15.0/plugin/sidegraph/skills/stats → sidegraph-0.16.0/plugin/sidegraph/skills/setup}/agents/openai.yaml +0 -0
  141. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
  142. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
  143. {sidegraph-0.15.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
  144. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/adr.py +0 -0
  145. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/adr_cli.py +0 -0
  146. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/adr_files.py +0 -0
  147. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/adr_identity.py +0 -0
  148. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/anchoring.py +0 -0
  149. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bash_paths.py +0 -0
  150. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/__init__.py +0 -0
  151. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/apply.py +0 -0
  152. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/catalog.py +0 -0
  153. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/cli.py +0 -0
  154. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/integrations.py +0 -0
  155. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/model.py +0 -0
  156. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/planner.py +0 -0
  157. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/proof.py +0 -0
  158. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/review.py +0 -0
  159. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/scan.py +0 -0
  160. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/capture.py +0 -0
  161. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/config.py +0 -0
  162. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/delivery.py +0 -0
  163. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/doc_import.py +0 -0
  164. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/domain_snapshot.py +0 -0
  165. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/domains.py +0 -0
  166. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/drift_checks.py +0 -0
  167. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/engine/__init__.py +0 -0
  168. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/engine/rationale.py +0 -0
  169. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/engine/reader.py +0 -0
  170. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/freshness.py +0 -0
  171. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/gitenv.py +0 -0
  172. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/githooks.py +0 -0
  173. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/host/__init__.py +0 -0
  174. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/host/claude_settings.py +0 -0
  175. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/host/diagnostics.py +0 -0
  176. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/host/launch.py +0 -0
  177. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/host/mcp_entry.py +0 -0
  178. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/host/session_identity.py +0 -0
  179. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/importer.py +0 -0
  180. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/input_limits.py +0 -0
  181. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/integrity.py +0 -0
  182. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/nearest_anchored.py +0 -0
  183. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/okf.py +0 -0
  184. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/profiles.py +0 -0
  185. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/redaction_scan.py +0 -0
  186. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/redaction_tokens.py +0 -0
  187. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/schema.py +0 -0
  188. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/seed_ladder.py +0 -0
  189. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/stats/__init__.py +0 -0
  190. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/text_paths.py +0 -0
  191. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/tool_rate_limit.py +0 -0
  192. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/validation_errors.py +0 -0
  193. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/verify.py +0 -0
  194. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/viz/__init__.py +0 -0
  195. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
  196. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/viz/model.py +0 -0
  197. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/viz/render.py +0 -0
  198. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/viz/template.html +0 -0
  199. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/worktree_seeds.py +0 -0
  200. {sidegraph-0.15.0 → sidegraph-0.16.0}/src/sidegraph/write_boundary.py +0 -0
  201. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/__init__.py +0 -0
  202. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/conftest.py +0 -0
  203. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
  204. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bitfinex_slice.json +0 -0
  205. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
  206. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
  207. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
  208. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
  209. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
  210. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/graph.json +0 -0
  211. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
  212. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
  213. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
  214. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
  215. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
  216. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
  217. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
  218. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
  219. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
  220. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
  221. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
  222. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
  223. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
  224. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
  225. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
  226. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
  227. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
  228. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
  229. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
  230. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
  231. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
  232. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
  233. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
  234. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
  235. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/design.md +0 -0
  236. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
  237. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
  238. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
  239. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
  240. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
  241. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
  242. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
  243. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
  244. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
  245. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
  246. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
  247. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
  248. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
  249. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
  250. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
  251. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/member_names_python_graph.json +0 -0
  252. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/member_names_swift_graph.json +0 -0
  253. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/fixtures/mini_graph.json +0 -0
  254. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/graph_fixtures.py +0 -0
  255. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/opencode_plugin_runner.mjs +0 -0
  256. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/snapshot_support.py +0 -0
  257. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_adr.py +0 -0
  258. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_adr_files.py +0 -0
  259. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_adr_identity.py +0 -0
  260. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_agent_brief_manifests.py +0 -0
  261. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_anchor_descriptor.py +0 -0
  262. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_anchor_paths.py +0 -0
  263. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_anchoring.py +0 -0
  264. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_anchoring_mapping_refresh.py +0 -0
  265. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_anchoring_membership.py +0 -0
  266. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bash_paths.py +0 -0
  267. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_batch_panel_fixes.py +0 -0
  268. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_apply.py +0 -0
  269. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_catalog.py +0 -0
  270. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_cli.py +0 -0
  271. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_descriptor_cleanup.py +0 -0
  272. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_integrations.py +0 -0
  273. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_model.py +0 -0
  274. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_planner.py +0 -0
  275. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_proof.py +0 -0
  276. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_review.py +0 -0
  277. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_scan.py +0 -0
  278. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_scan_regular.py +0 -0
  279. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_bootstrap_unanchored.py +0 -0
  280. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_capture_auto_accept.py +0 -0
  281. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_capture_facts.py +0 -0
  282. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_capture_initiative.py +0 -0
  283. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_capture_integration.py +0 -0
  284. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_capture_neighbors.py +0 -0
  285. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_capture_propose.py +0 -0
  286. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_capture_redact.py +0 -0
  287. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_adr.py +0 -0
  288. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_doctor.py +0 -0
  289. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_domains.py +0 -0
  290. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_domains_snapshot.py +0 -0
  291. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_graph_paths.py +0 -0
  292. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_import.py +0 -0
  293. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_init.py +0 -0
  294. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_init_hooks.py +0 -0
  295. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_okf.py +0 -0
  296. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_ratify.py +0 -0
  297. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_ratify_facts.py +0 -0
  298. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_stats.py +0 -0
  299. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_sync.py +0 -0
  300. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_sync_check.py +0 -0
  301. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_unreadable_paths.py +0 -0
  302. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_cli_viz.py +0 -0
  303. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_command_windows.py +0 -0
  304. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_community_baseline.py +0 -0
  305. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_config.py +0 -0
  306. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_config_ancestor_lookup.py +0 -0
  307. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_config_borrowed_graph.py +0 -0
  308. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_corpus_expected_renders.py +0 -0
  309. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_corpus_self_corpus.py +0 -0
  310. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_coverage_telemetry_e2e.py +0 -0
  311. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_delivery_evidence.py +0 -0
  312. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_delivery_stats.py +0 -0
  313. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_delivery_surfaces.py +0 -0
  314. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_digest_integrity.py +0 -0
  315. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doc_corpus_integration.py +0 -0
  316. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doc_import.py +0 -0
  317. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_docs_claims.py +0 -0
  318. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor.py +0 -0
  319. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_auto_share.py +0 -0
  320. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_code_drift.py +0 -0
  321. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_dangling_supports.py +0 -0
  322. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_duplicate_entity.py +0 -0
  323. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
  324. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_graph_stale.py +0 -0
  325. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_integrity.py +0 -0
  326. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_never_surfaced.py +0 -0
  327. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_scan.py +0 -0
  328. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_stale_instructions.py +0 -0
  329. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_unhashable_payload.py +0 -0
  330. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_doctor_unratified_accept.py +0 -0
  331. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_domain_seed_names.py +0 -0
  332. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_domain_snapshot_format.py +0 -0
  333. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_domain_snapshot_notices.py +0 -0
  334. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_domains.py +0 -0
  335. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_drift_checks.py +0 -0
  336. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_engine_build.py +0 -0
  337. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_entity_duplicate_resolution.py +0 -0
  338. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_entity_get_or_create_race.py +0 -0
  339. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_entry_point_arguments.py +0 -0
  340. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_env_isolation.py +0 -0
  341. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_fact_reachability_gate.py +0 -0
  342. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_file_bound_retrieval.py +0 -0
  343. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_flow_profile.py +0 -0
  344. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_git_bindings_blame.py +0 -0
  345. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_git_bindings_hook.py +0 -0
  346. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_git_bindings_provenance.py +0 -0
  347. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_git_config_isolation.py +0 -0
  348. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_git_env.py +0 -0
  349. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_git_output_utf8.py +0 -0
  350. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_githooks.py +0 -0
  351. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_graph_freshness.py +0 -0
  352. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_graphify_pin.py +0 -0
  353. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_hook_body_compaction.py +0 -0
  354. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_hook_failure_diagnostics.py +0 -0
  355. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_hook_payload_encoding.py +0 -0
  356. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_hook_showings.py +0 -0
  357. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_hook_spawn_guard.py +0 -0
  358. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_agent_brief.py +0 -0
  359. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_agent_state.py +0 -0
  360. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_borrowed_graph.py +0 -0
  361. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_claude_settings.py +0 -0
  362. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_drift_nudge.py +0 -0
  363. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_integrity.py +0 -0
  364. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_launch.py +0 -0
  365. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_pretool.py +0 -0
  366. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_session_key.py +0 -0
  367. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_session_start.py +0 -0
  368. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_session_start_concurrent.py +0 -0
  369. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_stop.py +0 -0
  370. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_subagent_start.py +0 -0
  371. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_subdirectory_launch.py +0 -0
  372. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_touch_events.py +0 -0
  373. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_host_wiring_checks.py +0 -0
  374. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_hot_index.py +0 -0
  375. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_hot_index_facts.py +0 -0
  376. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_hot_index_hook.py +0 -0
  377. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_hot_path_imports.py +0 -0
  378. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_import_dry_run_preview.py +0 -0
  379. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_importer.py +0 -0
  380. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_index_journal_mode.py +0 -0
  381. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_installed_wheel_smoke.py +0 -0
  382. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_integrity.py +0 -0
  383. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_integrity_engine_version.py +0 -0
  384. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_integrity_refresh_hook.py +0 -0
  385. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_integrity_replay.py +0 -0
  386. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_integrity_stranded.py +0 -0
  387. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_lazy_root.py +0 -0
  388. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_mcp_entry_ratify_policy.py +0 -0
  389. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_mcp_entry_repo_root.py +0 -0
  390. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_member_anchor_wiring.py +0 -0
  391. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_mind_model_additive_fields.py +0 -0
  392. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_muse_plugin.py +0 -0
  393. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_nearest_anchored.py +0 -0
  394. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_okf.py +0 -0
  395. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_opencode_plugin.py +0 -0
  396. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_openspec_profile.py +0 -0
  397. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_pathless_descriptor_adoption.py +0 -0
  398. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
  399. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_portable_json.py +0 -0
  400. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_proposal_lifecycle.py +0 -0
  401. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_public_hook_launch.py +0 -0
  402. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_ratify_listing_gone_dark.py +0 -0
  403. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_ratify_policy.py +0 -0
  404. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_rationale_compatibility.py +0 -0
  405. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_community_labels.py +0 -0
  406. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_doc_nodes.py +0 -0
  407. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_engine_version.py +0 -0
  408. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_file_labels.py +0 -0
  409. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_graph.py +0 -0
  410. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_integration.py +0 -0
  411. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_label_conventions.py +0 -0
  412. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_member_name_lookup.py +0 -0
  413. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_member_names.py +0 -0
  414. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_nodes_in_file.py +0 -0
  415. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_perf.py +0 -0
  416. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_rationale.py +0 -0
  417. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_read.py +0 -0
  418. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_resolve.py +0 -0
  419. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_stub_collapse.py +0 -0
  420. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_subdir_mismatch.py +0 -0
  421. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_type_split.py +0 -0
  422. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_reader_version.py +0 -0
  423. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_rebuild_instruction.py +0 -0
  424. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_redaction_scan.py +0 -0
  425. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_redaction_seeded.py +0 -0
  426. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_redaction_tokens.py +0 -0
  427. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_repo_relative_paths_portable.py +0 -0
  428. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_repoint_integration.py +0 -0
  429. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_budget_counters.py +0 -0
  430. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_context.py +0 -0
  431. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_drift_marker.py +0 -0
  432. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_drilldown.py +0 -0
  433. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_facts.py +0 -0
  434. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_guessed.py +0 -0
  435. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_ids.py +0 -0
  436. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_integration.py +0 -0
  437. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_membership_generations.py +0 -0
  438. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_membership_index.py +0 -0
  439. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_rank.py +0 -0
  440. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_shown_ids.py +0 -0
  441. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_terminal_evidence.py +0 -0
  442. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_thin_tools.py +0 -0
  443. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_toc.py +0 -0
  444. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_toptier.py +0 -0
  445. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_retrieval_unratified.py +0 -0
  446. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sandbox_hygiene.py +0 -0
  447. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_schema_descriptor.py +0 -0
  448. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_schema_domain.py +0 -0
  449. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_schema_fact.py +0 -0
  450. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_secret_scan_gate.py +0 -0
  451. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_binary_limits.py +0 -0
  452. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_capture_diagnostics.py +0 -0
  453. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_capture_limits.py +0 -0
  454. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_cli_diagnostics.py +0 -0
  455. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_doc_limits.py +0 -0
  456. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_input_limits.py +0 -0
  457. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_mcp_write_diagnostics.py +0 -0
  458. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_numeric_enums.py +0 -0
  459. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_python_shapes.py +0 -0
  460. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_redaction_cursor.py +0 -0
  461. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_redaction_scaling.py +0 -0
  462. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_validation_errors.py +0 -0
  463. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_security_write_boundary.py +0 -0
  464. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_seed_ladder.py +0 -0
  465. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_seed_paths_portable.py +0 -0
  466. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_add_anchors.py +0 -0
  467. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_anchoring.py +0 -0
  468. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_annotations.py +0 -0
  469. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_argument_names.py +0 -0
  470. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_borrowed_graph.py +0 -0
  471. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_capture.py +0 -0
  472. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_commit_hint.py +0 -0
  473. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_coverage_events.py +0 -0
  474. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_domains.py +0 -0
  475. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_drilldown.py +0 -0
  476. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_facts.py +0 -0
  477. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_find_entity.py +0 -0
  478. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_get_store.py +0 -0
  479. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_get_task_context.py +0 -0
  480. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_graph_freshness.py +0 -0
  481. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_graph_path.py +0 -0
  482. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_import.py +0 -0
  483. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_invocation_policy.py +0 -0
  484. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_nearest_anchored.py +0 -0
  485. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_prewrite_anchor_validation.py +0 -0
  486. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_ratify_facts.py +0 -0
  487. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_record_types.py +0 -0
  488. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_redaction.py +0 -0
  489. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_refresh.py +0 -0
  490. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_render_events.py +0 -0
  491. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_result_contract.py +0 -0
  492. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_supersede.py +0 -0
  493. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_sync_anchors.py +0 -0
  494. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_telemetry.py +0 -0
  495. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_thin_tools.py +0 -0
  496. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_tolerant_seeds.py +0 -0
  497. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_server_verify.py +0 -0
  498. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_session_attribution.py +0 -0
  499. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_stats_graph.py +0 -0
  500. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_stats_health.py +0 -0
  501. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_stats_skill.py +0 -0
  502. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_stats_snapshot.py +0 -0
  503. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_stop_hot_path.py +0 -0
  504. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store.py +0 -0
  505. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_agent_state.py +0 -0
  506. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
  507. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_bad_file.py +0 -0
  508. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_binding_index.py +0 -0
  509. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_concurrent_open.py +0 -0
  510. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_coverage_telemetry.py +0 -0
  511. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_cross_process_mutations.py +0 -0
  512. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_derived_community.py +0 -0
  513. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_domain_members.py +0 -0
  514. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_domains.py +0 -0
  515. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_entities.py +0 -0
  516. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_fact_cascade.py +0 -0
  517. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_facts.py +0 -0
  518. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_file_anchor_names.py +0 -0
  519. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_git_root_symlink.py +0 -0
  520. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_meta.py +0 -0
  521. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_migration.py +0 -0
  522. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_mutation_guard.py +0 -0
  523. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_mutation_immediate.py +0 -0
  524. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_non_file_entries.py +0 -0
  525. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
  526. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_persistence.py +0 -0
  527. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_ratification.py +0 -0
  528. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_rebuild_atomicity.py +0 -0
  529. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_record_identity.py +0 -0
  530. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_record_types.py +0 -0
  531. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_render_events.py +0 -0
  532. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_requirement.py +0 -0
  533. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_retrieval.py +0 -0
  534. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_slug_conflicts.py +0 -0
  535. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_snapshot_wiring.py +0 -0
  536. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_stamping_marker.py +0 -0
  537. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_symlinks.py +0 -0
  538. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_telemetry.py +0 -0
  539. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_threading.py +0 -0
  540. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_tmp_sweep_age.py +0 -0
  541. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_store_update_meta_if.py +0 -0
  542. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_subagent_start_manifests.py +0 -0
  543. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_subprocess_text_encoding.py +0 -0
  544. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_canonical_writes.py +0 -0
  545. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_clean.py +0 -0
  546. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_domains.py +0 -0
  547. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_drift_cache.py +0 -0
  548. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_fresh_clone.py +0 -0
  549. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_integration.py +0 -0
  550. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_membership.py +0 -0
  551. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_moved_adoption.py +0 -0
  552. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_rebind.py +0 -0
  553. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_repoint.py +0 -0
  554. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_report_has_findings.py +0 -0
  555. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_run.py +0 -0
  556. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_snapshot_membership.py +0 -0
  557. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_toc_cache.py +0 -0
  558. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_volatile_heal.py +0 -0
  559. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_sync_wiring.py +0 -0
  560. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_telemetry_retention.py +0 -0
  561. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_text_paths.py +0 -0
  562. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_verify_domain_snapshot.py +0 -0
  563. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_verify_git_framing.py +0 -0
  564. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_verify_git_revisions.py +0 -0
  565. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_verify_git_stdin.py +0 -0
  566. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_verify_snapshot.py +0 -0
  567. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_verify_transitions.py +0 -0
  568. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_viz_asset_packaged.py +0 -0
  569. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_viz_model.py +0 -0
  570. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_viz_render_html.py +0 -0
  571. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_viz_render_json.py +0 -0
  572. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/test_worktree_seeds.py +0 -0
  573. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/wheel_server_trace.py +0 -0
  574. {sidegraph-0.15.0 → sidegraph-0.16.0}/tests/wheel_smoke.py +0 -0
  575. {sidegraph-0.15.0 → sidegraph-0.16.0}/tools/check_no_session_links.py +0 -0
@@ -130,7 +130,7 @@ jobs:
130
130
  interpreter="$environment/bin/python"
131
131
  constraints=()
132
132
  if [ "$SDK_PAIR" = minimum ]; then
133
- constraints=(fastmcp==3.4.2 mcp==1.24.0)
133
+ constraints=(fastmcp==3.4.2 mcp==1.30.0)
134
134
  fi
135
135
  uv pip install --python "$interpreter" "$wheel" pytest "${constraints[@]}"
136
136
  mkdir -p "$RUNNER_TEMP/sdk-check"
@@ -188,6 +188,7 @@ jobs:
188
188
  uv run pytest -q --junitxml="$env:RUNNER_TEMP/windows-core.xml" `
189
189
  tests/test_store_mutation_guard.py `
190
190
  tests/test_store_mutation_immediate.py tests/test_store_cross_process_mutations.py `
191
+ tests/test_hook_contention.py tests/test_retrieval_seeds.py `
191
192
  tests/test_portable_json.py tests/test_bootstrap_descriptor_cleanup.py `
192
193
  tests/test_server_result_contract.py tests/test_server_invocation_policy.py `
193
194
  tests/test_verify_git_stdin.py tests/test_seed_paths_portable.py `
@@ -197,6 +198,7 @@ jobs:
197
198
  tests/test_hot_index_facts.py `
198
199
  tests/test_delivery_evidence.py tests/test_delivery_stats.py tests/test_delivery_surfaces.py `
199
200
  tests/test_git_output_utf8.py `
201
+ tests/test_health_check_skill.py `
200
202
  $privateTests `
201
203
  tests/test_installed_wheel_smoke.py
202
204
  if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
@@ -7,6 +7,42 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.16.0] — 2026-10-20
11
+
12
+ See [Using Sidegraph 0.16](docs/guides/using-0.16.md) for update, compatibility, and
13
+ limitation notes.
14
+
15
+ ### Security
16
+
17
+ - Raise the minimum MCP Python SDK to 1.30.0, which includes the upstream fix for
18
+ [GHSA-84m7-p3x7-pcfv](https://github.com/advisories/GHSA-84m7-p3x7-pcfv). The supported
19
+ SDK major remains 1.
20
+
21
+ ### Added
22
+
23
+ - Add `/sidegraph:health-check`, a read-only installation report with six evidence sections
24
+ and prioritized manual recommendations. It uses an already identified Python interpreter
25
+ and skips doctor and stats paths when an existing SQLite index is unsafe to open.
26
+
27
+ ### Changed
28
+
29
+ - Hook-owned SQLite handles now refuse lock contention immediately across session, stop,
30
+ tool-use and subagent entry paths. SessionStart's dedupe remains best-effort under overlap;
31
+ its graph, filesystem and Git work is outside this lock-wait bound.
32
+ - Retrieval and file listings reuse a lazy, per-call descriptor lookup, avoiding repeated
33
+ full entity scans while preserving seed selection and rendered output.
34
+ - `sidegraph-compact` reports distinct hot files retained when their content is not fully
35
+ represented in the immutable archive, with warnings that distinguish extra fields from
36
+ shared-value or structure differences.
37
+
38
+ ### Fixed
39
+
40
+ - `list_domains` now bounds its complete MCP text response and reports matched, returned and
41
+ omitted counts with whole rows. Its provisional return shape changes from a bare list to a
42
+ JSON-text envelope; exact domain-id and query filters can retrieve rows left out by the cap.
43
+ - `sidegraph-stats` withholds anchor health counts while a fresh index's binding statuses await
44
+ `sidegraph-sync`, while keeping the record inventory and reach figures available.
45
+
10
46
  ## [0.15.0] — 2026-10-18
11
47
 
12
48
  ### Added
@@ -13,7 +13,7 @@ task-aware retrieval + decision memory riding on the engine's entity graph.
13
13
  continuing participant in the project. A core feature must preserve, organize, or deliver
14
14
  accumulated project understanding. Document search by itself is not the product.
15
15
 
16
- Sidegraph is pre-1.0 (v0.15.0) — the full loop (capture, ratification, mistakes-first
16
+ Sidegraph is pre-1.0 (v0.16.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.15.0
3
+ Version: 0.16.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
@@ -23,7 +23,7 @@ Classifier: Topic :: Software Development :: Libraries
23
23
  Requires-Python: >=3.13
24
24
  Requires-Dist: anyio>=4
25
25
  Requires-Dist: fastmcp<4,>=3.4.2
26
- Requires-Dist: mcp<2,>=1.24
26
+ Requires-Dist: mcp<2,>=1.30
27
27
  Requires-Dist: pydantic>=2.9
28
28
  Requires-Dist: python-ulid>=3.0
29
29
  Description-Content-Type: text/markdown
@@ -26,6 +26,7 @@ If the repository already has ADRs or specs, use the
26
26
  ## Operate and maintain it
27
27
 
28
28
  - [Migrate an existing store to Sidegraph 0.14](guides/migrating-to-0.14.md).
29
+ - [Check a Sidegraph installation](guides/health-check.md).
29
30
  - [Survive refactors and heal anchors](guides/surviving-refactors.md).
30
31
  - [Read what Sidegraph tells you when it needs attention](guides/troubleshooting.md).
31
32
  - [Run CI and scheduled maintenance](guides/ci-cd-maintenance.md).
@@ -131,9 +131,11 @@ this matters in practice beyond an ordinary rename: freeing a community that a d
131
131
  still claims (give the successor no matching `path_prefixes`/`seed_anchors` instead of
132
132
  carrying the old rule forward).
133
133
 
134
- **Listing.** `list_domains(status=None)` returns every domain in the store — optionally
135
- filtered to one status — with membership/lineage counts (`member_count`, `seed_anchor_count`,
136
- `parent_slug`/`child_slugs`); it's the general "show me all domains" answer `list_proposed`
134
+ **Listing.** `list_domains(status=None)` searches every status and returns whole domain rows
135
+ inside a bounded JSON-text envelope, with counts and a hint when filters or output limits omit
136
+ rows. Narrow by exact domain ids or query terms to reach a row from an omitted listing. Rows
137
+ include membership/lineage fields (`member_count`, `seed_anchor_count`, `parent_slug` and
138
+ `child_slugs`); this is the general "show me all domains" answer `list_proposed`
137
139
  (proposed-only) and `list_domain_candidates` (unclaimed-only) don't cover.
138
140
 
139
141
  ## How domains relate to engine communities
@@ -103,6 +103,12 @@ an empty list with an explanatory `"note"` key — everything store-derived (`do
103
103
  takes the seeds as `files` and `entities`): given what the agent is about to touch, return a compact slice of structure *and* memory, memory ranked so the things
104
104
  most likely to save it from a repeat mistake come first.
105
105
 
106
+ Within one retrieval or file-list call, descriptor resolution shares a lazy, operation-scoped
107
+ lookup of parsed entities. It preserves the existing exact-path, pathless adoption, ambiguity,
108
+ and winner rules while avoiding a full entity-table parse for each graph node. The lookup is
109
+ discarded after the call; a later call sees entity changes. This is a performance-only change:
110
+ seed selection, record ranking, budgets, and rendered output are unchanged.
111
+
106
112
  ### Seeds
107
113
 
108
114
  A `Seed` is either:
@@ -24,18 +24,18 @@ installs a non-editable wheel outside the checkout, checks its package bytes aga
24
24
  artifact, runs a CLI, and exchanges real MCP stdio messages in a Unicode/spaced directory.
25
25
  The exact selection is in [the CI workflow](../../.github/workflows/ci.yml).
26
26
 
27
- Separately, each release candidate runs real Claude Code and Codex sessions with the
27
+ For the 0.14.0 release-candidate campaign, real Claude Code and Codex sessions ran with the
28
28
  installed plugin, in fresh host profiles, on Windows Server 2022 x64 and macOS 15 arm64,
29
- each with Python 3.13 and 3.14. Each run is the full plugin session for both hosts: the
29
+ each with Python 3.13 and 3.14. Each run was the full plugin session for both hosts: the
30
30
  plugin's MCP server, `SessionStart` context, records before a Read, a bundled skill, a
31
31
  subagent brief, the `Stop` capture prompt, capture and ratification, and recall in a fresh
32
- session. The project folder and host profile paths contain a non-ASCII character.
32
+ session. The project folder and host profile paths contained a non-ASCII character.
33
33
 
34
34
  **0.14.0 publication gate:** Claude Code 2.1.296 and Codex CLI 0.162.1 on all four cells
35
35
  above, including a Windows 3.14 cell with PowerShell 7 unavailable for preflight and both
36
36
  real host sessions. Windows 3.13 retains PowerShell 7; its launcher checks also cover 5.1.
37
- Stable publication requires the full gate to pass without a known-issue exception. The
38
- README's blue badges summarize release acceptance, rather than live workflow status or
37
+ Stable publication of 0.14.0 required the full gate to pass without a known-issue exception.
38
+ The README's blue badges summarize release acceptance, rather than live workflow status or
39
39
  support for every published version. Muse and OpenCode have the narrower coverage in
40
40
  their installation guides and are outside this native matrix.
41
41
 
@@ -45,14 +45,15 @@ with Git for Windows installed; they do not establish support for Windows hosts
45
45
  remains outside these checks.
46
46
  See [Windows](#windows) before installing a host plugin.
47
47
 
48
- Package dependencies support `fastmcp>=3.4.2,<4` and `mcp>=1.24,<2`. Major SDK upgrades
48
+ Package dependencies support `fastmcp>=3.4.2,<4` and `mcp>=1.30,<2`. Major SDK upgrades
49
49
  require a separate compatibility review; an unlocked package install may resolve newer
50
50
  versions within those bounds than the development lockfile.
51
51
 
52
52
  ### Windows
53
53
 
54
- The native checks above cover the tested release, not every published version. On
55
- Windows they cover the full plugin session; WSL is not a separate CI target.
54
+ Current native CI covers selected core/MCP checks, wheel installation, CLI execution, and
55
+ MCP stdio paths; WSL is not a separate CI target. Full Windows plugin sessions were exercised
56
+ in the historical 0.14.0 release-candidate campaign described above.
56
57
 
57
58
  **Version requirement:** releases before 0.12.0 can stall a native Windows write: a Git
58
59
  child inherits the MCP stdin pipe and holds the write until the request times out (see
@@ -0,0 +1,66 @@
1
+ # Check a Sidegraph installation
2
+
3
+ Use `/sidegraph:health-check` to collect one read-only report for the current repository.
4
+ It covers plugin wiring, runtime versions, Graphify, store integrity, anchor advisories, and
5
+ inventory and usage. `UNKNOWN` means the evidence could not be established; it remains a
6
+ warning and never becomes a clean result.
7
+
8
+ ## Runtime requirement
9
+
10
+ The skill runs its local `scripts/collect.py` helper with `-B` under an already identified
11
+ Python interpreter. In a development checkout, the supported paths are:
12
+
13
+ ```bash
14
+ "<project>/.venv/bin/python" -B "<skill-directory>/scripts/collect.py" --project "<launch-directory>" --host claude
15
+ ```
16
+
17
+ For Codex, pass `--host codex`; use `unknown` when the attached host is not known. On Windows,
18
+ use the existing `<project>/.venv/Scripts/python.exe`. Installed use requires a
19
+ known interpreter from attached host launch metadata or metadata for an identified Sidegraph
20
+ environment. The collector does not guess a Python on `PATH`, run an unknown Sidegraph
21
+ executable, or use `uv`/`uvx` as its launcher. If no suitable interpreter is known, the skill
22
+ shows all six sections as limited, includes safe static evidence already available, lists
23
+ manual recommendations, and stops. The same fallback applies when the helper exits nonzero,
24
+ prints error JSON, or cannot import required inspection helpers; show only the error class and
25
+ do not echo exception text. Cached package files alone do not authorize provisioning.
26
+
27
+ The skill resolves the Git root to select the interpreter, then passes the original launch
28
+ directory as `--project` so Claude plugin-scope checks retain the launch context. The optional
29
+ `--store`, `--graph`, and `--plugin-root` arguments are for
30
+ paths already known to the host or user; the collector does not search unrelated profiles.
31
+
32
+ ## Evidence and limits
33
+
34
+ The report separates the collector package, plugin manifest, optional PATH installation,
35
+ Graphify-recorded engine version, and any already observed active MCP evidence. Static
36
+ registration is not proof that a running server answered. The workflow never starts a server
37
+ or calls retrieval tools to test connectivity.
38
+
39
+ The collector fingerprints the canonical store, index and sidecars, settings, plugin
40
+ manifests, graph inputs, and actual Git index around its process. This is a stable-source
41
+ check, not an atomic snapshot; concurrent writes make preservation evidence unstable without
42
+ identifying which process changed it. Host hooks surrounding tool invocation are outside the
43
+ collector's preservation boundary.
44
+
45
+ If the index is absent, canonical-only doctor curation still runs, and index-dependent
46
+ findings and stats are marked skipped. If an existing index has WAL/SHM sidecars, an
47
+ unrecognized header, an unreadable header, or a nonempty rollback journal, all doctor
48
+ advisory and stats paths that could open it are skipped. A regular rollback-mode index allows
49
+ the existing doctor and stats checks to run. Cold or stale index qualifications are retained.
50
+
51
+ The six report sections distinguish contract violations from advisory findings and missing
52
+ coverage. Inventory counts come from canonical readers. Pending age is unknown for malformed
53
+ record identifiers. Usage reports summarize recorded activity only; delivery counts do not
54
+ show usefulness, prevented errors, or saved time. Records on unmerged or remote-only branches
55
+ are not exhaustively checked.
56
+
57
+ ## Manual follow-up
58
+
59
+ Recommendations are prioritized and deduplicated, with a reason, explicit scope, argv, working
60
+ directory, and environment for a manual command or skill to run after the report. Render argv
61
+ with the attached shell's native quoting; paths are never embedded into shell snippets. The
62
+ health check never executes recommendations. Ordinary doctor and stats reads
63
+ outside this collector can create SQLite sidecars for a WAL database, so inspect such an
64
+ index separately after the writing session. Ending a session does not guarantee a persistent
65
+ journal-mode change. Do not recommend an upgrade from an unknown version or install the
66
+ optional PATH CLI solely because it is absent.
@@ -0,0 +1,45 @@
1
+ # Using Sidegraph 0.16
2
+
3
+ Sidegraph 0.16.0 adds bounded full-domain listings, honest uncomputed stats, a read-only
4
+ installation health report, lower repeated descriptor-lookup cost, immediate refusal of hook
5
+ SQLite lock contention, and clearer reporting of retained hot files during compaction. See the
6
+ [changelog](../../CHANGELOG.md#0160--2026-10-20) for details.
7
+
8
+ ## Update
9
+
10
+ For a CLI installed from the public repository's `main`, run:
11
+
12
+ ```bash
13
+ uv tool upgrade sidegraph
14
+ ```
15
+
16
+ For a PyPI version pin, install or upgrade to the exact release:
17
+
18
+ ```bash
19
+ uv tool install --upgrade sidegraph==0.16.0
20
+ ```
21
+
22
+ For host plugins, update the marketplace package and installed plugin using the
23
+ [host installation instructions](../getting-started/installation.md), then start a new session
24
+ so the MCP server and hooks use the released version. Public plugin manifests intentionally
25
+ follow `main`; an explicit release-candidate pin stays pinned until you change it.
26
+
27
+ ## Stores and changed responses
28
+
29
+ Existing stores from 0.15 remain compatible. This release adds no canonical store format
30
+ migration.
31
+
32
+ `list_domains` now returns a provisional JSON text envelope with `matched`, `returned`, `omitted`,
33
+ `domains`, and `hint`, instead of a bare list. Read rows from `domains`; use the counts and hint
34
+ to see whether the response was bounded and how to narrow it.
35
+
36
+ Run `/sidegraph:health-check` for a read-only report about plugin wiring, runtime versions,
37
+ Graphify, store integrity, anchor advisories, and recorded inventory and usage. Missing evidence
38
+ stays `UNKNOWN`; an unsafe existing SQLite index causes checks that might open it to be skipped.
39
+
40
+ ## Limits
41
+
42
+ Retrieval can still include off-task records, and this release does not measure whether delivered
43
+ memory helped or saved time. It adds no task-query ranking or full-pool recall claim, and it does
44
+ not change active-store compaction behavior. Health-report usage counts describe recorded
45
+ activity, not usefulness.
@@ -1091,30 +1091,45 @@ before removing the now-redundant hot files leaves those as harmless leftover du
1091
1091
  run detects and removes them without writing a second, duplicate segment — counted separately
1092
1092
  in the output as "leftover hot file(s)".
1093
1093
 
1094
- **A hot file that differs from its archived copy.** Compact keeps a hot file whose content
1095
- differs from what it just archived, for example one holding a key the archive line lacks
1096
- (written by a newer Sidegraph), and prints a `DIFFERENT content` warning on stderr. The record
1097
- is still counted in `compacted N record(s)`, because it is in the new segment; its hot file is
1098
- not removed. The warning repeats on every later compact and store open, and `sidegraph-verify`
1099
- reports `duplicate-ulid` for the pair until a Sidegraph version that knows the key compacts it,
1100
- or you restore the hot file and remove the segment by hand.
1094
+ **A hot file that differs from its archived copy.** Compact keeps both copies and prints a
1095
+ `DIFFERENT content` warning on stderr. When ignoring hot-only fields makes the shared content
1096
+ match, the warning says those extra fields are not represented in the archive and that a newer
1097
+ Sidegraph may have written them; that is an observed shape, not proof of which version wrote it.
1098
+ If shared values or structures differ, the warning says to compare both copies. The record is
1099
+ still counted in `compacted N record(s)`, because it is in the new segment; its hot file is not
1100
+ removed. Output also reports `kept K hot file(s): their content is not fully represented in the
1101
+ archive`, including on later compact runs that have no new records to archive. `sidegraph-verify`
1102
+ continues to report `duplicate-ulid` while both copies remain. Upgrading alone is not promised to
1103
+ reconcile an existing immutable archive entry. Back up the store, run `sidegraph-verify --db
1104
+ <store-dir>`, compare both copies against known-good history, and retain both until you establish
1105
+ an information-preserving reconciliation. For a fresh candidate in `--dry-run`, the warning
1106
+ compares the hot file with the prospective archive payload; no second copy has been published yet.
1101
1107
 
1102
1108
  **`--dry-run` output:** one line per candidate — `<ulid> <kind> <status> <title>` — or a bare
1103
1109
  `nothing to compact` if there is nothing eligible at all (no candidates, nothing age-filtered
1104
- out, no leftovers). Otherwise: `would compact N record(s) (X decisions, Y domains); Z skipped
1105
- (not terminal enough)`; if `--older-than` excluded any domains outright (no terminal timestamp
1106
- to check), an additional line reports `M domain(s) excluded: terminal age unknown`; if a prior
1107
- interrupted run left redundant hot files behind, an additional line reports `would also remove
1108
- K leftover hot file(s) already durably archived by a prior, interrupted compact run`.
1110
+ out, no leftovers, and no mismatched hot files). Otherwise: `would compact N record(s) (X
1111
+ decisions, Y domains); Z skipped (not terminal enough)`; if `--older-than` excluded any domains
1112
+ outright (no terminal timestamp to check), an additional line reports `M domain(s) excluded:
1113
+ terminal age unknown`; if a prior interrupted run left redundant hot files behind, an additional
1114
+ line reports `would also remove K leftover hot file(s) already durably archived by a prior,
1115
+ interrupted compact run`; and mismatches add `would keep K hot file(s): their content is not fully
1116
+ represented in the archive`. Dry-run compares fresh candidates as well as archived leftovers and
1117
+ writes no canonical file, archive segment or digest. `--older-than` filters fresh candidates;
1118
+ already archived leftovers remain eligible for cleanup or retention regardless of their current
1119
+ hot status or age. Opening the store may still initialize or
1120
+ migrate it, or rebuild `index.db`.
1109
1121
 
1110
1122
  **Real-run output:** when there was nothing to do at all, a single line —
1111
1123
  `nothing to compact` (bare), or `nothing to compact; Z skipped (not terminal enough)` and/or
1112
- `; M domain(s) excluded: terminal age unknown` appended when either applies. Otherwise:
1124
+ `; M domain(s) excluded: terminal age unknown` appended when either applies. A positive kept
1125
+ count bypasses that no-op line. Otherwise:
1113
1126
  `compacted N record(s) into <segment_path> (X decisions, Y domains); Z skipped (not terminal
1114
- enough)` — or `compacted 0 record(s); Z skipped (not terminal enough)` when only leftover
1115
- cleanup happened and no new segment was written — followed by an `M domain(s) excluded:
1116
- terminal age unknown` line and/or a `cleaned up K leftover hot file(s) from an interrupted
1117
- prior compact run` line, each only when applicable.
1127
+ enough)` — or `compacted 0 record(s); Z skipped (not terminal enough)` when kept hot files or
1128
+ leftover cleanup remain and no new segment was written — followed by an `M domain(s) excluded:
1129
+ terminal age unknown` line, a `cleaned up K leftover hot file(s) from an interrupted prior
1130
+ compact run` line, and/or `kept K hot file(s): their content is not fully represented in the
1131
+ archive`, each only when applicable. `compacted N` counts new archive entries; `kept K` counts
1132
+ distinct hot files retained after comparison.
1118
1133
 
1119
1134
  **Exit code:** `0` on success, including a no-op run and every `--dry-run` that completes.
1120
1135
  Returns `1` before touching the store if `--older-than` is negative (`--older-than must be >= 0
@@ -1771,6 +1786,13 @@ Lines the report will not invent:
1771
1786
  no figure derived from the records: MEMORY and ANCHORS read `not shown: the index is behind
1772
1787
  the store files`, and REACH says which of its figures are not counted. The journal-derived
1773
1788
  lines are unaffected. `--json` carries `"index_stale": true` and `null` for those figures.
1789
+ - **Binding statuses not computed.** A fresh index can still have binding statuses waiting for
1790
+ `sidegraph-sync` after reload. In that state, ANCHORS reads `not computed for current graph →
1791
+ sidegraph-sync`; no anchor counts are shown, while MEMORY and REACH inventory remain available.
1792
+ `--json` carries `"anchors": null`, `"binding_statuses_computed": false` and
1793
+ `"index_stale": false`. When both conditions apply, canonical file staleness takes precedence
1794
+ in the text; `binding_statuses_computed` is false without implying that volatile state alone
1795
+ caused the omission.
1774
1796
  - **Budget and abandoned counts not recorded.** Once the report is past the floor above, when
1775
1797
  the window holds no render-journal record, the budget lines are replaced by the single line
1776
1798
  `budget and tried-and-abandoned counts: not recorded yet`. A zero there would read as a
@@ -14,6 +14,11 @@ before it reads stdin or opens the store, so typing `--help` never runs a hook.
14
14
  without arguments. For wiring them into `.claude/settings.json`, see
15
15
  [`getting-started/claude-code-setup.md`](../getting-started/claude-code-setup.md).
16
16
 
17
+ Hook-owned SQLite connections use a zero-second busy timeout, so a lock held by another
18
+ Sidegraph writer is refused immediately at the database layer. This bounds SQLite lock waits;
19
+ graph loading, filesystem work, transcript parsing and Git still contribute to whole-hook time.
20
+ Other `Store`, hot-index and read-only-index callers retain their existing defaults.
21
+
17
22
  ## The command guard
18
23
 
19
24
  The wiring commands in the plugin manifests and the setup recipes end with a shell guard:
@@ -145,8 +150,9 @@ Behavior:
145
150
  60 seconds of the recorded one, before or after it, is a duplicate (the hook registered
146
151
  twice on one host, for example the plugin and a hand-written project hook), and it prints
147
152
  `{}` and returns before anything below runs. The check is a read that takes no write lock,
148
- so a duplicate does not wait behind another process's write transaction. A start that is not a duplicate decides again and stamps the ledger in one write
149
- transaction, so two copies of the hook firing together for one session inject the map once.
153
+ so a readable, already-stamped duplicate exits immediately. A start that is not a duplicate
154
+ decides again and stamps the ledger in one write transaction. Stamping remains best-effort:
155
+ if overlapping copies both encounter a busy write, both may emit the standing map.
150
156
  If the store cannot be opened, the hook does not print `{}` (see
151
157
  [A store that cannot open](#a-store-that-cannot-open)): memory is off for the session and the
152
158
  person is told. Only a lock another process holds keeps the silent `{}`.
@@ -483,7 +489,7 @@ lines only.
483
489
  host (different session ids, so the duplicate guard in step 1 does not apply) do not both
484
490
  send it. If the write itself fails, the notice is sent anyway: a duplicate is better than
485
491
  silence. When the failure is a lock another process holds, the hook stops writing for that
486
- start (every further write would wait out the same busy timeout) and sends the remaining due
492
+ start (further writes are refused promptly too) and sends the remaining due
487
493
  notices unclaimed.
488
494
  - A check that ran and found nothing deletes its row, so a problem that returns after a fix is
489
495
  reported at once. Only a row that exists is deleted, so a start with nothing recorded makes no
@@ -783,8 +789,9 @@ repairs it, the hook keeps printing `{}`. `Store` repairs some of these and refu
783
789
  re-checks the record files before each call, but it keeps the connection it opened, so a deleted
784
790
  `index.db` stays gone for it until it restarts.
785
791
 
786
- A write that cannot get the index's write lock within 1 s (a rebuild is running) is dropped, and
787
- the hook then makes no further write in that run, so a call waits at most about 1 s.
792
+ Hook-owned writes refuse the index lock immediately. A refused hot write is dropped, and the
793
+ hook makes no further hot write in that run. SQLite contention does not set a whole-hook latency
794
+ target; unrelated startup, graph and filesystem work can still take time.
788
795
 
789
796
  Two consequences are visible:
790
797
 
@@ -1077,8 +1084,8 @@ spawn), and one `retrieval_shows` bump each. Nothing is journaled without a sess
1077
1084
  64 KB for each text document the brief names, and one records query for each file the brief names
1078
1085
  that has anchored records, stopping at the sixth file that has any (each shown file costs at least
1079
1086
  one line), then one write transaction for the journal rows. This path used to be read-only: while
1080
- another process holds the write lock, that write can wait out the one-second busy timeout before
1081
- the spawn proceeds, and a failed write is swallowed (the brief is still delivered). It loads
1087
+ another process holds the write lock, the optional journal write now refuses immediately, and a
1088
+ failed write is swallowed (the brief is still delivered). It loads
1082
1089
  nothing beyond the standard library, like the rest of this hook.
1083
1090
 
1084
1091
  **Not tested.**
@@ -1,6 +1,6 @@
1
1
  # MCP tools reference
2
2
 
3
- Twenty-four tools, all defined in [`src/sidegraph/server.py`](../../src/sidegraph/server.py) and
3
+ Twenty-five tools, all defined in [`src/sidegraph/server.py`](../../src/sidegraph/server.py) and
4
4
  exposed by the `sidegraph-mcp` stdio server (`FastMCP("sidegraph")`). The server holds one
5
5
  process-wide `Store` (path resolved via `$SIDEGRAPH_DIR`, same precedence the CLI and hooks
6
6
  use — see [`configuration.md`](configuration.md#store-path-resolution)) and a best-effort
@@ -19,24 +19,26 @@ server without host identity: the session id stays null and retrievals are journ
19
19
 
20
20
  ## Transport and protocol compatibility
21
21
 
22
- `sidegraph-mcp` is a local **stdio** server started by an MCP client. Standard input and
23
- standard output carry protocol messages; diagnostics go to standard error. The console
24
- entry point does not provide an HTTP listener or an HTTP authorization configuration.
22
+ `sidegraph-mcp` defaults to a local **stdio** server started by an MCP client. Standard input
23
+ and standard output carry protocol messages; diagnostics go to standard error. FastMCP
24
+ transport settings can select HTTP, but Sidegraph supplies no separate HTTP authorization
25
+ configuration.
25
26
  Configure the working directory and `SIDEGRAPH_DIR` for the repository the server should
26
27
  use; see [configuration](configuration.md#path-resolution-semantics).
27
28
 
28
29
  Git commands for provenance, initiative, ratification identity and graph checks receive
29
30
  EOF on standard input, keeping subprocesses separate from the MCP protocol stream.
30
31
 
31
- The development lockfile selects FastMCP 3.4.2 and MCP Python SDK 1.28.1. Supported package
32
- dependencies are `fastmcp>=3.4.2,<4` and `mcp>=1.24,<2`. The locked stack
32
+ The development lockfile selects FastMCP 3.4.2 and MCP Python SDK 1.30.0. Supported package
33
+ dependencies are `fastmcp>=3.4.2,<4` and `mcp>=1.30,<2`. The locked stack
33
34
  uses the `initialize` / `notifications/initialized` lifecycle and negotiates protocol
34
35
  versions through **2025-11-25**. The server reports Sidegraph's package version in
35
36
  `serverInfo.version`; that is separate from the negotiated protocol version.
36
37
 
37
38
  The [2026-07-28 MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning)
38
39
  also describes a newer discovery lifecycle. The locked stack does not implement
39
- `server/discover`: a client must support the legacy initialization flow to use this
40
+ `server/discover`; the installed MCP 1.30.0 server returns JSON-RPC `-32602` (`Invalid request
41
+ parameters`) for that request. A client must support the legacy initialization flow to use this
40
42
  release. A request for a newer version during `initialize` can receive `2025-11-25`;
41
43
  the client must check that it supports the returned version.
42
44
 
@@ -59,15 +61,16 @@ counting or rendering those as separate answers.
59
61
  **Every listing tool is bounded.** The host replaces an answer over its limit with a notice
60
62
  (Claude Code: a warning above 10,000 tokens, an "exceeds maximum allowed tokens" notice above
61
63
  25,000 tokens by default, and a result saved to a file above 50,000 characters). So
62
- `retrieve_decisions`, `list_facts`, `get_entity_history`, `drill_down`, `list_domain_candidates`
63
- and `list_proposed` take `budget_chars` (default 24,000, maximum 40,000), the first four also
64
- `limit` (default 25, maximum 100; `list_domain_candidates` keeps its own `limit`), and each
65
- says what it left out and how to narrow. `get_task_context`, `query_structure`,
64
+ `retrieve_decisions`, `list_facts`, `get_entity_history`, `drill_down`, `list_domain_candidates`,
65
+ `list_proposed` and `list_domains` are bounded and say what they left out and how to narrow.
66
+ All seven take `budget_chars` (default 24,000, maximum 40,000). `retrieve_decisions`,
67
+ `list_facts`, `get_entity_history`, `drill_down` and `list_domains` take `limit` (default 25,
68
+ maximum 100); `list_domain_candidates` keeps its own `limit`. `get_task_context`, `query_structure`,
66
69
  `query_decisions` and `list_proposed` never return more than 40,000 characters: a cut names
67
70
  the sections it removed in a closing note, and the advice at the end of the answer (how the
68
71
  seeds were read, what is not in the graph, the supersede hint, the drift legend) is kept.
69
- `list_domains`, `verify_store`, `sync_anchors` and `find_entity` are sized by the number of
70
- domains, findings or name candidates, not by accumulated memory, and stay unbounded. In Codex
72
+ `verify_store`, `sync_anchors` and `find_entity` are sized by the number of findings or name
73
+ candidates, not by accumulated memory, and stay unbounded. In Codex
71
74
  the host-side knob is `mcp_servers.<id>.tools.<tool>.output_token_limit` (its default is not
72
75
  documented).
73
76
 
@@ -1198,21 +1201,37 @@ key instead of erroring.
1198
1201
  ## `list_domains`
1199
1202
 
1200
1203
  ```python
1201
- list_domains(status: str | None = None) -> list[dict]
1204
+ list_domains(
1205
+ status: str | None = None,
1206
+ query: str | None = None,
1207
+ ids: list[str] | None = None,
1208
+ limit: int = 25,
1209
+ budget_chars: int = 24000,
1210
+ ) -> ToolResult
1202
1211
  ```
1203
1212
 
1204
- The full-listing counterpart to `list_proposed` (proposed-only) and `list_domain_candidates`
1205
- (unclaimed-only) — the tool that actually answers "show me all domains". `status`, when given,
1206
- filters to one of `"proposed"`/`"accepted"`/`"dropped"`/`"superseded"`; omitted (the default)
1207
- returns every domain regardless of status. Read-only — writes nothing, ever; safe to call
1208
- repeatedly.
1209
-
1210
- **Returns:** a list sorted by `slug`, one dict per domain: `{"id": str, "slug": str, "title":
1211
- str, "summary": str, "status": str, "member_count": int, "path_prefixes": list[str],
1212
- "seed_anchor_count": int, "parent_slug": str | None, "child_slugs": list[str]}`.
1213
- `member_count` is `len(domain.communities)`: the number of communities whose every node
1214
- is in the domain (0 until `ratify`/`sidegraph-sync` resolves a freshly proposed domain). `parent_slug`/`child_slugs` reflect the FULL domain set regardless of the
1215
- `status` filter, so a filtered call still reports accurate lineage.
1213
+ The bounded, full-listing counterpart to `list_proposed` (proposed-only) and
1214
+ `list_domain_candidates` (unclaimed-only). `status`, when given, filters to one of
1215
+ `"proposed"`/`"accepted"`/`"dropped"`/`"superseded"`; omitted returns every status.
1216
+ `ids` matches exact domain ids (`Domain.domain_id`, the row's `id`, never its slug).
1217
+ `query` is case-insensitive whitespace-separated AND terms searched across slug, title and
1218
+ summary joined with newlines. Filters combine with AND; blank query and blank-only ids are
1219
+ ignored. `limit` is clamped to 1..100 and `budget_chars` to 4,000..40,000. Read-only — writes
1220
+ nothing, ever; safe to call repeatedly.
1221
+
1222
+ **Returns:** one text block containing compact JSON: `{"matched": int, "returned": int,
1223
+ "omitted": int, "domains": [...], "hint": str | null}`. Counts are after filtering and
1224
+ before bounds; no matches means all three counts are zero. `domains` is the largest fitting
1225
+ initial prefix of complete rows, sorted by slug. Each row retains the existing fields:
1226
+ `{"id", "slug", "title", "summary", "status", "member_count", "path_prefixes",
1227
+ "seed_anchor_count", "parent_slug", "child_slugs"}`. `member_count` remains
1228
+ `len(domain.communities)`. Parent/child lineage comes from the full store even when filters
1229
+ exclude relatives. When the character budget omits rows, `hint` identifies the effective bound,
1230
+ suggests filters, and gives a bounded relative local-file fallback for the next omitted domain.
1231
+ When `limit` cuts the list, the hint suggests filters and raising `limit` only below 100. Empty
1232
+ stores say `No domains in the store.`; empty filtered matches name active filter keys without
1233
+ echoing their values. This is the provisional MCP return shape and sends no output schema or
1234
+ structured duplicate.
1216
1235
 
1217
1236
  ## `propose_decisions`
1218
1237
 
@@ -595,17 +595,21 @@ collision — publishing retries under the next sequence number rather than over
595
595
  Identical content normally produces identical bytes and a matching hash suffix; the loader
596
596
  deduplicates overlapping ULIDs after branches merge.
597
597
 
598
- The loader reads hot files **and** every archive segment on every load, deduping by ULID (a
599
- record can legitimately appear in more than one segment — e.g. compaction run independently on
600
- two branches before they merged — but terminal records are immutable, so any duplicate is
601
- byte-identical and it doesn't matter which copy wins). If a hot file and an archived copy of
602
- the same id ever disagree, the hot file wins and a warning prints — that shape means
603
- corruption or a hand-edit, and the store never silently prefers the archive over live disk
604
- state. A key the hot file lacks, against `null` or an empty list or object in the archive, is
605
- not a disagreement (the file predates the field); a key only the hot file holds, at any depth
606
- and whatever its value, always is, and `sidegraph-compact` keeps such a file. The freshness digest (above) covers `archive/*.jsonl` too, so a segment absorbed from a
607
- teammate's branch via `git pull` is picked up on the next open exactly like any other new
608
- committed file.
598
+ The loader reads hot files **and** every archive segment on every load, deduping by ULID (an
599
+ archive record can legitimately appear in more than one segment — e.g. compaction run
600
+ independently on two branches before they merged — and byte-identical archive copies are
601
+ equivalent). If a hot file and an archived copy of the same id disagree, the hot file wins and
602
+ a warning prints; the store never silently prefers the archive over live disk state. A key the
603
+ hot file lacks, against `null` or an empty list or object in the archive, is not a disagreement
604
+ (the file predates the field). A key only the hot file holds, at any depth and whatever its
605
+ value, always is, and `sidegraph-compact` keeps that file. Warnings identify whether hot-only
606
+ fields explain the mismatch or whether shared values/structures differ; neither cause alone
607
+ proves which writer produced the copy. Both copies remain available, so `sidegraph-verify` may
608
+ report `duplicate-ulid`. Back up the store, verify it, compare both copies against known-good
609
+ history, and retain both until an information-preserving reconciliation is established. An
610
+ upgrade alone does not promise to reconcile an existing immutable archive entry. The freshness
611
+ digest (above) covers `archive/*.jsonl` too, so a segment absorbed from a teammate's branch via
612
+ `git pull` is picked up on the next open exactly like any other new committed file.
609
613
 
610
614
  `sidegraph-compact --older-than N` additionally requires a record to have been terminal for at
611
615
  least `N` days; domains are always excluded from that filter (nothing on `Domain` records when
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sidegraph",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "type": "module",
5
5
  "exports": "./index.js"
6
6
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sidegraph",
3
3
  "displayName": "Sidegraph",
4
- "version": "0.15.0",
4
+ "version": "0.16.0",
5
5
  "description": "Durable decision/lessons memory over your code graph — ADRs, gotchas, and constraints that survive refactors, retrieved mistakes-first.",
6
6
  "author": { "name": "SantyagoSeaman", "url": "https://github.com/SantyagoSeaman" },
7
7
  "homepage": "https://github.com/SantyagoSeaman/sidegraph",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sidegraph",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "Durable decision/lessons memory over your code graph — ADRs, gotchas, and constraints that survive refactors, retrieved mistakes-first.",
5
5
  "license": "Apache-2.0",
6
6
  "skills": "./skills/",