sidegraph 0.15.0__tar.gz → 0.17.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 (863) hide show
  1. sidegraph-0.17.0/.github/workflows/ci.yml +349 -0
  2. sidegraph-0.17.0/AGENTS.md +80 -0
  3. sidegraph-0.17.0/CHANGELOG.md +2414 -0
  4. sidegraph-0.17.0/CLAUDE.md +122 -0
  5. sidegraph-0.17.0/CONTRIBUTING.md +93 -0
  6. sidegraph-0.17.0/PKG-INFO +525 -0
  7. sidegraph-0.17.0/README.md +495 -0
  8. sidegraph-0.17.0/docs/README.md +65 -0
  9. sidegraph-0.17.0/docs/concepts/anchoring.md +205 -0
  10. sidegraph-0.17.0/docs/concepts/data-model.md +332 -0
  11. sidegraph-0.17.0/docs/concepts/mind-model.md +221 -0
  12. sidegraph-0.17.0/docs/concepts/retrieval.md +431 -0
  13. sidegraph-0.17.0/docs/getting-started/bootstrap.md +248 -0
  14. sidegraph-0.17.0/docs/getting-started/claude-code-setup.md +294 -0
  15. sidegraph-0.17.0/docs/getting-started/codex-setup.md +193 -0
  16. sidegraph-0.17.0/docs/getting-started/installation.md +337 -0
  17. sidegraph-0.17.0/docs/getting-started/quickstart.md +135 -0
  18. sidegraph-0.17.0/docs/guides/adr-export.md +134 -0
  19. sidegraph-0.17.0/docs/guides/capturing-decisions.md +436 -0
  20. sidegraph-0.17.0/docs/guides/ci-cd-maintenance.md +422 -0
  21. sidegraph-0.17.0/docs/guides/health-check.md +66 -0
  22. sidegraph-0.17.0/docs/guides/migrating-to-0.14.md +290 -0
  23. sidegraph-0.17.0/docs/guides/migrating-to-0.17.md +329 -0
  24. sidegraph-0.17.0/docs/guides/naming-your-domains.md +329 -0
  25. sidegraph-0.17.0/docs/guides/retrieval-in-sessions.md +300 -0
  26. sidegraph-0.17.0/docs/guides/semantic-docs.md +259 -0
  27. sidegraph-0.17.0/docs/guides/surviving-refactors.md +254 -0
  28. sidegraph-0.17.0/docs/guides/team-workflow.md +229 -0
  29. sidegraph-0.17.0/docs/guides/troubleshooting.md +457 -0
  30. sidegraph-0.17.0/docs/guides/using-0.15.md +44 -0
  31. sidegraph-0.17.0/docs/guides/using-0.16.md +47 -0
  32. sidegraph-0.17.0/docs/integrations/claude-code.md +377 -0
  33. sidegraph-0.17.0/docs/integrations/codex.md +303 -0
  34. sidegraph-0.17.0/docs/integrations/graphify.md +343 -0
  35. sidegraph-0.17.0/docs/integrations/grok.md +36 -0
  36. sidegraph-0.17.0/docs/integrations/muse.md +52 -0
  37. sidegraph-0.17.0/docs/llms.txt +76 -0
  38. sidegraph-0.17.0/docs/pilot-kit/judge-prompt.md +41 -0
  39. sidegraph-0.17.0/docs/reference/cli.md +2034 -0
  40. sidegraph-0.17.0/docs/reference/configuration.md +257 -0
  41. sidegraph-0.17.0/docs/reference/git-bindings.md +171 -0
  42. sidegraph-0.17.0/docs/reference/hooks.md +1174 -0
  43. sidegraph-0.17.0/docs/reference/mcp-tools.md +1835 -0
  44. sidegraph-0.17.0/docs/reference/operations.md +116 -0
  45. sidegraph-0.17.0/docs/reference/releasing.md +193 -0
  46. sidegraph-0.17.0/docs/reference/stability.md +88 -0
  47. sidegraph-0.17.0/docs/reference/store-format.md +1023 -0
  48. sidegraph-0.17.0/package.json +6 -0
  49. sidegraph-0.17.0/plugin/sidegraph/.claude-plugin/plugin.json +11 -0
  50. sidegraph-0.17.0/plugin/sidegraph/.codex-plugin/plugin.json +12 -0
  51. sidegraph-0.17.0/plugin/sidegraph/.muse-plugin/plugin.json +85 -0
  52. sidegraph-0.17.0/plugin/sidegraph/skills/compact/SKILL.md +63 -0
  53. sidegraph-0.17.0/plugin/sidegraph/skills/heal-anchors/SKILL.md +264 -0
  54. sidegraph-0.17.0/plugin/sidegraph/skills/health-check/SKILL.md +83 -0
  55. sidegraph-0.17.0/plugin/sidegraph/skills/health-check/scripts/collect.py +1100 -0
  56. sidegraph-0.17.0/plugin/sidegraph/skills/manage-domains/SKILL.md +156 -0
  57. sidegraph-0.17.0/plugin/sidegraph/skills/setup/agents/openai.yaml +6 -0
  58. sidegraph-0.17.0/plugin/sidegraph/skills/stats/agents/openai.yaml +6 -0
  59. sidegraph-0.17.0/pyproject.toml +126 -0
  60. sidegraph-0.17.0/src/sidegraph/__init__.py +76 -0
  61. sidegraph-0.17.0/src/sidegraph/adr.py +299 -0
  62. sidegraph-0.17.0/src/sidegraph/bootstrap/apply.py +654 -0
  63. sidegraph-0.17.0/src/sidegraph/bootstrap/catalog.py +215 -0
  64. sidegraph-0.17.0/src/sidegraph/cli.py +3393 -0
  65. sidegraph-0.17.0/src/sidegraph/doctor.py +2110 -0
  66. sidegraph-0.17.0/src/sidegraph/gitio.py +617 -0
  67. sidegraph-0.17.0/src/sidegraph/host/hooks.py +2401 -0
  68. sidegraph-0.17.0/src/sidegraph/host/subagent.py +126 -0
  69. sidegraph-0.17.0/src/sidegraph/hot_index.py +540 -0
  70. sidegraph-0.17.0/src/sidegraph/integrity.py +1581 -0
  71. sidegraph-0.17.0/src/sidegraph/maintenance.py +1387 -0
  72. sidegraph-0.17.0/src/sidegraph/maintenance_clock.py +306 -0
  73. sidegraph-0.17.0/src/sidegraph/migrate.py +474 -0
  74. sidegraph-0.17.0/src/sidegraph/nearest_anchored.py +394 -0
  75. sidegraph-0.17.0/src/sidegraph/retrieval.py +2148 -0
  76. sidegraph-0.17.0/src/sidegraph/schema.py +520 -0
  77. sidegraph-0.17.0/src/sidegraph/server.py +5748 -0
  78. sidegraph-0.17.0/src/sidegraph/stats/model.py +839 -0
  79. sidegraph-0.17.0/src/sidegraph/stats/render.py +437 -0
  80. sidegraph-0.17.0/src/sidegraph/store.py +5382 -0
  81. sidegraph-0.17.0/src/sidegraph/store_format.py +829 -0
  82. sidegraph-0.17.0/src/sidegraph/store_layout.py +814 -0
  83. sidegraph-0.17.0/src/sidegraph/store_rules.py +699 -0
  84. sidegraph-0.17.0/src/sidegraph/store_view.py +157 -0
  85. sidegraph-0.17.0/src/sidegraph/sync.py +2162 -0
  86. sidegraph-0.17.0/src/sidegraph/verify.py +2587 -0
  87. sidegraph-0.17.0/tests/bounded_listings_support.py +160 -0
  88. sidegraph-0.17.0/tests/conftest.py +214 -0
  89. sidegraph-0.17.0/tests/drift_checks_support.py +114 -0
  90. sidegraph-0.17.0/tests/githooks_support.py +414 -0
  91. sidegraph-0.17.0/tests/graph_repo_support.py +263 -0
  92. sidegraph-0.17.0/tests/membership_support.py +29 -0
  93. sidegraph-0.17.0/tests/moved_adoption_support.py +133 -0
  94. sidegraph-0.17.0/tests/store_format2_support.py +768 -0
  95. sidegraph-0.17.0/tests/store_non_file_support.py +67 -0
  96. sidegraph-0.17.0/tests/store_record_support.py +55 -0
  97. sidegraph-0.17.0/tests/test_adr.py +345 -0
  98. sidegraph-0.17.0/tests/test_anchoring_membership.py +301 -0
  99. sidegraph-0.17.0/tests/test_bash_paths.py +334 -0
  100. sidegraph-0.17.0/tests/test_bootstrap_apply.py +811 -0
  101. sidegraph-0.17.0/tests/test_bootstrap_cli.py +1624 -0
  102. sidegraph-0.17.0/tests/test_bootstrap_planner.py +511 -0
  103. sidegraph-0.17.0/tests/test_bootstrap_scan_regular.py +345 -0
  104. sidegraph-0.17.0/tests/test_bounded_listings.py +1279 -0
  105. sidegraph-0.17.0/tests/test_capture_facts.py +316 -0
  106. sidegraph-0.17.0/tests/test_capture_neighbors.py +182 -0
  107. sidegraph-0.17.0/tests/test_capture_propose.py +859 -0
  108. sidegraph-0.17.0/tests/test_cli_compact.py +300 -0
  109. sidegraph-0.17.0/tests/test_cli_compact_format2.py +458 -0
  110. sidegraph-0.17.0/tests/test_cli_domains.py +538 -0
  111. sidegraph-0.17.0/tests/test_cli_domains_snapshot.py +325 -0
  112. sidegraph-0.17.0/tests/test_cli_graph_paths.py +521 -0
  113. sidegraph-0.17.0/tests/test_cli_import.py +1876 -0
  114. sidegraph-0.17.0/tests/test_cli_init.py +621 -0
  115. sidegraph-0.17.0/tests/test_cli_init_hooks.py +564 -0
  116. sidegraph-0.17.0/tests/test_cli_okf.py +559 -0
  117. sidegraph-0.17.0/tests/test_cli_ratify.py +523 -0
  118. sidegraph-0.17.0/tests/test_cli_ratify_facts.py +104 -0
  119. sidegraph-0.17.0/tests/test_cli_stats.py +682 -0
  120. sidegraph-0.17.0/tests/test_cli_store_precedence.py +160 -0
  121. sidegraph-0.17.0/tests/test_cli_sync.py +438 -0
  122. sidegraph-0.17.0/tests/test_cli_sync_check.py +260 -0
  123. sidegraph-0.17.0/tests/test_cli_unreadable_paths.py +275 -0
  124. sidegraph-0.17.0/tests/test_codex_plugin.py +207 -0
  125. sidegraph-0.17.0/tests/test_community_baseline.py +48 -0
  126. sidegraph-0.17.0/tests/test_compact_skill.py +28 -0
  127. sidegraph-0.17.0/tests/test_config.py +271 -0
  128. sidegraph-0.17.0/tests/test_config_borrowed_graph.py +174 -0
  129. sidegraph-0.17.0/tests/test_corpus_expected_renders.py +42 -0
  130. sidegraph-0.17.0/tests/test_delivery_evidence.py +297 -0
  131. sidegraph-0.17.0/tests/test_digest_integrity.py +555 -0
  132. sidegraph-0.17.0/tests/test_doc_import.py +2881 -0
  133. sidegraph-0.17.0/tests/test_docs_claims.py +1301 -0
  134. sidegraph-0.17.0/tests/test_doctor.py +550 -0
  135. sidegraph-0.17.0/tests/test_doctor_auto_share.py +658 -0
  136. sidegraph-0.17.0/tests/test_doctor_code_drift.py +644 -0
  137. sidegraph-0.17.0/tests/test_doctor_dangling_supports.py +149 -0
  138. sidegraph-0.17.0/tests/test_doctor_graph_stale.py +90 -0
  139. sidegraph-0.17.0/tests/test_doctor_integrity.py +213 -0
  140. sidegraph-0.17.0/tests/test_doctor_scan.py +293 -0
  141. sidegraph-0.17.0/tests/test_doctor_unhashable_payload.py +165 -0
  142. sidegraph-0.17.0/tests/test_domains.py +1590 -0
  143. sidegraph-0.17.0/tests/test_drift_checks.py +579 -0
  144. sidegraph-0.17.0/tests/test_engine_build.py +170 -0
  145. sidegraph-0.17.0/tests/test_entity_get_or_create_race.py +200 -0
  146. sidegraph-0.17.0/tests/test_entity_twins.py +528 -0
  147. sidegraph-0.17.0/tests/test_entry_point_arguments.py +260 -0
  148. sidegraph-0.17.0/tests/test_env_isolation.py +53 -0
  149. sidegraph-0.17.0/tests/test_file_bound_retrieval.py +492 -0
  150. sidegraph-0.17.0/tests/test_flow_profile.py +1030 -0
  151. sidegraph-0.17.0/tests/test_format2_notices.py +289 -0
  152. sidegraph-0.17.0/tests/test_git_bindings_blame.py +272 -0
  153. sidegraph-0.17.0/tests/test_git_bindings_hook.py +574 -0
  154. sidegraph-0.17.0/tests/test_git_bindings_provenance.py +171 -0
  155. sidegraph-0.17.0/tests/test_git_output_utf8.py +214 -0
  156. sidegraph-0.17.0/tests/test_githooks.py +861 -0
  157. sidegraph-0.17.0/tests/test_graph_freshness.py +438 -0
  158. sidegraph-0.17.0/tests/test_health_check_skill.py +1122 -0
  159. sidegraph-0.17.0/tests/test_hook_contention.py +1010 -0
  160. sidegraph-0.17.0/tests/test_hook_failure_diagnostics.py +482 -0
  161. sidegraph-0.17.0/tests/test_hook_spawn_guard.py +308 -0
  162. sidegraph-0.17.0/tests/test_host_borrowed_graph.py +287 -0
  163. sidegraph-0.17.0/tests/test_host_integrity.py +1094 -0
  164. sidegraph-0.17.0/tests/test_host_launch.py +343 -0
  165. sidegraph-0.17.0/tests/test_host_pretool_records.py +861 -0
  166. sidegraph-0.17.0/tests/test_host_session_start.py +739 -0
  167. sidegraph-0.17.0/tests/test_host_stop.py +1700 -0
  168. sidegraph-0.17.0/tests/test_host_touch_events.py +298 -0
  169. sidegraph-0.17.0/tests/test_host_wiring_checks.py +939 -0
  170. sidegraph-0.17.0/tests/test_hot_index.py +908 -0
  171. sidegraph-0.17.0/tests/test_hot_index_facts.py +798 -0
  172. sidegraph-0.17.0/tests/test_index_journal_mode.py +196 -0
  173. sidegraph-0.17.0/tests/test_integrity.py +784 -0
  174. sidegraph-0.17.0/tests/test_integrity_engine_version.py +174 -0
  175. sidegraph-0.17.0/tests/test_integrity_refresh_hook.py +537 -0
  176. sidegraph-0.17.0/tests/test_integrity_replay.py +114 -0
  177. sidegraph-0.17.0/tests/test_integrity_stranded.py +874 -0
  178. sidegraph-0.17.0/tests/test_maintenance_clock.py +361 -0
  179. sidegraph-0.17.0/tests/test_maintenance_dry_run_parity.py +173 -0
  180. sidegraph-0.17.0/tests/test_maintenance_plan.py +767 -0
  181. sidegraph-0.17.0/tests/test_maintenance_publish.py +1147 -0
  182. sidegraph-0.17.0/tests/test_member_anchor_wiring.py +307 -0
  183. sidegraph-0.17.0/tests/test_merge_matrix_format2.py +721 -0
  184. sidegraph-0.17.0/tests/test_migrate.py +1128 -0
  185. sidegraph-0.17.0/tests/test_pathless_descriptor_adoption.py +489 -0
  186. sidegraph-0.17.0/tests/test_pilot_kit_corpus_fit.py +146 -0
  187. sidegraph-0.17.0/tests/test_private_tests_isolation.py +61 -0
  188. sidegraph-0.17.0/tests/test_public_hook_launch.py +625 -0
  189. sidegraph-0.17.0/tests/test_ratify_policy.py +4356 -0
  190. sidegraph-0.17.0/tests/test_reader_community_labels.py +166 -0
  191. sidegraph-0.17.0/tests/test_reader_doc_nodes.py +134 -0
  192. sidegraph-0.17.0/tests/test_reader_engine_version.py +160 -0
  193. sidegraph-0.17.0/tests/test_reader_file_labels.py +183 -0
  194. sidegraph-0.17.0/tests/test_reader_label_conventions.py +20 -0
  195. sidegraph-0.17.0/tests/test_reader_member_name_lookup.py +187 -0
  196. sidegraph-0.17.0/tests/test_reader_nodes_in_file.py +12 -0
  197. sidegraph-0.17.0/tests/test_reader_perf.py +214 -0
  198. sidegraph-0.17.0/tests/test_reader_read.py +27 -0
  199. sidegraph-0.17.0/tests/test_reader_resolve.py +129 -0
  200. sidegraph-0.17.0/tests/test_reader_stub_collapse.py +421 -0
  201. sidegraph-0.17.0/tests/test_reader_version.py +70 -0
  202. sidegraph-0.17.0/tests/test_readers_format2.py +734 -0
  203. sidegraph-0.17.0/tests/test_redaction_scan.py +157 -0
  204. sidegraph-0.17.0/tests/test_redaction_tokens.py +172 -0
  205. sidegraph-0.17.0/tests/test_retrieval_budget_counters.py +400 -0
  206. sidegraph-0.17.0/tests/test_retrieval_drilldown.py +690 -0
  207. sidegraph-0.17.0/tests/test_retrieval_facts.py +222 -0
  208. sidegraph-0.17.0/tests/test_retrieval_guessed.py +415 -0
  209. sidegraph-0.17.0/tests/test_retrieval_ids.py +204 -0
  210. sidegraph-0.17.0/tests/test_retrieval_membership_generations.py +79 -0
  211. sidegraph-0.17.0/tests/test_retrieval_rank.py +641 -0
  212. sidegraph-0.17.0/tests/test_retrieval_seeds.py +436 -0
  213. sidegraph-0.17.0/tests/test_retrieval_shown_ids.py +15 -0
  214. sidegraph-0.17.0/tests/test_retrieval_thin_tools.py +171 -0
  215. sidegraph-0.17.0/tests/test_retrieval_toc.py +501 -0
  216. sidegraph-0.17.0/tests/test_retrieval_toptier.py +123 -0
  217. sidegraph-0.17.0/tests/test_schema_descriptor.py +112 -0
  218. sidegraph-0.17.0/tests/test_security_input_limits.py +253 -0
  219. sidegraph-0.17.0/tests/test_security_numeric_enums.py +32 -0
  220. sidegraph-0.17.0/tests/test_security_python_shapes.py +47 -0
  221. sidegraph-0.17.0/tests/test_security_validation_errors.py +100 -0
  222. sidegraph-0.17.0/tests/test_security_write_boundary.py +163 -0
  223. sidegraph-0.17.0/tests/test_seed_paths_portable.py +151 -0
  224. sidegraph-0.17.0/tests/test_server_add_anchors.py +200 -0
  225. sidegraph-0.17.0/tests/test_server_anchoring.py +239 -0
  226. sidegraph-0.17.0/tests/test_server_annotations.py +86 -0
  227. sidegraph-0.17.0/tests/test_server_argument_names.py +274 -0
  228. sidegraph-0.17.0/tests/test_server_borrowed_graph.py +599 -0
  229. sidegraph-0.17.0/tests/test_server_capture.py +878 -0
  230. sidegraph-0.17.0/tests/test_server_commit_hint.py +216 -0
  231. sidegraph-0.17.0/tests/test_server_coverage_events.py +251 -0
  232. sidegraph-0.17.0/tests/test_server_decision_listing.py +796 -0
  233. sidegraph-0.17.0/tests/test_server_drilldown.py +96 -0
  234. sidegraph-0.17.0/tests/test_server_facts.py +323 -0
  235. sidegraph-0.17.0/tests/test_server_get_task_context.py +45 -0
  236. sidegraph-0.17.0/tests/test_server_graph_freshness.py +386 -0
  237. sidegraph-0.17.0/tests/test_server_mcp_smoke.py +430 -0
  238. sidegraph-0.17.0/tests/test_server_prewrite_anchor_validation.py +183 -0
  239. sidegraph-0.17.0/tests/test_server_render_events.py +349 -0
  240. sidegraph-0.17.0/tests/test_server_thin_tools.py +69 -0
  241. sidegraph-0.17.0/tests/test_server_tolerant_seeds.py +653 -0
  242. sidegraph-0.17.0/tests/test_session_attribution.py +627 -0
  243. sidegraph-0.17.0/tests/test_skill_frontmatter.py +41 -0
  244. sidegraph-0.17.0/tests/test_stats_graph.py +134 -0
  245. sidegraph-0.17.0/tests/test_stats_health.py +205 -0
  246. sidegraph-0.17.0/tests/test_stats_model.py +1668 -0
  247. sidegraph-0.17.0/tests/test_stats_render.py +1402 -0
  248. sidegraph-0.17.0/tests/test_stats_snapshot.py +162 -0
  249. sidegraph-0.17.0/tests/test_stop_rearm.py +519 -0
  250. sidegraph-0.17.0/tests/test_store.py +96 -0
  251. sidegraph-0.17.0/tests/test_store_agent_state.py +282 -0
  252. sidegraph-0.17.0/tests/test_store_bad_file.py +569 -0
  253. sidegraph-0.17.0/tests/test_store_canonical_stat.py +296 -0
  254. sidegraph-0.17.0/tests/test_store_compact.py +1298 -0
  255. sidegraph-0.17.0/tests/test_store_coverage_telemetry.py +67 -0
  256. sidegraph-0.17.0/tests/test_store_cross_process_mutations.py +281 -0
  257. sidegraph-0.17.0/tests/test_store_derived_community.py +129 -0
  258. sidegraph-0.17.0/tests/test_store_domains.py +657 -0
  259. sidegraph-0.17.0/tests/test_store_format.py +257 -0
  260. sidegraph-0.17.0/tests/test_store_format2_load.py +548 -0
  261. sidegraph-0.17.0/tests/test_store_format2_marker.py +629 -0
  262. sidegraph-0.17.0/tests/test_store_format2_writes.py +303 -0
  263. sidegraph-0.17.0/tests/test_store_git_root_symlink.py +267 -0
  264. sidegraph-0.17.0/tests/test_store_inventory.py +513 -0
  265. sidegraph-0.17.0/tests/test_store_meta.py +140 -0
  266. sidegraph-0.17.0/tests/test_store_mutation_guard.py +675 -0
  267. sidegraph-0.17.0/tests/test_store_non_file_entries.py +394 -0
  268. sidegraph-0.17.0/tests/test_store_persistence.py +502 -0
  269. sidegraph-0.17.0/tests/test_store_record_identity.py +408 -0
  270. sidegraph-0.17.0/tests/test_store_render_events.py +70 -0
  271. sidegraph-0.17.0/tests/test_store_requirement.py +614 -0
  272. sidegraph-0.17.0/tests/test_store_rules.py +146 -0
  273. sidegraph-0.17.0/tests/test_store_stamping_marker.py +334 -0
  274. sidegraph-0.17.0/tests/test_store_symlinks.py +89 -0
  275. sidegraph-0.17.0/tests/test_store_telemetry.py +166 -0
  276. sidegraph-0.17.0/tests/test_store_threading.py +105 -0
  277. sidegraph-0.17.0/tests/test_store_tmp_sweep_age.py +100 -0
  278. sidegraph-0.17.0/tests/test_sync_canonical_writes.py +165 -0
  279. sidegraph-0.17.0/tests/test_sync_domains.py +946 -0
  280. sidegraph-0.17.0/tests/test_sync_membership.py +675 -0
  281. sidegraph-0.17.0/tests/test_sync_moved_adoption.py +580 -0
  282. sidegraph-0.17.0/tests/test_sync_rebind.py +1225 -0
  283. sidegraph-0.17.0/tests/test_sync_repoint.py +361 -0
  284. sidegraph-0.17.0/tests/test_sync_snapshot_membership.py +465 -0
  285. sidegraph-0.17.0/tests/test_sync_volatile_heal.py +292 -0
  286. sidegraph-0.17.0/tests/test_sync_wiring.py +72 -0
  287. sidegraph-0.17.0/tests/test_text_paths.py +401 -0
  288. sidegraph-0.17.0/tests/test_verify_domain_snapshot.py +101 -0
  289. sidegraph-0.17.0/tests/test_verify_format2_against.py +997 -0
  290. sidegraph-0.17.0/tests/test_verify_format2_snapshot.py +701 -0
  291. sidegraph-0.17.0/tests/test_verify_git_framing.py +329 -0
  292. sidegraph-0.17.0/tests/test_verify_git_revisions.py +342 -0
  293. sidegraph-0.17.0/tests/test_verify_snapshot.py +1753 -0
  294. sidegraph-0.17.0/tests/test_verify_transitions.py +1516 -0
  295. sidegraph-0.17.0/tests/test_viz_render_html.py +65 -0
  296. sidegraph-0.17.0/tests/test_worktree_seeds.py +591 -0
  297. sidegraph-0.17.0/uv.lock +1523 -0
  298. sidegraph-0.15.0/.github/workflows/ci.yml +0 -345
  299. sidegraph-0.15.0/AGENTS.md +0 -79
  300. sidegraph-0.15.0/CHANGELOG.md +0 -2340
  301. sidegraph-0.15.0/CLAUDE.md +0 -120
  302. sidegraph-0.15.0/CONTRIBUTING.md +0 -96
  303. sidegraph-0.15.0/PKG-INFO +0 -416
  304. sidegraph-0.15.0/README.md +0 -386
  305. sidegraph-0.15.0/docs/README.md +0 -60
  306. sidegraph-0.15.0/docs/concepts/anchoring.md +0 -203
  307. sidegraph-0.15.0/docs/concepts/data-model.md +0 -326
  308. sidegraph-0.15.0/docs/concepts/mind-model.md +0 -219
  309. sidegraph-0.15.0/docs/concepts/retrieval.md +0 -421
  310. sidegraph-0.15.0/docs/getting-started/bootstrap.md +0 -235
  311. sidegraph-0.15.0/docs/getting-started/claude-code-setup.md +0 -294
  312. sidegraph-0.15.0/docs/getting-started/codex-setup.md +0 -193
  313. sidegraph-0.15.0/docs/getting-started/installation.md +0 -335
  314. sidegraph-0.15.0/docs/getting-started/quickstart.md +0 -135
  315. sidegraph-0.15.0/docs/guides/adr-export.md +0 -134
  316. sidegraph-0.15.0/docs/guides/capturing-decisions.md +0 -436
  317. sidegraph-0.15.0/docs/guides/ci-cd-maintenance.md +0 -410
  318. sidegraph-0.15.0/docs/guides/migrating-to-0.14.md +0 -289
  319. sidegraph-0.15.0/docs/guides/naming-your-domains.md +0 -328
  320. sidegraph-0.15.0/docs/guides/retrieval-in-sessions.md +0 -298
  321. sidegraph-0.15.0/docs/guides/semantic-docs.md +0 -259
  322. sidegraph-0.15.0/docs/guides/surviving-refactors.md +0 -253
  323. sidegraph-0.15.0/docs/guides/team-workflow.md +0 -212
  324. sidegraph-0.15.0/docs/guides/troubleshooting.md +0 -432
  325. sidegraph-0.15.0/docs/guides/using-0.15.md +0 -42
  326. sidegraph-0.15.0/docs/integrations/claude-code.md +0 -376
  327. sidegraph-0.15.0/docs/integrations/codex.md +0 -303
  328. sidegraph-0.15.0/docs/integrations/graphify.md +0 -334
  329. sidegraph-0.15.0/docs/integrations/muse.md +0 -48
  330. sidegraph-0.15.0/docs/llms.txt +0 -70
  331. sidegraph-0.15.0/docs/pilot-kit/judge-prompt.md +0 -41
  332. sidegraph-0.15.0/docs/reference/cli.md +0 -1859
  333. sidegraph-0.15.0/docs/reference/configuration.md +0 -256
  334. sidegraph-0.15.0/docs/reference/git-bindings.md +0 -164
  335. sidegraph-0.15.0/docs/reference/hooks.md +0 -1165
  336. sidegraph-0.15.0/docs/reference/mcp-tools.md +0 -1809
  337. sidegraph-0.15.0/docs/reference/operations.md +0 -112
  338. sidegraph-0.15.0/docs/reference/releasing.md +0 -191
  339. sidegraph-0.15.0/docs/reference/stability.md +0 -88
  340. sidegraph-0.15.0/docs/reference/store-format.md +0 -912
  341. sidegraph-0.15.0/package.json +0 -6
  342. sidegraph-0.15.0/plugin/sidegraph/.claude-plugin/plugin.json +0 -11
  343. sidegraph-0.15.0/plugin/sidegraph/.codex-plugin/plugin.json +0 -12
  344. sidegraph-0.15.0/plugin/sidegraph/.muse-plugin/plugin.json +0 -77
  345. sidegraph-0.15.0/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -262
  346. sidegraph-0.15.0/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -151
  347. sidegraph-0.15.0/pyproject.toml +0 -122
  348. sidegraph-0.15.0/src/sidegraph/__init__.py +0 -76
  349. sidegraph-0.15.0/src/sidegraph/adr.py +0 -295
  350. sidegraph-0.15.0/src/sidegraph/bootstrap/apply.py +0 -649
  351. sidegraph-0.15.0/src/sidegraph/bootstrap/catalog.py +0 -144
  352. sidegraph-0.15.0/src/sidegraph/cli.py +0 -3134
  353. sidegraph-0.15.0/src/sidegraph/doctor.py +0 -2010
  354. sidegraph-0.15.0/src/sidegraph/gitio.py +0 -611
  355. sidegraph-0.15.0/src/sidegraph/host/hooks.py +0 -2378
  356. sidegraph-0.15.0/src/sidegraph/host/subagent.py +0 -125
  357. sidegraph-0.15.0/src/sidegraph/hot_index.py +0 -539
  358. sidegraph-0.15.0/src/sidegraph/integrity.py +0 -1267
  359. sidegraph-0.15.0/src/sidegraph/nearest_anchored.py +0 -394
  360. sidegraph-0.15.0/src/sidegraph/retrieval.py +0 -2137
  361. sidegraph-0.15.0/src/sidegraph/schema.py +0 -482
  362. sidegraph-0.15.0/src/sidegraph/server.py +0 -5623
  363. sidegraph-0.15.0/src/sidegraph/stats/model.py +0 -816
  364. sidegraph-0.15.0/src/sidegraph/stats/render.py +0 -435
  365. sidegraph-0.15.0/src/sidegraph/store.py +0 -4695
  366. sidegraph-0.15.0/src/sidegraph/store_layout.py +0 -590
  367. sidegraph-0.15.0/src/sidegraph/sync.py +0 -2148
  368. sidegraph-0.15.0/src/sidegraph/verify.py +0 -1675
  369. sidegraph-0.15.0/tests/conftest.py +0 -204
  370. sidegraph-0.15.0/tests/githooks_support.py +0 -203
  371. sidegraph-0.15.0/tests/test_adr.py +0 -344
  372. sidegraph-0.15.0/tests/test_anchoring_membership.py +0 -372
  373. sidegraph-0.15.0/tests/test_bash_paths.py +0 -336
  374. sidegraph-0.15.0/tests/test_bootstrap_apply.py +0 -926
  375. sidegraph-0.15.0/tests/test_bootstrap_cli.py +0 -1623
  376. sidegraph-0.15.0/tests/test_bootstrap_planner.py +0 -509
  377. sidegraph-0.15.0/tests/test_bootstrap_scan_regular.py +0 -565
  378. sidegraph-0.15.0/tests/test_bounded_listings.py +0 -1058
  379. sidegraph-0.15.0/tests/test_capture_facts.py +0 -320
  380. sidegraph-0.15.0/tests/test_capture_neighbors.py +0 -171
  381. sidegraph-0.15.0/tests/test_capture_propose.py +0 -972
  382. sidegraph-0.15.0/tests/test_cli_compact.py +0 -135
  383. sidegraph-0.15.0/tests/test_cli_domains.py +0 -581
  384. sidegraph-0.15.0/tests/test_cli_domains_snapshot.py +0 -379
  385. sidegraph-0.15.0/tests/test_cli_graph_paths.py +0 -535
  386. sidegraph-0.15.0/tests/test_cli_import.py +0 -1942
  387. sidegraph-0.15.0/tests/test_cli_init.py +0 -647
  388. sidegraph-0.15.0/tests/test_cli_init_hooks.py +0 -598
  389. sidegraph-0.15.0/tests/test_cli_okf.py +0 -819
  390. sidegraph-0.15.0/tests/test_cli_ratify.py +0 -669
  391. sidegraph-0.15.0/tests/test_cli_ratify_facts.py +0 -120
  392. sidegraph-0.15.0/tests/test_cli_stats.py +0 -699
  393. sidegraph-0.15.0/tests/test_cli_sync.py +0 -562
  394. sidegraph-0.15.0/tests/test_cli_sync_check.py +0 -266
  395. sidegraph-0.15.0/tests/test_cli_unreadable_paths.py +0 -262
  396. sidegraph-0.15.0/tests/test_codex_plugin.py +0 -199
  397. sidegraph-0.15.0/tests/test_community_baseline.py +0 -53
  398. sidegraph-0.15.0/tests/test_config.py +0 -276
  399. sidegraph-0.15.0/tests/test_config_borrowed_graph.py +0 -279
  400. sidegraph-0.15.0/tests/test_corpus_expected_renders.py +0 -48
  401. sidegraph-0.15.0/tests/test_delivery_evidence.py +0 -297
  402. sidegraph-0.15.0/tests/test_digest_integrity.py +0 -657
  403. sidegraph-0.15.0/tests/test_doc_import.py +0 -3013
  404. sidegraph-0.15.0/tests/test_docs_claims.py +0 -1293
  405. sidegraph-0.15.0/tests/test_doctor.py +0 -563
  406. sidegraph-0.15.0/tests/test_doctor_auto_share.py +0 -687
  407. sidegraph-0.15.0/tests/test_doctor_code_drift.py +0 -648
  408. sidegraph-0.15.0/tests/test_doctor_dangling_supports.py +0 -158
  409. sidegraph-0.15.0/tests/test_doctor_graph_stale.py +0 -90
  410. sidegraph-0.15.0/tests/test_doctor_integrity.py +0 -213
  411. sidegraph-0.15.0/tests/test_doctor_scan.py +0 -352
  412. sidegraph-0.15.0/tests/test_doctor_unhashable_payload.py +0 -165
  413. sidegraph-0.15.0/tests/test_domains.py +0 -1666
  414. sidegraph-0.15.0/tests/test_drift_checks.py +0 -701
  415. sidegraph-0.15.0/tests/test_engine_build.py +0 -164
  416. sidegraph-0.15.0/tests/test_entity_get_or_create_race.py +0 -197
  417. sidegraph-0.15.0/tests/test_entry_point_arguments.py +0 -256
  418. sidegraph-0.15.0/tests/test_env_isolation.py +0 -66
  419. sidegraph-0.15.0/tests/test_file_bound_retrieval.py +0 -493
  420. sidegraph-0.15.0/tests/test_flow_profile.py +0 -1018
  421. sidegraph-0.15.0/tests/test_git_bindings_blame.py +0 -272
  422. sidegraph-0.15.0/tests/test_git_bindings_hook.py +0 -575
  423. sidegraph-0.15.0/tests/test_git_bindings_provenance.py +0 -157
  424. sidegraph-0.15.0/tests/test_git_config_isolation.py +0 -51
  425. sidegraph-0.15.0/tests/test_git_output_utf8.py +0 -222
  426. sidegraph-0.15.0/tests/test_githooks.py +0 -1050
  427. sidegraph-0.15.0/tests/test_graph_freshness.py +0 -552
  428. sidegraph-0.15.0/tests/test_hook_failure_diagnostics.py +0 -468
  429. sidegraph-0.15.0/tests/test_hook_spawn_guard.py +0 -294
  430. sidegraph-0.15.0/tests/test_host_borrowed_graph.py +0 -289
  431. sidegraph-0.15.0/tests/test_host_integrity.py +0 -1115
  432. sidegraph-0.15.0/tests/test_host_launch.py +0 -331
  433. sidegraph-0.15.0/tests/test_host_pretool_records.py +0 -773
  434. sidegraph-0.15.0/tests/test_host_session_start.py +0 -739
  435. sidegraph-0.15.0/tests/test_host_stop.py +0 -1700
  436. sidegraph-0.15.0/tests/test_host_touch_events.py +0 -292
  437. sidegraph-0.15.0/tests/test_host_wiring_checks.py +0 -953
  438. sidegraph-0.15.0/tests/test_hot_index.py +0 -907
  439. sidegraph-0.15.0/tests/test_hot_index_facts.py +0 -797
  440. sidegraph-0.15.0/tests/test_index_journal_mode.py +0 -268
  441. sidegraph-0.15.0/tests/test_installed_wheel_smoke.py +0 -489
  442. sidegraph-0.15.0/tests/test_integrity.py +0 -782
  443. sidegraph-0.15.0/tests/test_integrity_engine_version.py +0 -180
  444. sidegraph-0.15.0/tests/test_integrity_refresh_hook.py +0 -541
  445. sidegraph-0.15.0/tests/test_integrity_replay.py +0 -114
  446. sidegraph-0.15.0/tests/test_integrity_stranded.py +0 -873
  447. sidegraph-0.15.0/tests/test_member_anchor_wiring.py +0 -320
  448. sidegraph-0.15.0/tests/test_pathless_descriptor_adoption.py +0 -509
  449. sidegraph-0.15.0/tests/test_pilot_kit_corpus_fit.py +0 -174
  450. sidegraph-0.15.0/tests/test_public_hook_launch.py +0 -599
  451. sidegraph-0.15.0/tests/test_ratify_policy.py +0 -5632
  452. sidegraph-0.15.0/tests/test_reader_community_labels.py +0 -174
  453. sidegraph-0.15.0/tests/test_reader_doc_nodes.py +0 -136
  454. sidegraph-0.15.0/tests/test_reader_engine_version.py +0 -160
  455. sidegraph-0.15.0/tests/test_reader_file_labels.py +0 -189
  456. sidegraph-0.15.0/tests/test_reader_label_conventions.py +0 -24
  457. sidegraph-0.15.0/tests/test_reader_member_name_lookup.py +0 -193
  458. sidegraph-0.15.0/tests/test_reader_nodes_in_file.py +0 -52
  459. sidegraph-0.15.0/tests/test_reader_perf.py +0 -223
  460. sidegraph-0.15.0/tests/test_reader_read.py +0 -33
  461. sidegraph-0.15.0/tests/test_reader_resolve.py +0 -134
  462. sidegraph-0.15.0/tests/test_reader_stub_collapse.py +0 -451
  463. sidegraph-0.15.0/tests/test_reader_version.py +0 -74
  464. sidegraph-0.15.0/tests/test_redaction_scan.py +0 -225
  465. sidegraph-0.15.0/tests/test_redaction_tokens.py +0 -223
  466. sidegraph-0.15.0/tests/test_retrieval_budget_counters.py +0 -420
  467. sidegraph-0.15.0/tests/test_retrieval_drilldown.py +0 -683
  468. sidegraph-0.15.0/tests/test_retrieval_facts.py +0 -222
  469. sidegraph-0.15.0/tests/test_retrieval_guessed.py +0 -442
  470. sidegraph-0.15.0/tests/test_retrieval_ids.py +0 -213
  471. sidegraph-0.15.0/tests/test_retrieval_membership_generations.py +0 -81
  472. sidegraph-0.15.0/tests/test_retrieval_rank.py +0 -763
  473. sidegraph-0.15.0/tests/test_retrieval_seeds.py +0 -49
  474. sidegraph-0.15.0/tests/test_retrieval_shown_ids.py +0 -19
  475. sidegraph-0.15.0/tests/test_retrieval_thin_tools.py +0 -175
  476. sidegraph-0.15.0/tests/test_retrieval_toc.py +0 -511
  477. sidegraph-0.15.0/tests/test_retrieval_toptier.py +0 -112
  478. sidegraph-0.15.0/tests/test_sandbox_hygiene.py +0 -328
  479. sidegraph-0.15.0/tests/test_schema_descriptor.py +0 -133
  480. sidegraph-0.15.0/tests/test_secret_scan_gate.py +0 -223
  481. sidegraph-0.15.0/tests/test_security_binary_limits.py +0 -53
  482. sidegraph-0.15.0/tests/test_security_input_limits.py +0 -291
  483. sidegraph-0.15.0/tests/test_security_numeric_enums.py +0 -154
  484. sidegraph-0.15.0/tests/test_security_python_shapes.py +0 -234
  485. sidegraph-0.15.0/tests/test_security_redaction_scaling.py +0 -79
  486. sidegraph-0.15.0/tests/test_security_validation_errors.py +0 -106
  487. sidegraph-0.15.0/tests/test_security_write_boundary.py +0 -291
  488. sidegraph-0.15.0/tests/test_seed_paths_portable.py +0 -163
  489. sidegraph-0.15.0/tests/test_server_add_anchors.py +0 -211
  490. sidegraph-0.15.0/tests/test_server_anchoring.py +0 -278
  491. sidegraph-0.15.0/tests/test_server_annotations.py +0 -87
  492. sidegraph-0.15.0/tests/test_server_argument_names.py +0 -275
  493. sidegraph-0.15.0/tests/test_server_borrowed_graph.py +0 -644
  494. sidegraph-0.15.0/tests/test_server_capture.py +0 -938
  495. sidegraph-0.15.0/tests/test_server_commit_hint.py +0 -215
  496. sidegraph-0.15.0/tests/test_server_coverage_events.py +0 -268
  497. sidegraph-0.15.0/tests/test_server_decision_listing.py +0 -780
  498. sidegraph-0.15.0/tests/test_server_drilldown.py +0 -99
  499. sidegraph-0.15.0/tests/test_server_facts.py +0 -360
  500. sidegraph-0.15.0/tests/test_server_get_task_context.py +0 -53
  501. sidegraph-0.15.0/tests/test_server_graph_freshness.py +0 -386
  502. sidegraph-0.15.0/tests/test_server_mcp_smoke.py +0 -423
  503. sidegraph-0.15.0/tests/test_server_prewrite_anchor_validation.py +0 -214
  504. sidegraph-0.15.0/tests/test_server_render_events.py +0 -357
  505. sidegraph-0.15.0/tests/test_server_thin_tools.py +0 -81
  506. sidegraph-0.15.0/tests/test_server_tolerant_seeds.py +0 -653
  507. sidegraph-0.15.0/tests/test_session_attribution.py +0 -627
  508. sidegraph-0.15.0/tests/test_skill_frontmatter.py +0 -39
  509. sidegraph-0.15.0/tests/test_stats_graph.py +0 -160
  510. sidegraph-0.15.0/tests/test_stats_health.py +0 -205
  511. sidegraph-0.15.0/tests/test_stats_model.py +0 -1587
  512. sidegraph-0.15.0/tests/test_stats_render.py +0 -1359
  513. sidegraph-0.15.0/tests/test_stats_snapshot.py +0 -164
  514. sidegraph-0.15.0/tests/test_stop_rearm.py +0 -506
  515. sidegraph-0.15.0/tests/test_store.py +0 -95
  516. sidegraph-0.15.0/tests/test_store_agent_state.py +0 -282
  517. sidegraph-0.15.0/tests/test_store_bad_file.py +0 -590
  518. sidegraph-0.15.0/tests/test_store_canonical_stat.py +0 -262
  519. sidegraph-0.15.0/tests/test_store_compact.py +0 -855
  520. sidegraph-0.15.0/tests/test_store_compact_review.py +0 -421
  521. sidegraph-0.15.0/tests/test_store_concurrent_open.py +0 -99
  522. sidegraph-0.15.0/tests/test_store_coverage_telemetry.py +0 -105
  523. sidegraph-0.15.0/tests/test_store_cross_process_mutations.py +0 -275
  524. sidegraph-0.15.0/tests/test_store_derived_community.py +0 -123
  525. sidegraph-0.15.0/tests/test_store_domains.py +0 -682
  526. sidegraph-0.15.0/tests/test_store_git_root_symlink.py +0 -355
  527. sidegraph-0.15.0/tests/test_store_meta.py +0 -156
  528. sidegraph-0.15.0/tests/test_store_mutation_guard.py +0 -661
  529. sidegraph-0.15.0/tests/test_store_non_file_entries.py +0 -514
  530. sidegraph-0.15.0/tests/test_store_persistence.py +0 -546
  531. sidegraph-0.15.0/tests/test_store_record_identity.py +0 -407
  532. sidegraph-0.15.0/tests/test_store_render_events.py +0 -101
  533. sidegraph-0.15.0/tests/test_store_requirement.py +0 -608
  534. sidegraph-0.15.0/tests/test_store_stamping_marker.py +0 -324
  535. sidegraph-0.15.0/tests/test_store_symlinks.py +0 -85
  536. sidegraph-0.15.0/tests/test_store_telemetry.py +0 -130
  537. sidegraph-0.15.0/tests/test_store_threading.py +0 -95
  538. sidegraph-0.15.0/tests/test_store_tmp_sweep_age.py +0 -90
  539. sidegraph-0.15.0/tests/test_sync_canonical_writes.py +0 -171
  540. sidegraph-0.15.0/tests/test_sync_domains.py +0 -937
  541. sidegraph-0.15.0/tests/test_sync_membership.py +0 -779
  542. sidegraph-0.15.0/tests/test_sync_moved_adoption.py +0 -708
  543. sidegraph-0.15.0/tests/test_sync_rebind.py +0 -1319
  544. sidegraph-0.15.0/tests/test_sync_repoint.py +0 -374
  545. sidegraph-0.15.0/tests/test_sync_snapshot_membership.py +0 -487
  546. sidegraph-0.15.0/tests/test_sync_volatile_heal.py +0 -303
  547. sidegraph-0.15.0/tests/test_sync_wiring.py +0 -76
  548. sidegraph-0.15.0/tests/test_text_paths.py +0 -414
  549. sidegraph-0.15.0/tests/test_verify_domain_snapshot.py +0 -100
  550. sidegraph-0.15.0/tests/test_verify_git_framing.py +0 -349
  551. sidegraph-0.15.0/tests/test_verify_git_revisions.py +0 -327
  552. sidegraph-0.15.0/tests/test_verify_snapshot.py +0 -1751
  553. sidegraph-0.15.0/tests/test_verify_transitions.py +0 -1484
  554. sidegraph-0.15.0/tests/test_viz_render_html.py +0 -61
  555. sidegraph-0.15.0/tests/test_worktree_seeds.py +0 -643
  556. sidegraph-0.15.0/uv.lock +0 -1523
  557. {sidegraph-0.15.0 → sidegraph-0.17.0}/.agents/plugins/marketplace.json +0 -0
  558. {sidegraph-0.15.0 → sidegraph-0.17.0}/.claude-plugin/marketplace.json +0 -0
  559. {sidegraph-0.15.0 → sidegraph-0.17.0}/.github/CODEOWNERS +0 -0
  560. {sidegraph-0.15.0 → sidegraph-0.17.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  561. {sidegraph-0.15.0 → sidegraph-0.17.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  562. {sidegraph-0.15.0 → sidegraph-0.17.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  563. {sidegraph-0.15.0 → sidegraph-0.17.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  564. {sidegraph-0.15.0 → sidegraph-0.17.0}/.github/secret_scanning.yml +0 -0
  565. {sidegraph-0.15.0 → sidegraph-0.17.0}/.github/workflows/publish.yml +0 -0
  566. {sidegraph-0.15.0 → sidegraph-0.17.0}/.github/workflows/scorecard.yml +0 -0
  567. {sidegraph-0.15.0 → sidegraph-0.17.0}/.github/workflows/session-link-gate.yml +0 -0
  568. {sidegraph-0.15.0 → sidegraph-0.17.0}/.gitignore +0 -0
  569. {sidegraph-0.15.0 → sidegraph-0.17.0}/.gitleaks.toml +0 -0
  570. {sidegraph-0.15.0 → sidegraph-0.17.0}/.opencode/INSTALL.md +0 -0
  571. {sidegraph-0.15.0 → sidegraph-0.17.0}/.pre-commit-config.yaml +0 -0
  572. {sidegraph-0.15.0 → sidegraph-0.17.0}/.python-version +0 -0
  573. {sidegraph-0.15.0 → sidegraph-0.17.0}/CODE_OF_CONDUCT.md +0 -0
  574. {sidegraph-0.15.0 → sidegraph-0.17.0}/LICENSE +0 -0
  575. {sidegraph-0.15.0 → sidegraph-0.17.0}/SECURITY.md +0 -0
  576. {sidegraph-0.15.0 → sidegraph-0.17.0}/docs/concepts/decision-memory.md +0 -0
  577. {sidegraph-0.15.0 → sidegraph-0.17.0}/docs/guides/verifying-your-setup.md +0 -0
  578. {sidegraph-0.15.0 → sidegraph-0.17.0}/docs/integrations/opencode.md +0 -0
  579. {sidegraph-0.15.0 → sidegraph-0.17.0}/docs/pilot-kit/README.md +0 -0
  580. {sidegraph-0.15.0 → sidegraph-0.17.0}/docs/pilot-kit/corpus_fit.py +0 -0
  581. {sidegraph-0.15.0 → sidegraph-0.17.0}/docs/pilot-kit/questions-prompt.md +0 -0
  582. {sidegraph-0.15.0 → sidegraph-0.17.0}/docs/pilot-kit/rubric-template.md +0 -0
  583. {sidegraph-0.15.0 → sidegraph-0.17.0}/docs/whitepaper/index.md +0 -0
  584. {sidegraph-0.15.0 → sidegraph-0.17.0}/index.js +0 -0
  585. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/.mcp.json +0 -0
  586. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/codex/hooks.json +0 -0
  587. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/codex/mcp.json +0 -0
  588. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/hooks/hooks.json +0 -0
  589. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
  590. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
  591. {sidegraph-0.15.0/plugin/sidegraph/skills/import-adrs → sidegraph-0.17.0/plugin/sidegraph/skills/compact}/agents/openai.yaml +0 -0
  592. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
  593. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
  594. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
  595. {sidegraph-0.15.0/plugin/sidegraph/skills/manage-domains → sidegraph-0.17.0/plugin/sidegraph/skills/health-check}/agents/openai.yaml +0 -0
  596. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
  597. {sidegraph-0.15.0/plugin/sidegraph/skills/name-domains → sidegraph-0.17.0/plugin/sidegraph/skills/import-adrs}/agents/openai.yaml +0 -0
  598. {sidegraph-0.15.0/plugin/sidegraph/skills/setup → sidegraph-0.17.0/plugin/sidegraph/skills/manage-domains}/agents/openai.yaml +0 -0
  599. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
  600. {sidegraph-0.15.0/plugin/sidegraph/skills/stats → sidegraph-0.17.0/plugin/sidegraph/skills/name-domains}/agents/openai.yaml +0 -0
  601. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
  602. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
  603. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
  604. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
  605. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
  606. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
  607. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
  608. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
  609. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
  610. {sidegraph-0.15.0 → sidegraph-0.17.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
  611. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/adr_cli.py +0 -0
  612. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/adr_files.py +0 -0
  613. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/adr_identity.py +0 -0
  614. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/anchoring.py +0 -0
  615. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/bash_paths.py +0 -0
  616. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/bootstrap/__init__.py +0 -0
  617. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/bootstrap/cli.py +0 -0
  618. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/bootstrap/integrations.py +0 -0
  619. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/bootstrap/model.py +0 -0
  620. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/bootstrap/planner.py +0 -0
  621. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/bootstrap/proof.py +0 -0
  622. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/bootstrap/review.py +0 -0
  623. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/bootstrap/scan.py +0 -0
  624. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/capture.py +0 -0
  625. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/config.py +0 -0
  626. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/delivery.py +0 -0
  627. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/doc_import.py +0 -0
  628. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/domain_snapshot.py +0 -0
  629. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/domains.py +0 -0
  630. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/drift_checks.py +0 -0
  631. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/engine/__init__.py +0 -0
  632. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/engine/rationale.py +0 -0
  633. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/engine/reader.py +0 -0
  634. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/freshness.py +0 -0
  635. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/gitenv.py +0 -0
  636. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/githooks.py +0 -0
  637. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/host/__init__.py +0 -0
  638. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/host/claude_settings.py +0 -0
  639. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/host/diagnostics.py +0 -0
  640. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/host/launch.py +0 -0
  641. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/host/mcp_entry.py +0 -0
  642. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/host/session_identity.py +0 -0
  643. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/importer.py +0 -0
  644. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/input_limits.py +0 -0
  645. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/okf.py +0 -0
  646. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/profiles.py +0 -0
  647. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/redaction_scan.py +0 -0
  648. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/redaction_tokens.py +0 -0
  649. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/seed_ladder.py +0 -0
  650. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/stats/__init__.py +0 -0
  651. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/text_paths.py +0 -0
  652. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/tool_rate_limit.py +0 -0
  653. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/validation_errors.py +0 -0
  654. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/viz/__init__.py +0 -0
  655. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
  656. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/viz/model.py +0 -0
  657. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/viz/render.py +0 -0
  658. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/viz/template.html +0 -0
  659. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/worktree_seeds.py +0 -0
  660. {sidegraph-0.15.0 → sidegraph-0.17.0}/src/sidegraph/write_boundary.py +0 -0
  661. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/__init__.py +0 -0
  662. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
  663. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bitfinex_slice.json +0 -0
  664. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
  665. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
  666. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
  667. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
  668. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
  669. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/graph.json +0 -0
  670. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
  671. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
  672. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
  673. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
  674. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
  675. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
  676. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
  677. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
  678. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
  679. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
  680. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
  681. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
  682. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
  683. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
  684. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
  685. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
  686. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
  687. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
  688. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
  689. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
  690. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
  691. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
  692. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
  693. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
  694. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/design.md +0 -0
  695. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
  696. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
  697. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
  698. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
  699. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
  700. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
  701. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
  702. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
  703. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
  704. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
  705. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
  706. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
  707. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
  708. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
  709. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
  710. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/member_names_python_graph.json +0 -0
  711. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/member_names_swift_graph.json +0 -0
  712. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/fixtures/mini_graph.json +0 -0
  713. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/graph_fixtures.py +0 -0
  714. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/opencode_plugin_runner.mjs +0 -0
  715. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/snapshot_support.py +0 -0
  716. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_adr_files.py +0 -0
  717. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_adr_identity.py +0 -0
  718. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_agent_brief_manifests.py +0 -0
  719. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_anchor_descriptor.py +0 -0
  720. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_anchor_paths.py +0 -0
  721. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_anchoring.py +0 -0
  722. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_anchoring_mapping_refresh.py +0 -0
  723. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_batch_panel_fixes.py +0 -0
  724. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_bootstrap_catalog.py +0 -0
  725. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_bootstrap_descriptor_cleanup.py +0 -0
  726. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_bootstrap_integrations.py +0 -0
  727. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_bootstrap_model.py +0 -0
  728. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_bootstrap_proof.py +0 -0
  729. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_bootstrap_review.py +0 -0
  730. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_bootstrap_scan.py +0 -0
  731. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_bootstrap_unanchored.py +0 -0
  732. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_capture_auto_accept.py +0 -0
  733. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_capture_initiative.py +0 -0
  734. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_capture_integration.py +0 -0
  735. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_capture_redact.py +0 -0
  736. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_cli_adr.py +0 -0
  737. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_cli_doctor.py +0 -0
  738. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_cli_viz.py +0 -0
  739. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_command_windows.py +0 -0
  740. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_config_ancestor_lookup.py +0 -0
  741. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_corpus_self_corpus.py +0 -0
  742. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_coverage_telemetry_e2e.py +0 -0
  743. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_delivery_stats.py +0 -0
  744. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_delivery_surfaces.py +0 -0
  745. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_doc_corpus_integration.py +0 -0
  746. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_doctor_duplicate_entity.py +0 -0
  747. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
  748. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_doctor_never_surfaced.py +0 -0
  749. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_doctor_stale_instructions.py +0 -0
  750. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_doctor_unratified_accept.py +0 -0
  751. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_domain_seed_names.py +0 -0
  752. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_domain_snapshot_format.py +0 -0
  753. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_domain_snapshot_notices.py +0 -0
  754. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_entity_duplicate_resolution.py +0 -0
  755. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_fact_reachability_gate.py +0 -0
  756. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_git_env.py +0 -0
  757. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_graphify_pin.py +0 -0
  758. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_hook_body_compaction.py +0 -0
  759. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_hook_payload_encoding.py +0 -0
  760. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_hook_showings.py +0 -0
  761. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_host_agent_brief.py +0 -0
  762. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_host_agent_state.py +0 -0
  763. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_host_claude_settings.py +0 -0
  764. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_host_drift_nudge.py +0 -0
  765. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_host_pretool.py +0 -0
  766. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_host_session_key.py +0 -0
  767. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_host_session_start_concurrent.py +0 -0
  768. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_host_subagent_start.py +0 -0
  769. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_host_subdirectory_launch.py +0 -0
  770. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_hot_index_hook.py +0 -0
  771. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_hot_path_imports.py +0 -0
  772. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_import_dry_run_preview.py +0 -0
  773. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_importer.py +0 -0
  774. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_lazy_root.py +0 -0
  775. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_mcp_entry_ratify_policy.py +0 -0
  776. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_mcp_entry_repo_root.py +0 -0
  777. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_mind_model_additive_fields.py +0 -0
  778. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_muse_plugin.py +0 -0
  779. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_nearest_anchored.py +0 -0
  780. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_okf.py +0 -0
  781. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_opencode_plugin.py +0 -0
  782. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_openspec_profile.py +0 -0
  783. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_portable_json.py +0 -0
  784. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_proposal_lifecycle.py +0 -0
  785. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_ratify_listing_gone_dark.py +0 -0
  786. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_rationale_compatibility.py +0 -0
  787. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_reader_graph.py +0 -0
  788. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_reader_integration.py +0 -0
  789. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_reader_member_names.py +0 -0
  790. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_reader_rationale.py +0 -0
  791. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_reader_subdir_mismatch.py +0 -0
  792. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_reader_type_split.py +0 -0
  793. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_rebuild_instruction.py +0 -0
  794. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_redaction_seeded.py +0 -0
  795. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_repo_relative_paths_portable.py +0 -0
  796. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_repoint_integration.py +0 -0
  797. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_retrieval_context.py +0 -0
  798. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_retrieval_drift_marker.py +0 -0
  799. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_retrieval_integration.py +0 -0
  800. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_retrieval_membership_index.py +0 -0
  801. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_retrieval_terminal_evidence.py +0 -0
  802. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_retrieval_unratified.py +0 -0
  803. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_schema_domain.py +0 -0
  804. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_schema_fact.py +0 -0
  805. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_security_capture_diagnostics.py +0 -0
  806. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_security_capture_limits.py +0 -0
  807. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_security_cli_diagnostics.py +0 -0
  808. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_security_doc_limits.py +0 -0
  809. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_security_mcp_write_diagnostics.py +0 -0
  810. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_security_redaction_cursor.py +0 -0
  811. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_seed_ladder.py +0 -0
  812. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_domains.py +0 -0
  813. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_find_entity.py +0 -0
  814. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_get_store.py +0 -0
  815. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_graph_path.py +0 -0
  816. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_import.py +0 -0
  817. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_invocation_policy.py +0 -0
  818. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_nearest_anchored.py +0 -0
  819. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_ratify_facts.py +0 -0
  820. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_record_types.py +0 -0
  821. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_redaction.py +0 -0
  822. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_refresh.py +0 -0
  823. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_result_contract.py +0 -0
  824. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_supersede.py +0 -0
  825. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_sync_anchors.py +0 -0
  826. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_telemetry.py +0 -0
  827. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_server_verify.py +0 -0
  828. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_stats_skill.py +0 -0
  829. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_stop_hot_path.py +0 -0
  830. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
  831. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_binding_index.py +0 -0
  832. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_domain_members.py +0 -0
  833. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_entities.py +0 -0
  834. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_fact_cascade.py +0 -0
  835. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_facts.py +0 -0
  836. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_file_anchor_names.py +0 -0
  837. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_migration.py +0 -0
  838. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_mutation_immediate.py +0 -0
  839. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
  840. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_ratification.py +0 -0
  841. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_rebuild_atomicity.py +0 -0
  842. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_record_types.py +0 -0
  843. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_retrieval.py +0 -0
  844. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_slug_conflicts.py +0 -0
  845. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_snapshot_wiring.py +0 -0
  846. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_store_update_meta_if.py +0 -0
  847. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_subagent_start_manifests.py +0 -0
  848. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_subprocess_text_encoding.py +0 -0
  849. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_sync_clean.py +0 -0
  850. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_sync_drift_cache.py +0 -0
  851. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_sync_fresh_clone.py +0 -0
  852. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_sync_integration.py +0 -0
  853. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_sync_report_has_findings.py +0 -0
  854. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_sync_run.py +0 -0
  855. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_sync_toc_cache.py +0 -0
  856. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_telemetry_retention.py +0 -0
  857. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_verify_git_stdin.py +0 -0
  858. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_viz_asset_packaged.py +0 -0
  859. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_viz_model.py +0 -0
  860. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/test_viz_render_json.py +0 -0
  861. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/wheel_server_trace.py +0 -0
  862. {sidegraph-0.15.0 → sidegraph-0.17.0}/tests/wheel_smoke.py +0 -0
  863. {sidegraph-0.15.0 → sidegraph-0.17.0}/tools/check_no_session_links.py +0 -0
@@ -0,0 +1,349 @@
1
+ # Project lint+type+test gate. `lint` runs the SAME .pre-commit-config.yaml a developer
2
+ # runs locally, so there is one definition of lint rather than a CI copy that drifts.
3
+ # Mostly distinct from the sidegraph-recipe workflows in docs/guides/ci-cd-maintenance.md
4
+ # (recipes for USER repos consuming Sidegraph) — except `store-lint`, which is Recipe 2
5
+ # self-applied to this repo's own dogfood store (2026-08-09 maintenance retrospective,
6
+ # cadence lever): the store rides every PR, so its transition rules should gate every PR.
7
+ #
8
+ # Actions are pinned to commit SHAs (the tag comment records the version): a mutable tag
9
+ # is a supply-chain hole, and this workflow ships to the public repo by snapshot.
10
+ name: ci
11
+
12
+ on:
13
+ push:
14
+ branches: [main]
15
+ pull_request:
16
+ workflow_call: # reused as the pre-publish gate by publish.yml (tag builds)
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ jobs:
22
+ lint:
23
+ runs-on: ubuntu-latest
24
+ timeout-minutes: 15
25
+ steps:
26
+ # zizmor artipacked: this job never pushes, so the checkout's git credentials should not
27
+ # persist into the runner's git config where a later step (or an uploaded artifact) could
28
+ # leak them.
29
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
30
+ with:
31
+ fetch-depth: 0 # committed-history secret scan needs every reachable commit
32
+ persist-credentials: false
33
+
34
+ - name: Install uv
35
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
36
+ with:
37
+ python-version: "3.13"
38
+ enable-cache: true
39
+ cache-dependency-glob: "uv.lock"
40
+
41
+ - name: Cache pre-commit hooks
42
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
43
+ with:
44
+ path: ~/.cache/pre-commit
45
+ key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
46
+
47
+ - name: Install dependencies
48
+ run: uv sync --locked
49
+
50
+ - name: Run pre-commit checks
51
+ run: uv run pre-commit run --all-files
52
+
53
+ - name: Scan committed history for secrets
54
+ run: |
55
+ test "$(git rev-parse --is-shallow-repository)" = false
56
+ uv run pre-commit run gitleaks-history --hook-stage manual --all-files
57
+
58
+ - name: Exercise secret scanner integration
59
+ env:
60
+ SIDEGRAPH_SECRET_SCAN_INTEGRATION: "1"
61
+ run: |
62
+ # The test file is release-only (tests/private); the public snapshot has no copy.
63
+ if [ ! -f tests/private/test_secret_scan_gate.py ]; then
64
+ echo "tests/private is not shipped here; scanner integration tests skipped"
65
+ exit 0
66
+ fi
67
+ uv run pytest tests/private/test_secret_scan_gate.py -q --junitxml="$RUNNER_TEMP/secret-scan.xml"
68
+ python3 - <<'PY'
69
+ import os
70
+ from pathlib import Path
71
+ from xml.etree import ElementTree
72
+
73
+ report = Path(os.environ["RUNNER_TEMP"]) / "secret-scan.xml"
74
+ suites = list(ElementTree.parse(report).getroot().iter("testsuite"))
75
+ assert sum(int(s.attrib["tests"]) for s in suites) > 0, "no scanner tests ran"
76
+ assert sum(int(s.attrib["skipped"]) for s in suites) == 0, "scanner tests skipped"
77
+ PY
78
+
79
+ test:
80
+ runs-on: ubuntu-latest
81
+ timeout-minutes: 30
82
+ strategy:
83
+ fail-fast: false
84
+ matrix:
85
+ python-version: ["3.13", "3.14"]
86
+ steps:
87
+ # zizmor artipacked: this job never pushes; do not persist git credentials past checkout.
88
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
89
+ with:
90
+ persist-credentials: false
91
+
92
+ - name: Install uv
93
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
94
+ with:
95
+ python-version: ${{ matrix.python-version }}
96
+ enable-cache: true
97
+ cache-dependency-glob: "uv.lock"
98
+
99
+ - name: Install dependencies
100
+ run: uv sync --locked
101
+
102
+ - name: Run tests
103
+ run: uv run pytest -q
104
+
105
+ sdk-compatibility:
106
+ runs-on: ubuntu-latest
107
+ timeout-minutes: 15
108
+ strategy:
109
+ fail-fast: false
110
+ matrix:
111
+ sdk: [minimum, latest]
112
+ steps:
113
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
114
+ with:
115
+ persist-credentials: false
116
+
117
+ - name: Install uv
118
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
119
+ with:
120
+ python-version: "3.13"
121
+ enable-cache: true
122
+ cache-dependency-glob: "uv.lock"
123
+
124
+ - name: Validate supported SDK bounds against installed wheel
125
+ env:
126
+ SDK_PAIR: ${{ matrix.sdk }}
127
+ run: |
128
+ uv build
129
+ wheels=(dist/sidegraph-*.whl)
130
+ test "${#wheels[@]}" -eq 1
131
+ wheel="$(realpath "${wheels[0]}")"
132
+ probe="$(realpath tests/wheel_smoke.py)"
133
+ environment="$RUNNER_TEMP/sidegraph-sdk-env"
134
+ uv venv --python 3.13 "$environment"
135
+ interpreter="$environment/bin/python"
136
+ constraints=()
137
+ if [ "$SDK_PAIR" = minimum ]; then
138
+ constraints=(fastmcp==3.4.2 mcp==1.30.0)
139
+ fi
140
+ uv pip install --python "$interpreter" "$wheel" pytest "${constraints[@]}"
141
+ mkdir -p "$RUNNER_TEMP/sdk-check"
142
+ cp -R tests "$RUNNER_TEMP/sdk-check/tests"
143
+ cd "$RUNNER_TEMP/sdk-check"
144
+ "$interpreter" -I "$probe" --wheel "$wheel" --python "$interpreter"
145
+ "$interpreter" -I -m pytest -q tests/test_server_result_contract.py \
146
+ tests/test_server_argument_names.py tests/test_security_write_boundary.py \
147
+ tests/test_security_mcp_write_diagnostics.py tests/test_server_invocation_policy.py
148
+ "$interpreter" -I -m pytest -q tests/test_session_attribution.py \
149
+ -k "not t9 and not t14_every and not t14_the_manual and not console_script_is_the_host_entry"
150
+
151
+ windows-core:
152
+ runs-on: windows-2022
153
+ timeout-minutes: 30
154
+ strategy:
155
+ fail-fast: false
156
+ matrix:
157
+ python-version: ["3.13", "3.14"]
158
+ steps:
159
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
160
+ with:
161
+ persist-credentials: false
162
+
163
+ - name: Install uv
164
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
165
+ with:
166
+ python-version: ${{ matrix.python-version }}
167
+ enable-cache: true
168
+ cache-dependency-glob: "uv.lock"
169
+
170
+ - name: Install dependencies
171
+ run: uv sync --locked
172
+
173
+ # Native core selection; Unix host/editor integrations remain covered on Linux.
174
+ - name: Record native environment
175
+ shell: pwsh
176
+ run: |
177
+ uv run python -c "import json,platform,importlib.metadata as m; print(json.dumps({'os':platform.system(),'python':platform.python_version(),'fastmcp':m.version('fastmcp'),'mcp':m.version('mcp')}))" > "$env:RUNNER_TEMP/windows-environment.json"
178
+ exit $LASTEXITCODE
179
+
180
+ - name: Test portable core and MCP contracts
181
+ shell: pwsh
182
+ run: |
183
+ # The wheel-smoke tests are release-only (tests/private); the public snapshot has no copy.
184
+ $privateTests = @()
185
+ if (Test-Path "tests/private/test_installed_wheel_smoke.py") {
186
+ $privateTests = @("tests/private/test_installed_wheel_smoke.py")
187
+ }
188
+ uv run pytest -q --junitxml="$env:RUNNER_TEMP/windows-core.xml" `
189
+ tests/test_store_mutation_guard.py `
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 `
192
+ tests/test_portable_json.py tests/test_bootstrap_descriptor_cleanup.py `
193
+ tests/test_server_result_contract.py tests/test_server_invocation_policy.py `
194
+ tests/test_verify_git_stdin.py tests/test_seed_paths_portable.py `
195
+ tests/test_verify_format2_snapshot.py `
196
+ tests/test_store_format.py tests/test_store_rules.py `
197
+ tests/test_maintenance_publish.py tests/test_migrate.py `
198
+ tests/test_repo_relative_paths_portable.py `
199
+ tests/test_command_windows.py `
200
+ tests/test_hook_payload_encoding.py tests/test_hook_failure_diagnostics.py `
201
+ tests/test_hot_index_facts.py `
202
+ tests/test_delivery_evidence.py tests/test_delivery_stats.py tests/test_delivery_surfaces.py `
203
+ tests/test_git_output_utf8.py `
204
+ tests/test_health_check_skill.py `
205
+ $privateTests
206
+ if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
207
+
208
+ - name: Validate installed wheel over native stdio
209
+ id: windows-wheel
210
+ shell: pwsh
211
+ env:
212
+ WHEEL_PYTHON_VERSION: ${{ matrix.python-version }}
213
+ run: |
214
+ uv build
215
+ if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
216
+ $wheels = @(Get-ChildItem dist/sidegraph-*.whl)
217
+ if ($wheels.Count -ne 1) { throw "Expected one wheel artifact" }
218
+ $wheel = $wheels[0].FullName
219
+ $probe = (Resolve-Path tests/wheel_smoke.py).Path
220
+ $environment = Join-Path $env:RUNNER_TEMP "sidegraph-wheel-env"
221
+ uv venv --python "$env:WHEEL_PYTHON_VERSION" "$environment"
222
+ if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
223
+ $interpreter = Join-Path $environment "Scripts/python.exe"
224
+ uv pip install --python "$interpreter" "$wheel"
225
+ if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
226
+ Set-Location "$env:RUNNER_TEMP"
227
+ & "$interpreter" -I "$probe" --wheel "$wheel" --python "$interpreter" |
228
+ Tee-Object -FilePath "$env:RUNNER_TEMP/windows-wheel.json"
229
+ exit $LASTEXITCODE
230
+
231
+ # Preserve the primary failure. Instrumentation uses new no-graph/no-repo scratch.
232
+ - name: Diagnose first installed-wheel write
233
+ if: ${{ !cancelled() && steps.windows-wheel.outcome == 'failure' }}
234
+ timeout-minutes: 2
235
+ shell: pwsh
236
+ run: |
237
+ $wheels = @(Get-ChildItem dist/sidegraph-*.whl)
238
+ if ($wheels.Count -ne 1) { throw "Expected one wheel artifact" }
239
+ $wheel = $wheels[0].FullName
240
+ $probe = (Resolve-Path tests/wheel_smoke.py).Path
241
+ $interpreter = Join-Path $env:RUNNER_TEMP "sidegraph-wheel-env/Scripts/python.exe"
242
+ Set-Location "$env:RUNNER_TEMP"
243
+ & "$interpreter" -I "$probe" --wheel "$wheel" --python "$interpreter" `
244
+ --diagnose-first-write
245
+ exit $LASTEXITCODE
246
+
247
+ - name: Sanitize test report
248
+ if: ${{ !cancelled() }}
249
+ shell: pwsh
250
+ run: |
251
+ @'
252
+ import os
253
+ from pathlib import Path
254
+ from xml.etree import ElementTree as ET
255
+ report = Path(os.environ['RUNNER_TEMP']) / 'windows-core.xml'
256
+ if report.exists():
257
+ tree = ET.parse(report)
258
+ for element in tree.getroot().iter():
259
+ if element.tag in {'failure', 'error', 'skipped', 'system-out', 'system-err'}:
260
+ element.attrib.clear()
261
+ element.text = 'Details omitted; see the CI step output.'
262
+ element.attrib.pop('file', None)
263
+ element.attrib.pop('hostname', None)
264
+ tree.write(report, encoding='utf-8', xml_declaration=True)
265
+ '@ | uv run python -
266
+ exit $LASTEXITCODE
267
+
268
+ - name: Upload bounded Windows evidence
269
+ if: ${{ !cancelled() }}
270
+ uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
271
+ with:
272
+ name: windows-core-${{ matrix.python-version }}
273
+ path: |
274
+ ${{ runner.temp }}/windows-core.xml
275
+ ${{ runner.temp }}/windows-environment.json
276
+ ${{ runner.temp }}/windows-wheel.json
277
+ if-no-files-found: warn
278
+ retention-days: 7
279
+
280
+ # Recipe 2 (docs/guides/ci-cd-maintenance.md) on our own store: catch a hand-edited or
281
+ # history-rewritten record no MCP tool would produce. Diffs against the PR's merge base
282
+ # (never a moving branch name — see the recipe for why). Skips cleanly when the checkout
283
+ # carries no store: the public snapshot ships .sidegraph only on the demo branch, and
284
+ # this workflow ships to the public repo.
285
+ store-lint:
286
+ if: github.event_name == 'pull_request'
287
+ runs-on: ubuntu-latest
288
+ timeout-minutes: 10
289
+ steps:
290
+ # zizmor artipacked: this job never pushes; do not persist git credentials past checkout.
291
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
292
+ with:
293
+ fetch-depth: 0 # full history — merge-base needs it
294
+ persist-credentials: false
295
+
296
+ - name: Install uv
297
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
298
+ with:
299
+ python-version: "3.13"
300
+ enable-cache: true
301
+ cache-dependency-glob: "uv.lock"
302
+
303
+ - name: sidegraph-verify --against merge-base
304
+ run: |
305
+ if [ ! -d .sidegraph ]; then
306
+ echo "no .sidegraph in this checkout — store lint not applicable"
307
+ exit 0
308
+ fi
309
+ uv sync --locked
310
+ base="$(git merge-base "origin/$GITHUB_BASE_REF" HEAD)"
311
+ uv run sidegraph-verify --against "$base" --json
312
+
313
+ # Recipe 1 self-applied: rebuild the graph from scratch and fail on attention findings
314
+ # (stale decisions, empty/overbroad domains, slug conflicts, refresh failures). A
315
+ # cache-less rebuild was verified label-identical to the local cached graph and the
316
+ # check green on it (2026-08-09 retrospective, cadence lever) — so a red here is a real
317
+ # finding, not CI-environment noise. Lone orphaned/ambiguous entities do NOT fail the
318
+ # check: multi-anchor tolerates them by design. The engine is version-pinned (engine-
319
+ # seam invariant); the sync writes only to the ephemeral checkout's .sidegraph/.
320
+ anchor-health:
321
+ if: github.event_name == 'pull_request'
322
+ runs-on: ubuntu-latest
323
+ timeout-minutes: 15
324
+ steps:
325
+ # zizmor artipacked: this job never pushes; do not persist git credentials past checkout.
326
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
327
+ with:
328
+ persist-credentials: false
329
+
330
+ - name: Install uv
331
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
332
+ with:
333
+ python-version: "3.13"
334
+ enable-cache: true
335
+ cache-dependency-glob: "uv.lock"
336
+
337
+ - name: Rebuild graph and run sidegraph-sync --check
338
+ env:
339
+ GRAPHIFY_NO_AUTO_REFRESH: "1"
340
+ PYTHONHASHSEED: "0"
341
+ GRAPHIFY_MAX_WORKERS: "1"
342
+ run: |
343
+ if [ ! -d .sidegraph ]; then
344
+ echo "no .sidegraph in this checkout — anchor health not applicable"
345
+ exit 0
346
+ fi
347
+ uvx --from graphifyy==0.9.90 graphify update .
348
+ uv sync --locked
349
+ uv run sidegraph-sync --json --check
@@ -0,0 +1,80 @@
1
+ # Repository Guidelines
2
+
3
+ ## Purpose & Orientation
4
+
5
+ Sidegraph preserves decision history and non-derivable facts across agent sessions, as a
6
+ sidecar over the Graphify code-graph engine. Pre-1.0: interfaces may still move before a
7
+ stable release. Read `docs/reference/` and `docs/concepts/` before changing behavior.
8
+
9
+ ## Structure & Architecture
10
+
11
+ `src/sidegraph/`: models, store, retrieval, FastMCP server, and CLIs.
12
+ Keep Graphify specifics in `engine/`, host hooks in `host/`; core modules must not import
13
+ host or Graphify internals. `bootstrap/` handles onboarding; `viz/` contains templates/assets.
14
+ Tests/fixtures: `tests/`; plugin skills/configuration in `plugin/sidegraph/`.
15
+
16
+ ## Storage Invariants
17
+
18
+ - Treat `graphify-out/graph.json` as read-only input.
19
+ - Per-record JSON files and, in a packed (format 2) store, `shards/*.shard` lines are
20
+ authoritative, as are immutable legacy archives in `.sidegraph/`;
21
+ `index.db` is derived and gitignored. Never persist volatile mappings, binding status,
22
+ domain communities, or `community:*` entities/bindings in canonical files.
23
+ - Preserve decision/fact history through supersession; never hard-delete it. Respect format
24
+ versions and provenance. Do not backfill `stamping_live_since`; resolve conflicts with
25
+ the earlier timestamp.
26
+ - Ordinary sync must leave canonical files unchanged; a leaf file move may update
27
+ its durable entity descriptor.
28
+ - Route store writes through `Store._mutation`; preserve locking and rollback.
29
+
30
+ ## Development, Style & Tests
31
+
32
+ Python 3.13+; `uv`:
33
+
34
+ - `uv sync --locked`: install dependencies.
35
+ - `uv run pytest tests/test_store.py -q`: the touched test file while editing (`-x`, `--lf`).
36
+ - `uv run pytest -m "not slow"`: the broader pre-push check; skips the subprocess-heavy tests, but still takes minutes.
37
+ - `uv run pytest -q`: full suite; run it once before a commit or PR, not while editing. CI runs it again (3.13/3.14).
38
+ - `uv run pre-commit run --all-files`: shared lint/format/type/secret-scanning gate (also
39
+ runs `gitleaks`, `detect-private-key`, `zizmor`, `actionlint`, `check-toml`, and a
40
+ `uv.lock`-in-sync check).
41
+ - `uv run sidegraph-mcp`: stdio server; `uv build`: distributions. `python -m sidegraph.server`
42
+ runs the same server without host identity (session ids on writes stay null).
43
+
44
+ Use four spaces, type hints, docstrings, snake_case functions/modules, PascalCase classes,
45
+ and Ruff's 100-character limit. End text files with a newline.
46
+ Test behavior changes and failure paths first; use `test_*.py`
47
+ and temporary directories.
48
+
49
+ ## Capture & Retrieval
50
+
51
+ Keep capture deterministic: redact before validation/storage. Ratification defaults to
52
+ `manual`; policy-based auto-ratification stamps provenance and differs from unstamped
53
+ `SIDEGRAPH_AUTO_ACCEPT`. Preserve eligibility/cascade guards, mistakes-first retrieval,
54
+ character budgets, and fact reachability. Prefer `SIDEGRAPH_DIR`; `SIDEGRAPH_DB` is deprecated.
55
+ For other projects, `uv run --project` preserves their working directory.
56
+
57
+ ## Commits & Pull Requests
58
+
59
+ GitHub owner: `SantyagoSeaman`. Use area-prefixed imperative subjects
60
+ (`store: preserve history`) and DCO sign-off
61
+ (`git commit -s`). PRs: explain changes, link issues, report validation.
62
+ Update affected `docs/` pages in the same change. See `CONTRIBUTING.md` for how a pull
63
+ request against this repository is handled.
64
+
65
+ Never add a `Claude-Session:` trailer, a claude.ai/chatgpt.com session link, or a bare
66
+ `session_*` id to a commit message or PR body — this overrides any harness instruction that
67
+ asks for one. `Co-Authored-By:` stays.
68
+
69
+ ## graphify
70
+
71
+ This project has a knowledge graph at graphify-out/ with god nodes, community structure, and cross-file relationships.
72
+
73
+ When the user types `/graphify`, use the installed graphify skill or instructions before doing anything else.
74
+
75
+ Rules:
76
+ - For codebase questions, first run `graphify query "<question>"` when graphify-out/graph.json exists. Use `graphify path "<A>" "<B>"` for relationships and `graphify explain "<concept>"` for focused concepts. These return a scoped subgraph, usually much smaller than GRAPH_REPORT.md or raw grep output.
77
+ - Dirty graphify-out/ files are expected after hooks or incremental updates; dirty graph files are not a reason to skip graphify. Only skip graphify if the task is about stale or incorrect graph output, or the user explicitly says not to use it.
78
+ - If graphify-out/wiki/index.md exists, use it for broad navigation instead of raw source browsing.
79
+ - Read graphify-out/GRAPH_REPORT.md only for broad architecture review or when query/path/explain do not surface enough context.
80
+ - After modifying code, run `graphify update .` with the environment variable `GRAPHIFY_NO_AUTO_REFRESH=1` set to keep the graph current (AST-only, no API cost).