sidegraph 0.17.2__tar.gz → 0.18.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 (610) hide show
  1. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/workflows/ci.yml +7 -2
  2. {sidegraph-0.17.2 → sidegraph-0.18.0}/CHANGELOG.md +36 -0
  3. {sidegraph-0.17.2 → sidegraph-0.18.0}/CLAUDE.md +1 -1
  4. {sidegraph-0.17.2 → sidegraph-0.18.0}/PKG-INFO +1 -1
  5. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/concepts/retrieval.md +13 -6
  6. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/retrieval-in-sessions.md +3 -2
  7. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/troubleshooting.md +5 -2
  8. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/integrations/graphify.md +14 -2
  9. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/reference/cli.md +1 -1
  10. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/reference/hooks.md +7 -0
  11. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/reference/mcp-tools.md +3 -1
  12. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/reference/store-format.md +23 -3
  13. {sidegraph-0.17.2 → sidegraph-0.18.0}/package.json +1 -1
  14. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
  15. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
  16. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/.muse-plugin/plugin.json +1 -1
  17. {sidegraph-0.17.2 → sidegraph-0.18.0}/pyproject.toml +1 -1
  18. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/__init__.py +1 -1
  19. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/cli.py +12 -6
  20. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/githooks.py +152 -30
  21. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/integrity.py +27 -2
  22. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/retrieval.py +63 -8
  23. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/store_layout.py +13 -7
  24. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/bounded_listings_support.py +10 -0
  25. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/auto_policy/parity_goldens.json +1 -1
  26. sidegraph-0.18.0/tests/githooks_legacy_helper.py +46 -0
  27. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/githooks_support.py +0 -21
  28. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bounded_listings.py +10 -5
  29. sidegraph-0.18.0/tests/test_format2_windows.py +269 -0
  30. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_githooks.py +2 -5
  31. sidegraph-0.18.0/tests/test_githooks_atomic_lock.py +246 -0
  32. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_integrity_refresh_hook.py +87 -0
  33. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_guessed.py +2 -1
  34. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_ids.py +4 -4
  35. sidegraph-0.18.0/tests/test_retrieval_related_cap.py +256 -0
  36. sidegraph-0.18.0/tests/test_store_junctions.py +71 -0
  37. {sidegraph-0.17.2 → sidegraph-0.18.0}/uv.lock +1 -1
  38. {sidegraph-0.17.2 → sidegraph-0.18.0}/.agents/plugins/marketplace.json +0 -0
  39. {sidegraph-0.17.2 → sidegraph-0.18.0}/.claude-plugin/marketplace.json +0 -0
  40. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/CODEOWNERS +0 -0
  41. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  42. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  43. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  44. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  45. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/secret_scanning.yml +0 -0
  46. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/workflows/publish.yml +0 -0
  47. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/workflows/scorecard.yml +0 -0
  48. {sidegraph-0.17.2 → sidegraph-0.18.0}/.github/workflows/session-link-gate.yml +0 -0
  49. {sidegraph-0.17.2 → sidegraph-0.18.0}/.gitignore +0 -0
  50. {sidegraph-0.17.2 → sidegraph-0.18.0}/.gitleaks.toml +0 -0
  51. {sidegraph-0.17.2 → sidegraph-0.18.0}/.opencode/INSTALL.md +0 -0
  52. {sidegraph-0.17.2 → sidegraph-0.18.0}/.pre-commit-config.yaml +0 -0
  53. {sidegraph-0.17.2 → sidegraph-0.18.0}/.python-version +0 -0
  54. {sidegraph-0.17.2 → sidegraph-0.18.0}/AGENTS.md +0 -0
  55. {sidegraph-0.17.2 → sidegraph-0.18.0}/CODE_OF_CONDUCT.md +0 -0
  56. {sidegraph-0.17.2 → sidegraph-0.18.0}/CONTRIBUTING.md +0 -0
  57. {sidegraph-0.17.2 → sidegraph-0.18.0}/LICENSE +0 -0
  58. {sidegraph-0.17.2 → sidegraph-0.18.0}/README.md +0 -0
  59. {sidegraph-0.17.2 → sidegraph-0.18.0}/SECURITY.md +0 -0
  60. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/README.md +0 -0
  61. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/concepts/anchoring.md +0 -0
  62. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/concepts/data-model.md +0 -0
  63. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/concepts/decision-memory.md +0 -0
  64. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/concepts/mind-model.md +0 -0
  65. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/getting-started/bootstrap.md +0 -0
  66. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/getting-started/claude-code-setup.md +0 -0
  67. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/getting-started/codex-setup.md +0 -0
  68. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/getting-started/installation.md +0 -0
  69. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/getting-started/quickstart.md +0 -0
  70. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/adr-export.md +0 -0
  71. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/capturing-decisions.md +0 -0
  72. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/ci-cd-maintenance.md +0 -0
  73. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/health-check.md +0 -0
  74. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/migrating-to-0.14.md +0 -0
  75. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/migrating-to-0.17.md +0 -0
  76. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/naming-your-domains.md +0 -0
  77. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/semantic-docs.md +0 -0
  78. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/surviving-refactors.md +0 -0
  79. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/team-workflow.md +0 -0
  80. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/using-0.15.md +0 -0
  81. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/using-0.16.md +0 -0
  82. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/guides/verifying-your-setup.md +0 -0
  83. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/integrations/claude-code.md +0 -0
  84. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/integrations/codex.md +0 -0
  85. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/integrations/grok.md +0 -0
  86. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/integrations/muse.md +0 -0
  87. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/integrations/opencode.md +0 -0
  88. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/llms.txt +0 -0
  89. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/pilot-kit/README.md +0 -0
  90. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/pilot-kit/corpus_fit.py +0 -0
  91. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/pilot-kit/judge-prompt.md +0 -0
  92. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/pilot-kit/questions-prompt.md +0 -0
  93. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/pilot-kit/rubric-template.md +0 -0
  94. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/reference/configuration.md +0 -0
  95. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/reference/git-bindings.md +0 -0
  96. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/reference/operations.md +0 -0
  97. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/reference/releasing.md +0 -0
  98. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/reference/stability.md +0 -0
  99. {sidegraph-0.17.2 → sidegraph-0.18.0}/docs/whitepaper/index.md +0 -0
  100. {sidegraph-0.17.2 → sidegraph-0.18.0}/index.js +0 -0
  101. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/.mcp.json +0 -0
  102. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/codex/hooks.json +0 -0
  103. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/codex/mcp.json +0 -0
  104. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/hooks/hooks.json +0 -0
  105. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
  106. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
  107. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/compact/SKILL.md +0 -0
  108. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/compact/agents/openai.yaml +0 -0
  109. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
  110. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
  111. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
  112. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
  113. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/health-check/SKILL.md +0 -0
  114. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/health-check/agents/openai.yaml +0 -0
  115. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/health-check/scripts/collect.py +0 -0
  116. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
  117. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
  118. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
  119. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
  120. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
  121. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
  122. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
  123. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
  124. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
  125. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
  126. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
  127. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
  128. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
  129. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
  130. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
  131. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/stats/agents/openai.yaml +0 -0
  132. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
  133. {sidegraph-0.17.2 → sidegraph-0.18.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
  134. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/adr.py +0 -0
  135. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/adr_cli.py +0 -0
  136. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/adr_files.py +0 -0
  137. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/adr_identity.py +0 -0
  138. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/anchoring.py +0 -0
  139. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bash_paths.py +0 -0
  140. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/__init__.py +0 -0
  141. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/apply.py +0 -0
  142. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/catalog.py +0 -0
  143. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/cli.py +0 -0
  144. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/integrations.py +0 -0
  145. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/model.py +0 -0
  146. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/planner.py +0 -0
  147. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/proof.py +0 -0
  148. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/review.py +0 -0
  149. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/bootstrap/scan.py +0 -0
  150. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/capture.py +0 -0
  151. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/config.py +0 -0
  152. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/delivery.py +0 -0
  153. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/doc_import.py +0 -0
  154. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/doctor.py +0 -0
  155. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/domain_snapshot.py +0 -0
  156. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/domains.py +0 -0
  157. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/drift_checks.py +0 -0
  158. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/engine/__init__.py +0 -0
  159. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/engine/rationale.py +0 -0
  160. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/engine/reader.py +0 -0
  161. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/freshness.py +0 -0
  162. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/gitenv.py +0 -0
  163. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/gitio.py +0 -0
  164. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/host/__init__.py +0 -0
  165. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/host/claude_settings.py +0 -0
  166. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/host/diagnostics.py +0 -0
  167. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/host/hooks.py +0 -0
  168. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/host/launch.py +0 -0
  169. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/host/mcp_entry.py +0 -0
  170. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/host/session_identity.py +0 -0
  171. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/host/subagent.py +0 -0
  172. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/hot_index.py +0 -0
  173. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/importer.py +0 -0
  174. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/input_limits.py +0 -0
  175. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/maintenance.py +0 -0
  176. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/maintenance_clock.py +0 -0
  177. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/migrate.py +0 -0
  178. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/nearest_anchored.py +0 -0
  179. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/okf.py +0 -0
  180. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/profiles.py +0 -0
  181. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/redaction_scan.py +0 -0
  182. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/redaction_tokens.py +0 -0
  183. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/schema.py +0 -0
  184. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/seed_ladder.py +0 -0
  185. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/server.py +0 -0
  186. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/stats/__init__.py +0 -0
  187. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/stats/model.py +0 -0
  188. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/stats/render.py +0 -0
  189. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/store.py +0 -0
  190. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/store_format.py +0 -0
  191. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/store_rules.py +0 -0
  192. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/store_view.py +0 -0
  193. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/sync.py +0 -0
  194. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/text_paths.py +0 -0
  195. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/tool_rate_limit.py +0 -0
  196. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/validation_errors.py +0 -0
  197. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/verify.py +0 -0
  198. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/viz/__init__.py +0 -0
  199. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
  200. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/viz/model.py +0 -0
  201. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/viz/render.py +0 -0
  202. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/viz/template.html +0 -0
  203. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/worktree_seeds.py +0 -0
  204. {sidegraph-0.17.2 → sidegraph-0.18.0}/src/sidegraph/write_boundary.py +0 -0
  205. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/__init__.py +0 -0
  206. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/conftest.py +0 -0
  207. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/drift_checks_support.py +0 -0
  208. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bitfinex_slice.json +0 -0
  209. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
  210. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
  211. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
  212. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
  213. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
  214. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/graph.json +0 -0
  215. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
  216. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
  217. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
  218. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
  219. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
  220. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
  221. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
  222. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
  223. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
  224. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
  225. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
  226. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
  227. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
  228. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
  229. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
  230. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
  231. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
  232. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
  233. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
  234. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
  235. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
  236. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
  237. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
  238. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
  239. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/design.md +0 -0
  240. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
  241. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
  242. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
  243. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
  244. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
  245. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
  246. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
  247. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
  248. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
  249. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
  250. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
  251. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
  252. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
  253. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
  254. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
  255. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/member_names_python_graph.json +0 -0
  256. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/member_names_swift_graph.json +0 -0
  257. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/fixtures/mini_graph.json +0 -0
  258. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/graph_fixtures.py +0 -0
  259. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/graph_repo_support.py +0 -0
  260. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/membership_support.py +0 -0
  261. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/moved_adoption_support.py +0 -0
  262. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/opencode_plugin_runner.mjs +0 -0
  263. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/snapshot_support.py +0 -0
  264. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/store_format2_support.py +0 -0
  265. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/store_non_file_support.py +0 -0
  266. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/store_record_support.py +0 -0
  267. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_adr.py +0 -0
  268. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_adr_files.py +0 -0
  269. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_adr_identity.py +0 -0
  270. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_agent_brief_manifests.py +0 -0
  271. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_anchor_descriptor.py +0 -0
  272. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_anchor_paths.py +0 -0
  273. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_anchoring.py +0 -0
  274. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_anchoring_mapping_refresh.py +0 -0
  275. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_anchoring_membership.py +0 -0
  276. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bash_paths.py +0 -0
  277. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_batch_panel_fixes.py +0 -0
  278. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_apply.py +0 -0
  279. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_catalog.py +0 -0
  280. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_cli.py +0 -0
  281. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_descriptor_cleanup.py +0 -0
  282. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_integrations.py +0 -0
  283. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_model.py +0 -0
  284. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_planner.py +0 -0
  285. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_proof.py +0 -0
  286. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_review.py +0 -0
  287. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_scan.py +0 -0
  288. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_scan_regular.py +0 -0
  289. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_bootstrap_unanchored.py +0 -0
  290. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_capture_auto_accept.py +0 -0
  291. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_capture_facts.py +0 -0
  292. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_capture_initiative.py +0 -0
  293. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_capture_integration.py +0 -0
  294. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_capture_neighbors.py +0 -0
  295. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_capture_propose.py +0 -0
  296. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_capture_redact.py +0 -0
  297. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_adr.py +0 -0
  298. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_compact.py +0 -0
  299. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_compact_format2.py +0 -0
  300. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_doctor.py +0 -0
  301. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_domains.py +0 -0
  302. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_domains_snapshot.py +0 -0
  303. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_graph_paths.py +0 -0
  304. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_import.py +0 -0
  305. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_init.py +0 -0
  306. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_init_hooks.py +0 -0
  307. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_okf.py +0 -0
  308. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_ratify.py +0 -0
  309. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_ratify_facts.py +0 -0
  310. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_stats.py +0 -0
  311. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_store_precedence.py +0 -0
  312. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_sync.py +0 -0
  313. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_sync_check.py +0 -0
  314. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_unreadable_paths.py +0 -0
  315. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_cli_viz.py +0 -0
  316. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_codex_plugin.py +0 -0
  317. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_command_windows.py +0 -0
  318. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_community_baseline.py +0 -0
  319. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_compact_skill.py +0 -0
  320. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_config.py +0 -0
  321. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_config_ancestor_lookup.py +0 -0
  322. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_config_borrowed_graph.py +0 -0
  323. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_corpus_expected_renders.py +0 -0
  324. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_corpus_self_corpus.py +0 -0
  325. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_coverage_telemetry_e2e.py +0 -0
  326. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_delivery_evidence.py +0 -0
  327. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_delivery_stats.py +0 -0
  328. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_delivery_surfaces.py +0 -0
  329. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_digest_integrity.py +0 -0
  330. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doc_corpus_integration.py +0 -0
  331. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doc_import.py +0 -0
  332. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_docs_claims.py +0 -0
  333. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor.py +0 -0
  334. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_auto_share.py +0 -0
  335. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_code_drift.py +0 -0
  336. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_dangling_supports.py +0 -0
  337. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_duplicate_entity.py +0 -0
  338. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
  339. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_graph_stale.py +0 -0
  340. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_integrity.py +0 -0
  341. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_never_surfaced.py +0 -0
  342. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_record_identity.py +0 -0
  343. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_scan.py +0 -0
  344. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_stale_instructions.py +0 -0
  345. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_unhashable_payload.py +0 -0
  346. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_doctor_unratified_accept.py +0 -0
  347. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_domain_seed_names.py +0 -0
  348. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_domain_snapshot_format.py +0 -0
  349. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_domain_snapshot_notices.py +0 -0
  350. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_domains.py +0 -0
  351. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_drift_checks.py +0 -0
  352. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_engine_build.py +0 -0
  353. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_entity_duplicate_resolution.py +0 -0
  354. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_entity_get_or_create_race.py +0 -0
  355. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_entity_twins.py +0 -0
  356. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_entry_point_arguments.py +0 -0
  357. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_env_isolation.py +0 -0
  358. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_fact_reachability_gate.py +0 -0
  359. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_file_bound_retrieval.py +0 -0
  360. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_flow_profile.py +0 -0
  361. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_format2_notices.py +0 -0
  362. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_git_bindings_blame.py +0 -0
  363. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_git_bindings_hook.py +0 -0
  364. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_git_bindings_provenance.py +0 -0
  365. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_git_env.py +0 -0
  366. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_git_output_utf8.py +0 -0
  367. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_graph_freshness.py +0 -0
  368. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_graphify_pin.py +0 -0
  369. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_health_check_skill.py +0 -0
  370. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hook_body_compaction.py +0 -0
  371. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hook_contention.py +0 -0
  372. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hook_failure_diagnostics.py +0 -0
  373. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hook_payload_encoding.py +0 -0
  374. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hook_showings.py +0 -0
  375. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hook_spawn_guard.py +0 -0
  376. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_agent_brief.py +0 -0
  377. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_agent_state.py +0 -0
  378. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_borrowed_graph.py +0 -0
  379. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_claude_settings.py +0 -0
  380. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_drift_nudge.py +0 -0
  381. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_integrity.py +0 -0
  382. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_launch.py +0 -0
  383. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_pretool.py +0 -0
  384. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_pretool_records.py +0 -0
  385. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_session_key.py +0 -0
  386. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_session_start.py +0 -0
  387. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_session_start_concurrent.py +0 -0
  388. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_stop.py +0 -0
  389. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_subagent_start.py +0 -0
  390. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_subdirectory_launch.py +0 -0
  391. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_touch_events.py +0 -0
  392. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_host_wiring_checks.py +0 -0
  393. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hot_index.py +0 -0
  394. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hot_index_facts.py +0 -0
  395. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hot_index_hook.py +0 -0
  396. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_hot_path_imports.py +0 -0
  397. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_import_dry_run_preview.py +0 -0
  398. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_importer.py +0 -0
  399. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_index_journal_mode.py +0 -0
  400. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_integrity.py +0 -0
  401. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_integrity_engine_version.py +0 -0
  402. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_integrity_replay.py +0 -0
  403. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_integrity_stranded.py +0 -0
  404. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_lazy_root.py +0 -0
  405. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_maintenance_clock.py +0 -0
  406. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_maintenance_dry_run_parity.py +0 -0
  407. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_maintenance_plan.py +0 -0
  408. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_maintenance_publish.py +0 -0
  409. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_mcp_entry_ratify_policy.py +0 -0
  410. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_mcp_entry_repo_root.py +0 -0
  411. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_member_anchor_wiring.py +0 -0
  412. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_merge_matrix_format2.py +0 -0
  413. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_migrate.py +0 -0
  414. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_mind_model_additive_fields.py +0 -0
  415. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_muse_plugin.py +0 -0
  416. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_nearest_anchored.py +0 -0
  417. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_okf.py +0 -0
  418. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_opencode_plugin.py +0 -0
  419. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_openspec_profile.py +0 -0
  420. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_pathless_descriptor_adoption.py +0 -0
  421. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
  422. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_portable_json.py +0 -0
  423. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_private_tests_isolation.py +0 -0
  424. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_proposal_lifecycle.py +0 -0
  425. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_public_hook_launch.py +0 -0
  426. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_ratify_listing_gone_dark.py +0 -0
  427. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_ratify_policy.py +0 -0
  428. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_rationale_compatibility.py +0 -0
  429. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_community_labels.py +0 -0
  430. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_doc_nodes.py +0 -0
  431. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_engine_version.py +0 -0
  432. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_file_labels.py +0 -0
  433. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_graph.py +0 -0
  434. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_integration.py +0 -0
  435. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_label_conventions.py +0 -0
  436. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_member_name_lookup.py +0 -0
  437. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_member_names.py +0 -0
  438. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_nodes_in_file.py +0 -0
  439. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_perf.py +0 -0
  440. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_rationale.py +0 -0
  441. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_read.py +0 -0
  442. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_resolve.py +0 -0
  443. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_stub_collapse.py +0 -0
  444. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_subdir_mismatch.py +0 -0
  445. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_type_split.py +0 -0
  446. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_reader_version.py +0 -0
  447. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_readers_format2.py +0 -0
  448. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_rebuild_instruction.py +0 -0
  449. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_redaction_scan.py +0 -0
  450. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_redaction_seeded.py +0 -0
  451. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_redaction_tokens.py +0 -0
  452. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_repo_relative_paths_portable.py +0 -0
  453. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_repoint_integration.py +0 -0
  454. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_budget_counters.py +0 -0
  455. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_context.py +0 -0
  456. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_drift_marker.py +0 -0
  457. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_drilldown.py +0 -0
  458. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_facts.py +0 -0
  459. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_integration.py +0 -0
  460. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_membership_generations.py +0 -0
  461. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_membership_index.py +0 -0
  462. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_rank.py +0 -0
  463. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_seeds.py +0 -0
  464. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_shown_ids.py +0 -0
  465. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_terminal_evidence.py +0 -0
  466. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_thin_tools.py +0 -0
  467. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_toc.py +0 -0
  468. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_toptier.py +0 -0
  469. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_retrieval_unratified.py +0 -0
  470. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_schema_descriptor.py +0 -0
  471. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_schema_domain.py +0 -0
  472. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_schema_fact.py +0 -0
  473. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_capture_diagnostics.py +0 -0
  474. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_capture_limits.py +0 -0
  475. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_cli_diagnostics.py +0 -0
  476. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_doc_limits.py +0 -0
  477. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_input_limits.py +0 -0
  478. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_mcp_write_diagnostics.py +0 -0
  479. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_numeric_enums.py +0 -0
  480. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_python_shapes.py +0 -0
  481. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_redaction_cursor.py +0 -0
  482. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_validation_errors.py +0 -0
  483. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_security_write_boundary.py +0 -0
  484. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_seed_ladder.py +0 -0
  485. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_seed_paths_portable.py +0 -0
  486. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_add_anchors.py +0 -0
  487. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_anchoring.py +0 -0
  488. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_annotations.py +0 -0
  489. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_argument_names.py +0 -0
  490. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_borrowed_graph.py +0 -0
  491. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_capture.py +0 -0
  492. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_commit_hint.py +0 -0
  493. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_coverage_events.py +0 -0
  494. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_decision_listing.py +0 -0
  495. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_domains.py +0 -0
  496. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_drilldown.py +0 -0
  497. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_facts.py +0 -0
  498. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_find_entity.py +0 -0
  499. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_get_store.py +0 -0
  500. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_get_task_context.py +0 -0
  501. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_graph_freshness.py +0 -0
  502. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_graph_path.py +0 -0
  503. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_import.py +0 -0
  504. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_invocation_policy.py +0 -0
  505. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_mcp_smoke.py +0 -0
  506. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_nearest_anchored.py +0 -0
  507. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_prewrite_anchor_validation.py +0 -0
  508. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_ratify_facts.py +0 -0
  509. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_record_types.py +0 -0
  510. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_redaction.py +0 -0
  511. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_refresh.py +0 -0
  512. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_render_events.py +0 -0
  513. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_result_contract.py +0 -0
  514. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_supersede.py +0 -0
  515. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_sync_anchors.py +0 -0
  516. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_telemetry.py +0 -0
  517. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_thin_tools.py +0 -0
  518. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_tolerant_seeds.py +0 -0
  519. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_server_verify.py +0 -0
  520. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_session_attribution.py +0 -0
  521. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_skill_frontmatter.py +0 -0
  522. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_stats_graph.py +0 -0
  523. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_stats_health.py +0 -0
  524. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_stats_model.py +0 -0
  525. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_stats_render.py +0 -0
  526. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_stats_skill.py +0 -0
  527. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_stats_snapshot.py +0 -0
  528. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_stop_hot_path.py +0 -0
  529. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_stop_rearm.py +0 -0
  530. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store.py +0 -0
  531. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_agent_state.py +0 -0
  532. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
  533. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_bad_file.py +0 -0
  534. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_binding_index.py +0 -0
  535. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_canonical_stat.py +0 -0
  536. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_compact.py +0 -0
  537. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_coverage_telemetry.py +0 -0
  538. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_cross_process_mutations.py +0 -0
  539. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_derived_community.py +0 -0
  540. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_domain_members.py +0 -0
  541. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_domains.py +0 -0
  542. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_entities.py +0 -0
  543. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_fact_cascade.py +0 -0
  544. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_facts.py +0 -0
  545. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_file_anchor_names.py +0 -0
  546. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_format.py +0 -0
  547. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_format2_load.py +0 -0
  548. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_format2_marker.py +0 -0
  549. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_format2_writes.py +0 -0
  550. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_git_root_symlink.py +0 -0
  551. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_inventory.py +0 -0
  552. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_meta.py +0 -0
  553. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_migration.py +0 -0
  554. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_mutation_guard.py +0 -0
  555. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_mutation_immediate.py +0 -0
  556. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_non_file_entries.py +0 -0
  557. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
  558. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_persistence.py +0 -0
  559. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_ratification.py +0 -0
  560. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_rebuild_atomicity.py +0 -0
  561. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_record_identity.py +0 -0
  562. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_record_types.py +0 -0
  563. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_render_events.py +0 -0
  564. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_requirement.py +0 -0
  565. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_retrieval.py +0 -0
  566. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_rules.py +0 -0
  567. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_slug_conflicts.py +0 -0
  568. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_snapshot_wiring.py +0 -0
  569. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_stamping_marker.py +0 -0
  570. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_symlinks.py +0 -0
  571. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_telemetry.py +0 -0
  572. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_threading.py +0 -0
  573. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_tmp_sweep_age.py +0 -0
  574. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_store_update_meta_if.py +0 -0
  575. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_subagent_start_manifests.py +0 -0
  576. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_subprocess_text_encoding.py +0 -0
  577. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_canonical_writes.py +0 -0
  578. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_clean.py +0 -0
  579. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_domains.py +0 -0
  580. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_drift_cache.py +0 -0
  581. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_fresh_clone.py +0 -0
  582. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_integration.py +0 -0
  583. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_membership.py +0 -0
  584. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_moved_adoption.py +0 -0
  585. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_rebind.py +0 -0
  586. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_repoint.py +0 -0
  587. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_report_has_findings.py +0 -0
  588. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_run.py +0 -0
  589. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_snapshot_membership.py +0 -0
  590. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_toc_cache.py +0 -0
  591. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_volatile_heal.py +0 -0
  592. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_sync_wiring.py +0 -0
  593. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_telemetry_retention.py +0 -0
  594. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_text_paths.py +0 -0
  595. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_verify_domain_snapshot.py +0 -0
  596. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_verify_format2_against.py +0 -0
  597. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_verify_format2_snapshot.py +0 -0
  598. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_verify_git_framing.py +0 -0
  599. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_verify_git_revisions.py +0 -0
  600. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_verify_git_stdin.py +0 -0
  601. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_verify_snapshot.py +0 -0
  602. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_verify_transitions.py +0 -0
  603. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_viz_asset_packaged.py +0 -0
  604. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_viz_model.py +0 -0
  605. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_viz_render_html.py +0 -0
  606. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_viz_render_json.py +0 -0
  607. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/test_worktree_seeds.py +0 -0
  608. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/wheel_server_trace.py +0 -0
  609. {sidegraph-0.17.2 → sidegraph-0.18.0}/tests/wheel_smoke.py +0 -0
  610. {sidegraph-0.17.2 → sidegraph-0.18.0}/tools/check_no_session_links.py +0 -0
@@ -180,10 +180,13 @@ jobs:
180
180
  - name: Test portable core and MCP contracts
181
181
  shell: pwsh
182
182
  run: |
183
- # The wheel-smoke tests are release-only (tests/private); the public snapshot has no copy.
183
+ # Private acceptance files are absent from the public snapshot.
184
184
  $privateTests = @()
185
185
  if (Test-Path "tests/private/test_installed_wheel_smoke.py") {
186
- $privateTests = @("tests/private/test_installed_wheel_smoke.py")
186
+ $privateTests += "tests/private/test_installed_wheel_smoke.py"
187
+ }
188
+ if (Test-Path "tests/private/test_older_reader_native.py") {
189
+ $privateTests += "tests/private/test_older_reader_native.py"
187
190
  }
188
191
  uv run pytest -q --junitxml="$env:RUNNER_TEMP/windows-core.xml" `
189
192
  tests/test_store_mutation_guard.py `
@@ -195,12 +198,14 @@ jobs:
195
198
  tests/test_verify_format2_snapshot.py `
196
199
  tests/test_store_format.py tests/test_store_rules.py `
197
200
  tests/test_maintenance_publish.py tests/test_migrate.py `
201
+ tests/test_store_junctions.py tests/test_format2_windows.py `
198
202
  tests/test_repo_relative_paths_portable.py `
199
203
  tests/test_command_windows.py `
200
204
  tests/test_hook_payload_encoding.py tests/test_hook_failure_diagnostics.py `
201
205
  tests/test_hot_index_facts.py `
202
206
  tests/test_delivery_evidence.py tests/test_delivery_stats.py tests/test_delivery_surfaces.py `
203
207
  tests/test_git_output_utf8.py `
208
+ tests/test_githooks_atomic_lock.py::test_windows_pid_probe_is_never_a_signal_from_python `
204
209
  tests/test_health_check_skill.py `
205
210
  $privateTests
206
211
  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.18.0] — 2026-10-26
11
+
12
+ ### Changed
13
+
14
+ - `get_task_context` and `query_decisions` show at most 5 lines of related memory reached by
15
+ expansion. Each line has a short choice snippet and the record's id. The rest are counted
16
+ in one closing `- (+N more related not shown: …)` line. Global-scope rules and a seed's
17
+ superseded one-liners are not capped.
18
+
19
+ ### Fixed
20
+
21
+ - Internal Windows directory junctions are refused by the store's link guard, including
22
+ junctions added before maintenance. Deliberately linked store roots remain supported.
23
+
24
+ ### Tests
25
+
26
+ - Native Windows CI exercises packed-store migration, edits, compaction, Git checkout under
27
+ both autocrlf settings, long paths, busy files, case aliases and older-reader refusal.
28
+
29
+ ## [0.17.3] — 2026-10-26
30
+
31
+ ### Fixed
32
+
33
+ - Graph refresh hooks acquire both the runner lock and stale-breaker gate with exclusive
34
+ shell PID files. Concurrent hooks remain serialized on systems whose external `mkdir`
35
+ can report success to two racing callers, while live legacy directory locks are respected.
36
+ - Installer cleanup coordinates with the same breaker gate and preserves a lock whose owner
37
+ changed during its PID check. Optional native-lock failures no longer prevent publishing
38
+ an updated helper, and a failed gate PID write no longer leaves a permanent gate.
39
+ - Doctor detects the complete older directory-lock helper; plain `sidegraph-init` repairs
40
+ it while keeping hook bytes and the recorded choice. Automatic detection conservatively
41
+ preserves unfamiliar scripts and quoted examples. Run `sidegraph-init` after upgrading
42
+ in each clone that uses the old helper.
43
+ - Native Windows installer cleanup leaves PID-bearing locks untouched, instead of using
44
+ Python signal probes on process ids from a potentially different POSIX-shell namespace.
45
+
10
46
  ## [0.17.2] — 2026-10-25
11
47
 
12
48
  ### Fixed
@@ -13,7 +13,7 @@ task-aware retrieval + decision memory riding on the engine's entity graph.
13
13
  continuing participant in the project. A core feature must preserve, organize, or deliver
14
14
  accumulated project understanding. Document search by itself is not the product.
15
15
 
16
- Sidegraph is pre-1.0 (v0.17.2) — the full loop (capture, ratification, mistakes-first
16
+ Sidegraph is pre-1.0 (v0.18.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.17.2
3
+ Version: 0.18.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
@@ -250,11 +250,18 @@ unrelated question. The render is tiered instead:
250
250
  clipped to ~1200 characters, plus `rejected` and `consequences` (when populated) each
251
251
  clipped to ~400 characters, rendered as `"(context: ...)"`/`"(rejected: ...)"`/
252
252
  `"(consequences: ...)"` suffixes.
253
- - **Related tier** (`TaskContext.related` — bucket C/D and superseded one-liners): the
254
- original tight one-liner — `choice` clipped to ~240 characters, title + snippet only, no
255
- `context`/`rejected`/`consequences` at all, regardless of whether those fields are
256
- populated. This is also what stops an off-topic decision's `rejected`/`consequences` from
257
- repeating across unrelated questions — a related entry never renders them.
253
+ - **Related tier** (`TaskContext.related` — bucket C/D and superseded one-liners): a
254
+ short one-liner with no `context`/`rejected`/`consequences` and no inline evidence,
255
+ regardless of whether those fields are populated. This is also what stops an off-topic
256
+ decision's `rejected`/`consequences` from repeating across unrelated questions — a
257
+ related entry never renders them. Records reached through community, domain, peripheral
258
+ or guessed-seed expansion show at most **5** lines, each with `choice` clipped to ~80
259
+ characters and the record's `(id: …)` so it can be expanded with
260
+ `retrieve_decisions(ids=[…])`; any further ones are counted in one closing
261
+ `- (+N more related not shown: …)` line instead of rendered. Most of these records were
262
+ measured off-task for the task at hand. Two kinds stay outside that cap and keep the
263
+ plain one-liner (`choice` clipped to ~240 characters, no id): `scope: global` decisions,
264
+ which are repo-wide rules, and the seed's own superseded one-liners, which are its history.
258
265
 
259
266
  Every clip cuts at a word boundary with a trailing ellipsis. The one exception is a single unbroken token longer than the limit (a long identifier or URL), which is cut hard at the limit. The per-field
260
267
  clips are applied *before* the `memory_chars` check, not a bypass of it: a single
@@ -291,7 +298,7 @@ already on the line (the `(id: …)` suffix these tiers carry).
291
298
 
292
299
  Whenever at least one marker renders, one fixed legend line is appended to the context
293
300
  (and `drill_down` returns it as a separate `"legend"` key) explaining exactly that. The
294
- related tight tier never carries the marker — no id, no supersede consumer there. Marker
301
+ related tight tier never carries the marker, even on the capped lines that show an id. Marker
295
302
  freshness rides a store-meta cache refreshed by the SessionStart/Stop hooks
296
303
  (`sync.refresh_code_drift_cache`, one bounded git scan); records superseded mid-session are
297
304
  filtered out at read time, so a marker never outlives its record's liveness. Only
@@ -200,8 +200,9 @@ Proposed records use the final quarantine block instead of the accepted sections
200
200
  A `Fact` you attached to a decision (its own `facts` list — see
201
201
  [`guides/capturing-decisions.md#facts-the-evidence-layer`](capturing-decisions.md#facts-the-evidence-layer))
202
202
  rides that decision's line after both records are accepted: the moment an accepted decision is
203
- rendered in `## ⚠ Known mistakes & gotchas`, `## Decisions`, or `## Related`, its accepted
204
- supporting facts render right under it, one indented line each. A proposed fact is collected
203
+ rendered in `## ⚠ Known mistakes & gotchas`, `## Decisions`, or as a `scope: global` line in
204
+ `## Related`, its accepted supporting facts render right under it, one indented line each. The
205
+ other `## Related` lines are short capped one-liners and carry no evidence. A proposed fact is collected
205
206
  for `## Unratified proposals` instead. The one exception:
206
207
  the `~ tried, reverted 2026-01: ...` superseded one-liners also shown under `## Related` never
207
208
  get evidence — a reverted decision's evidence isn't useful at that tight, unbudgeted-for-detail
@@ -222,8 +222,11 @@ entity file is skipped, an anchor to the same name mints a second entity; once t
222
222
 
223
223
  ### refresh-helper-outdated
224
224
 
225
- A git hook runs a graph refresh helper that starts Graphify without `GRAPHIFY_NO_AUTO_REFRESH=1`
226
- (an older Sidegraph wrote it). Graphify 0.9.87 and later refresh the agent skills they installed,
225
+ A git hook runs an older graph refresh helper that uses directory-based locking, or starts
226
+ Graphify without `GRAPHIFY_NO_AUTO_REFRESH=1`.
227
+ The directory lock can admit overlapping rebuilds with uutils `mkdir`; the replacement uses
228
+ exclusive PID files for both the runner lock and the stale-breaker gate.
229
+ Graphify 0.9.87 and later refresh the agent skills they installed,
227
230
  such as `~/.claude/skills/graphify/`, on the first run after a Graphify upgrade unless that
228
231
  variable is set. One hook that runs the helper is enough for the check to fire, and a recorded "no"
229
232
  does not silence it. Run `sidegraph-init` with no flag: it rewrites the helper and keeps your
@@ -242,13 +242,25 @@ the `/graphify` skill's `--update` form).
242
242
  [above](#linked-worktrees-read-the-main-checkouts-graph)), so a commit in one does nothing.
243
243
  Rebuilding there as well costs about 18 MB and 43 s for a cold build on one field corpus with
244
244
  25 worktrees, and agents commit in worktrees constantly.
245
- - **In the background, one at a time.** Git never waits for the rebuild. A lock directory keeps
245
+ - **In the background, one at a time.** Git never waits for the rebuild. An exclusively created PID file keeps
246
246
  one rebuild running; a hook that fires while it runs makes it go once more when it finishes, so
247
247
  the graph never settles on a tree older than the last request. A lock left by a job that died
248
248
  is detected and cleared: by its pid, or, when the job died before writing one (a full disk, a
249
- quota), by its age, ten minutes. `sidegraph-init --hooks` clears such a lock at once. One risk
249
+ quota), by its age, ten minutes. Re-running `sidegraph-init --hooks` refreshes the helper and clears a dead lock;
250
+ a fresh lock without a PID is kept until the ten-minute grace period expires. One risk
250
251
  remains: after a reboot a pid can belong to a live, unrelated process, and the hook then waits
251
252
  until that process exits.
253
+ Plain `sidegraph-init` also repairs an outdated helper in use, keeping the recorded choice.
254
+ Older helpers used lock directories; the new helper respects a live old runner and can
255
+ recover its stale directory. Both the lock and the stale-breaker gate now use shell
256
+ exclusive creation, so locking does not depend on external `mkdir`.
257
+ Installer cleanup takes the same breaker gate before removing a dead runner lock. A small
258
+ native OS lock on `sidegraph-graph-refresh.repair` serializes installers while they recover
259
+ a dead gate; the coordination file stays in the common git directory to keep a stable inode.
260
+ Where native locks are unsupported, helper publication still proceeds and optional installer
261
+ cleanup is skipped. On Windows, PID-bearing locks are left to the POSIX helper to recover,
262
+ because its PIDs need not be native Windows PIDs. Installing or repairing a helper does not
263
+ itself start a rebuild.
252
264
  - **Where the output goes.** The last rebuild's output is `sidegraph-graph-refresh.log` in the
253
265
  common git directory (`.git/` in a normal clone).
254
266
  - **No `sidegraph-sync` in the hook.** The next memory call notices the new graph version and
@@ -1562,7 +1562,7 @@ plain-text line):
1562
1562
  | `orphaned-record` | an open (`proposed`/`accepted`) decision or fact whose every Tier-2 (leaf) anchor is `orphaned`, so retrieval reaches it only through its file or domain; one finding per record, at its canonical file, naming how many leaf anchors it has. Statuses come from `index.db` and read "as of last sync", so the check is skipped while the statuses are not computed for the current graph (see *Skipped checks* below; run `sidegraph-sync`). It is the record-level view of `orphaned-binding` (any record it flags has orphaned bindings, which that code already reports), so it adds no new reason for `--check` to exit `2`. The fix is to rebuild a stale graph, then `sidegraph-sync`; otherwise re-anchor the record with `add_anchors` or the `heal-anchors` skill, or supersede it if the code is gone. Needs a usable `index.db` |
1563
1563
  | `store-uncommitted` | store files nobody committed for at least 24 hours: records, bindings, entities, an archive segment or the root files (`format`, `.gitignore`, `stamping_live_since`) that `git status` shows as new, modified or deleted. One finding, at the store path, naming how many files there are, how old the oldest is and what kinds they are (a new `archive/` segment beside deleted records reads as "a compaction"). A new record or entity file is aged by its ULID name, which a `git stash` cannot rewrite; a modified file, or anything under `bindings/`, by its modification time; a deleted file by its subdirectory's, a lower bound. Entries fully staged in the index are not counted, so a `--check` run in a pre-commit hook does not block the commit that fixes the problem. **`--check` exits `2` on it.** The fix is to commit the store in a pull request. Silent, and not run, outside a git repository, with no `git`, or when git is slower than 2 seconds |
1564
1564
  | `plugin-off-in-subdirectories` | Claude Code sessions started below the repository root run without the Sidegraph plugin. Claude Code reads the project settings (`.claude/settings.json`) of the launch directory only, and the repository root's `.claude/settings.local.json` for every launch inside the repository; `enabledPlugins` merges key by key (user settings, then project, then local). Two problems, reported as up to two findings: (a) the plugin is enabled only in the root's `.claude/settings.json`, so every directory below the root without its own enabling settings runs without it (reported at that file); (b) nested directories with a `.claude/settings.json` or `.claude/settings.local.json` of their own that sets `enabledPlugins` and whose merge leaves the plugin off (reported at the first such directory, naming how many there are; a nested settings file without `enabledPlugins` cannot change the merge, so it is not counted). The walk covers every directory that holds a tracked file (one `git ls-files` over the index, a few tens of milliseconds on a large repository) and looks for the two settings files in each directly, so a repository that ignores `.claude/` is covered. User settings are read from `$CLAUDE_CONFIG_DIR/settings.json` when that variable is set and non-empty, else from `~/.claude/settings.json`. Silent when the plugin is not enabled for a launch at the root at all, and not run outside a git repository, with no `git`, or when `git ls-files` takes longer than 5 seconds. **`--check` exits `2` on it**, like any finding; enabling the plugin at user scope or in the root's `.claude/settings.local.json` clears it |
1565
- | `refresh-helper-outdated` | a git hook runs a graph refresh helper whose Graphify line lacks `GRAPHIFY_NO_AUTO_REFRESH=1` (an older Sidegraph wrote it), so Graphify 0.9.87 and later can rewrite the agent skills they installed on the first rebuild after an upgrade. Advisory, per clone (the helper lives in `.git/hooks`); **`--check` exits `2` on it**, like any finding. One hook that runs the helper is enough, and a recorded decline does not silence it. The fix is `sidegraph-init` (no flag), which refreshes the helper and keeps a recorded hook choice. Silent outside a git repository, with no helper, or when no hook runs it |
1565
+ | `refresh-helper-outdated` | a git hook runs an older graph refresh helper that uses directory-based locking (unsafe with uutils `mkdir`), or whose Graphify line lacks `GRAPHIFY_NO_AUTO_REFRESH=1` (Graphify 0.9.87 and later can rewrite installed agent skills after an upgrade). Advisory, per clone (the helper lives in `.git/hooks`); **`--check` exits `2` on it**, like any finding. One hook that runs the helper is enough, and a recorded decline does not silence it. The fix is `sidegraph-init` (no flag), which refreshes the helper and keeps a recorded hook choice. Silent outside a git repository, with no helper, or when no hook runs it |
1566
1566
  | `engine-version` | the graph was built by a Graphify release this Sidegraph was not tested with (its `graph.graphify_version` stamp is neither absent nor in the tested set), so anchors and domains may read differently. Advisory; **`--check` exits `2` on it**, like any finding. Pin Graphify to a tested release listed under [Engine version pinning](../integrations/graphify.md#engine-version-pinning), then rebuild the graph. It also fires for a mention-edge graph (Graphify 0.9.62 or later) over a store without a minimum Sidegraph version; follow the [0.14 migration guide](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/guides/migrating-to-0.14.md). A malformed marker leaves this second case silent. Silent without a readable graph |
1567
1567
  | `store-not-migrated` | the store uses the pre-0.17 layout (a format marker below major 2) and holds at least one record of any kind (initiatives included). One finding, at the store path, naming `sidegraph-migrate` (run on the default branch, after the team checklist in the [0.17 migration guide](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/guides/migrating-to-0.17.md)) and the `sidegraph:compact` skill. Degraded; **`--check` exits `2` on it**, like any finding. Silent on an empty store and on a store that is already format 2 |
1568
1568
  | `maintenance-due` | a format-2 store that `sidegraph-compact` would tidy: more than 200 per-record files, or a legacy `archive/` segment it would delete, or a misplaced or duplicated shard line, or a stray shard file. `sidegraph-verify` does not report these; maintenance heals them. A segment kept because one of its lines is not safe to delete does not count. Advisory; **`--check` exits `2` on it**, like any finding. Run `sidegraph-compact` on the default branch. Silent on a store that is not format 2 |
@@ -402,6 +402,13 @@ raises costs only its own line.
402
402
  > installed on the first rebuild after an upgrade. Ask the user to run `sidegraph-init`,
403
403
  > which refreshes the helper and keeps their recorded hook choice; do not run it unasked.
404
404
 
405
+ A helper using the old directory-based lock is also reported: uutils `mkdir` can admit
406
+ overlapping rebuilds. `sidegraph-init` replaces it with exclusive PID-file locking while
407
+ preserving hook bytes and the recorded choice. The outdated-helper check recognizes concrete defects in simple shell helpers,
408
+ rather than comparing the whole template. It conservatively skips unfamiliar scripts with
409
+ heredocs or multiline quotes. This controls automatic defect repair; an ordinary init
410
+ that refreshes a fully installed hook still rewrites its managed helper.
411
+
405
412
  It also sends a notice for the person. See
406
413
  [`refresh-helper-outdated`](../guides/troubleshooting.md#refresh-helper-outdated).
407
414
  15. **Refresh-hook line.** When no git hook keeps the graph fresh, one line tells the model to
@@ -788,7 +788,9 @@ degrades to un-synced retrieval, never an error), resolves `files`/`entities` in
788
788
  and returns a rendered Markdown string with up to six sections — accepted mistakes (with
789
789
  accepted inline evidence facts), accepted decisions (with accepted inline evidence), accepted
790
790
  known facts (standalone), structural map, related accepted memory, and unratified proposals —
791
- under the given character budgets. See
791
+ under the given character budgets. Related memory reached by expansion shows at most 5 short
792
+ lines with ids, plus a count of the rest; see
793
+ [retrieval: two-tier rendering](../concepts/retrieval.md). See
792
794
  [retrieval: facts](../concepts/retrieval.md#facts-inline-evidence-and-the-known-facts-bucket)
793
795
  for the inline-vs-standalone split and the guarantee that facts never displace a mistake. The
794
796
  structural map omits
@@ -46,11 +46,12 @@ characters long. Every ULID qualifies. The store refuses to write a record whose
46
46
  different from its filename is not a record at all: see
47
47
  [Freshness](#freshness-absorbing-a-git-pull) for how a reload treats it.
48
48
 
49
- **Symlinks inside the store are refused.** A `Store` will not open a directory any of whose
49
+ **Symlinks and Windows junctions inside the store are refused.** A `Store` will not open a directory any of whose
50
50
  subdirectories (`decisions/`, `facts/`, `domains/`, `entities/`, `bindings/`, `initiatives/`,
51
51
  `archive/`, `verifications/`, `shards/`), store files (`format`, `stamping_live_since`,
52
52
  `domain-snapshot.json`, `.gitignore`, `.gitattributes`, `index.db`, and
53
- SQLite's `index.db-journal`, `-wal` and `-shm`) or shard files (`shards/*.shard`) is a symlink, live or dangling: a linked
53
+ SQLite's `index.db-journal`, `-wal` and `-shm`) or shard entries (`shards/*.shard`) is a symlink
54
+ (live or dangling) or Windows directory junction: a linked
54
55
  `decisions/` would send every record write to the link's target, and a linked `index.db` would
55
56
  make SQLite write there. The error names the entry (`… inside the store is a symlink`);
56
57
  replace it with a real directory or file. `sidegraph-verify` reports each such entry as
@@ -58,10 +59,29 @@ replace it with a real directory or file. `sidegraph-verify` reports each such e
58
59
  `--against` comparison until the links are removed, and its text output says so in one line.
59
60
  An `--against` ref that does not resolve, or a store outside git, is checked before the stop and
60
61
  exits `1` without reporting the links.
61
- `sidegraph-doctor` does the same and skips its advisory checks. A symlinked store **root**
62
+ `sidegraph-doctor` does the same and skips its advisory checks. Junctions use the same
63
+ `symlinked-store-entry` code and existing symlink error wording. A deliberately linked store **root**
62
64
  (`.sidegraph -> ../shared/store`) is fine: a deliberately shared store is a real use. Record
63
65
  files inside a real subdirectory are still read as they are.
64
66
 
67
+ On Windows, format-2 maintenance writes shard bytes in binary mode, avoiding Python's
68
+ newline conversion. The store's `*.shard -text` Git attribute preserves those LF bytes
69
+ across checkout under either `core.autocrlf` setting. If another application holds a shard open
70
+ without delete sharing, replacement can fail with `PermissionError`. The error propagates;
71
+ maintenance does not delete the source files it has not finished publishing. Close the other
72
+ application and rerun the operation. Filesystem path/component limits likewise remain
73
+ operational errors; use a shorter store path if the host or Git cannot handle long paths
74
+ (`core.longpaths=true` enables Git for Windows' long-path support).
75
+ That option does not guarantee every Git operation can start from a directory longer than
76
+ 260 characters. If Git refuses the store directory during migration's entry checks, the
77
+ marker and records remain unchanged; use a shorter checkout/store path and retry.
78
+
79
+ Verify each committed operation against its input commit: migration against the format-1
80
+ commit, a record edit against the migrated commit, and compaction against the commit containing
81
+ the edited hot file. A compaction comparison checks that each published body existed in its
82
+ baseline; comparing an edited, compacted body directly to a ref before the edit does not meet
83
+ that requirement.
84
+
65
85
  **A symlinked store belongs to the project that holds the link.** The code a record is anchored
66
86
  to lives in that project, so the repository Sidegraph asks about the store is the project's, not
67
87
  the one the link points into: the `provenance.commit` stamped at capture is the project's `HEAD`
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sidegraph",
3
- "version": "0.17.2",
3
+ "version": "0.18.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.17.2",
4
+ "version": "0.18.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.17.2",
3
+ "version": "0.18.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/",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "name": "sidegraph",
4
- "version": "0.17.2",
4
+ "version": "0.18.0",
5
5
  "description": "Durable decisions, facts and lessons over your code graph.",
6
6
  "compat": {
7
7
  "source": "native",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sidegraph"
3
- version = "0.17.2"
3
+ version = "0.18.0"
4
4
  description = "Own the memory, rent the graph — a durable decision/lessons layer as a sidecar over a code-graph engine."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -30,7 +30,7 @@ if TYPE_CHECKING:
30
30
  )
31
31
  from .store import Store
32
32
 
33
- __version__ = "0.17.2"
33
+ __version__ = "0.18.0"
34
34
 
35
35
  # name -> the submodule that defines it
36
36
  _LAZY = {
@@ -416,11 +416,14 @@ def _hook_graph_problem(
416
416
 
417
417
 
418
418
  def _refresh_outdated_helper(info: githooks.RepoInfo) -> bool:
419
- """Rewrite the helper alone when a hook runs it and it runs Graphify without
419
+ """Rewrite a helper in use with the old directory lock or a Graphify run without
420
420
  ``GRAPHIFY_NO_AUTO_REFRESH=1``; ``True`` when it did. The helper is per repository, so this
421
421
  holds whatever graph the store reads; the recorded choice and the hook files are not touched.
422
422
  see design/superpowers/specs/2026-10-14-graphify-upgrade-design.md (D7)"""
423
- if githooks.helper_is_current(info) is not False or not githooks.helper_in_use(info):
423
+ old_lock = githooks.helper_uses_directory_lock(info)
424
+ if (
425
+ githooks.helper_is_current(info) is not False and not old_lock
426
+ ) or not githooks.helper_in_use(info):
424
427
  return False
425
428
  graphify = shutil.which("graphify")
426
429
  try:
@@ -428,10 +431,13 @@ def _refresh_outdated_helper(info: githooks.RepoInfo) -> bool:
428
431
  except OSError as e:
429
432
  print(f"graph refresh hook: could not refresh the helper ({e})")
430
433
  return False
431
- print(
432
- "graph refresh hook: refreshed the helper, which ran Graphify without "
433
- f"{githooks.GRAPH_REBUILD_ENV}"
434
- )
434
+ if old_lock:
435
+ print("graph refresh hook: refreshed the helper, which used directory-based locking")
436
+ else:
437
+ print(
438
+ "graph refresh hook: refreshed the helper, which ran Graphify without "
439
+ f"{githooks.GRAPH_REBUILD_ENV}"
440
+ )
435
441
  return True
436
442
 
437
443