sidegraph 0.14.0__tar.gz → 0.16.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/workflows/ci.yml +6 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/CHANGELOG.md +75 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/CLAUDE.md +1 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/PKG-INFO +5 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/README.md +3 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/SECURITY.md +11 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/README.md +1 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/concepts/data-model.md +38 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/concepts/mind-model.md +5 -3
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/concepts/retrieval.md +17 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/getting-started/bootstrap.md +3 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/getting-started/installation.md +11 -9
- sidegraph-0.16.0/docs/guides/adr-export.md +134 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/ci-cd-maintenance.md +5 -0
- sidegraph-0.16.0/docs/guides/health-check.md +66 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/retrieval-in-sessions.md +27 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/troubleshooting.md +5 -4
- sidegraph-0.16.0/docs/guides/using-0.15.md +42 -0
- sidegraph-0.16.0/docs/guides/using-0.16.md +45 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/reference/cli.md +97 -21
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/reference/configuration.md +2 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/reference/hooks.md +126 -32
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/reference/mcp-tools.md +114 -37
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/reference/operations.md +16 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/reference/stability.md +3 -3
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/reference/store-format.md +120 -11
- {sidegraph-0.14.0 → sidegraph-0.16.0}/package.json +1 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/.muse-plugin/plugin.json +5 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/explain-why/SKILL.md +2 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +4 -2
- sidegraph-0.16.0/plugin/sidegraph/skills/health-check/SKILL.md +83 -0
- sidegraph-0.16.0/plugin/sidegraph/skills/health-check/scripts/collect.py +1100 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +13 -8
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/record-decision/SKILL.md +5 -4
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/record-fact/SKILL.md +6 -5
- sidegraph-0.16.0/plugin/sidegraph/skills/stats/agents/openai.yaml +6 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +36 -16
- {sidegraph-0.14.0 → sidegraph-0.16.0}/pyproject.toml +5 -4
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/__init__.py +1 -1
- sidegraph-0.16.0/src/sidegraph/adr.py +295 -0
- sidegraph-0.16.0/src/sidegraph/adr_cli.py +246 -0
- sidegraph-0.16.0/src/sidegraph/adr_files.py +313 -0
- sidegraph-0.16.0/src/sidegraph/adr_identity.py +47 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/model.py +4 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/planner.py +13 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/proof.py +4 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/cli.py +30 -5
- sidegraph-0.16.0/src/sidegraph/delivery.py +358 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/doc_import.py +7 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/doctor.py +170 -7
- sidegraph-0.16.0/src/sidegraph/drift_checks.py +209 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/gitio.py +33 -18
- sidegraph-0.16.0/src/sidegraph/host/diagnostics.py +60 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/host/hooks.py +309 -87
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/host/launch.py +10 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/host/subagent.py +53 -32
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/hot_index.py +173 -48
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/integrity.py +25 -8
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/nearest_anchored.py +33 -10
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/profiles.py +140 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/retrieval.py +243 -38
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/schema.py +71 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/seed_ladder.py +4 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/server.py +424 -35
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/stats/model.py +124 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/stats/render.py +36 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/store.py +310 -91
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/store_layout.py +41 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/sync.py +16 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/validation_errors.py +4 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/verify.py +42 -3
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/githooks_support.py +4 -0
- sidegraph-0.16.0/tests/test_adr.py +344 -0
- sidegraph-0.16.0/tests/test_adr_files.py +316 -0
- sidegraph-0.16.0/tests/test_adr_identity.py +96 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_proof.py +25 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bounded_listings.py +435 -0
- sidegraph-0.16.0/tests/test_cli_adr.py +338 -0
- sidegraph-0.16.0/tests/test_cli_compact.py +299 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_codex_plugin.py +9 -2
- sidegraph-0.16.0/tests/test_delivery_evidence.py +297 -0
- sidegraph-0.16.0/tests/test_delivery_stats.py +97 -0
- sidegraph-0.16.0/tests/test_delivery_surfaces.py +350 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_docs_claims.py +3 -4
- sidegraph-0.16.0/tests/test_drift_checks.py +701 -0
- sidegraph-0.16.0/tests/test_file_bound_retrieval.py +493 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_flow_profile.py +1 -0
- sidegraph-0.16.0/tests/test_health_check_skill.py +1195 -0
- sidegraph-0.16.0/tests/test_hook_body_compaction.py +295 -0
- sidegraph-0.16.0/tests/test_hook_contention.py +972 -0
- sidegraph-0.16.0/tests/test_hook_failure_diagnostics.py +468 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_hook_showings.py +41 -7
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_drift_nudge.py +3 -3
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_launch.py +2 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_pretool_records.py +110 -22
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_stop.py +1 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_hot_index.py +3 -1
- sidegraph-0.16.0/tests/test_hot_index_facts.py +797 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_hot_index_hook.py +2 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_integrity.py +4 -3
- sidegraph-0.16.0/tests/test_retrieval_seeds.py +436 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_write_boundary.py +1 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_annotations.py +2 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_decision_listing.py +22 -6
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_mcp_smoke.py +10 -3
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_session_attribution.py +1 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_skill_frontmatter.py +1 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_stats_model.py +159 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_stats_render.py +41 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_stop_rearm.py +15 -2
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_canonical_stat.py +34 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_compact.py +84 -4
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_compact_review.py +16 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_mutation_guard.py +50 -5
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_worktree_seeds.py +17 -25
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/wheel_smoke.py +1 -1
- {sidegraph-0.14.0 → sidegraph-0.16.0}/uv.lock +5 -5
- sidegraph-0.14.0/tests/test_cli_compact.py +0 -135
- sidegraph-0.14.0/tests/test_retrieval_seeds.py +0 -49
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.agents/plugins/marketplace.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.claude-plugin/marketplace.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/CODEOWNERS +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/secret_scanning.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/workflows/publish.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/workflows/scorecard.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.github/workflows/session-link-gate.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.gitignore +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.gitleaks.toml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.opencode/INSTALL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.pre-commit-config.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/.python-version +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/AGENTS.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/CODE_OF_CONDUCT.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/CONTRIBUTING.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/LICENSE +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/concepts/anchoring.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/concepts/decision-memory.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/getting-started/claude-code-setup.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/getting-started/codex-setup.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/getting-started/quickstart.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/capturing-decisions.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/migrating-to-0.14.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/naming-your-domains.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/semantic-docs.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/surviving-refactors.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/team-workflow.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/guides/verifying-your-setup.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/integrations/claude-code.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/integrations/codex.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/integrations/graphify.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/integrations/muse.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/integrations/opencode.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/llms.txt +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/pilot-kit/README.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/pilot-kit/corpus_fit.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/pilot-kit/judge-prompt.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/pilot-kit/questions-prompt.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/pilot-kit/rubric-template.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/reference/git-bindings.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/reference/releasing.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/docs/whitepaper/index.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/index.js +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/.mcp.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/codex/hooks.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/codex/mcp.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/hooks/hooks.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
- {sidegraph-0.14.0/plugin/sidegraph/skills/import-adrs → sidegraph-0.16.0/plugin/sidegraph/skills/health-check}/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
- {sidegraph-0.14.0/plugin/sidegraph/skills/manage-domains → sidegraph-0.16.0/plugin/sidegraph/skills/import-adrs}/agents/openai.yaml +0 -0
- {sidegraph-0.14.0/plugin/sidegraph/skills/name-domains → sidegraph-0.16.0/plugin/sidegraph/skills/manage-domains}/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
- {sidegraph-0.14.0/plugin/sidegraph/skills/setup → sidegraph-0.16.0/plugin/sidegraph/skills/name-domains}/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
- {sidegraph-0.14.0/plugin/sidegraph/skills/stats → sidegraph-0.16.0/plugin/sidegraph/skills/setup}/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/anchoring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bash_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/apply.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/catalog.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/cli.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/integrations.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/review.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/bootstrap/scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/capture.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/config.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/domain_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/engine/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/engine/rationale.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/engine/reader.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/freshness.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/gitenv.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/githooks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/host/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/host/claude_settings.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/host/mcp_entry.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/host/session_identity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/importer.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/input_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/okf.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/redaction_scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/redaction_tokens.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/stats/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/text_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/tool_rate_limit.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/viz/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/viz/model.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/viz/render.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/viz/template.html +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/worktree_seeds.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/src/sidegraph/write_boundary.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/conftest.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bitfinex_slice.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/member_names_python_graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/member_names_swift_graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/fixtures/mini_graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/graph_fixtures.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/opencode_plugin_runner.mjs +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/snapshot_support.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_agent_brief_manifests.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_anchor_descriptor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_anchor_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_anchoring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_anchoring_mapping_refresh.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_anchoring_membership.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bash_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_batch_panel_fixes.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_apply.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_catalog.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_cli.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_descriptor_cleanup.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_integrations.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_model.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_planner.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_review.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_scan_regular.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_bootstrap_unanchored.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_capture_auto_accept.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_capture_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_capture_initiative.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_capture_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_capture_neighbors.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_capture_propose.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_capture_redact.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_doctor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_domains_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_graph_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_import.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_init.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_init_hooks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_okf.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_ratify.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_ratify_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_stats.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_sync.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_sync_check.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_unreadable_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_cli_viz.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_command_windows.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_community_baseline.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_config.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_config_ancestor_lookup.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_config_borrowed_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_corpus_expected_renders.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_corpus_self_corpus.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_coverage_telemetry_e2e.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_digest_integrity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doc_corpus_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doc_import.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_auto_share.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_code_drift.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_dangling_supports.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_duplicate_entity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_graph_stale.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_integrity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_never_surfaced.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_stale_instructions.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_unhashable_payload.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_doctor_unratified_accept.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_domain_seed_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_domain_snapshot_format.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_domain_snapshot_notices.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_engine_build.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_entity_duplicate_resolution.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_entity_get_or_create_race.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_entry_point_arguments.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_env_isolation.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_fact_reachability_gate.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_git_bindings_blame.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_git_bindings_hook.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_git_bindings_provenance.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_git_config_isolation.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_git_env.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_git_output_utf8.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_githooks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_graph_freshness.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_graphify_pin.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_hook_payload_encoding.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_hook_spawn_guard.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_agent_brief.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_agent_state.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_borrowed_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_claude_settings.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_integrity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_pretool.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_session_key.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_session_start.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_session_start_concurrent.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_subagent_start.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_subdirectory_launch.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_touch_events.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_host_wiring_checks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_hot_path_imports.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_import_dry_run_preview.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_importer.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_index_journal_mode.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_installed_wheel_smoke.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_integrity_engine_version.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_integrity_refresh_hook.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_integrity_replay.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_integrity_stranded.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_lazy_root.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_mcp_entry_ratify_policy.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_mcp_entry_repo_root.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_member_anchor_wiring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_mind_model_additive_fields.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_muse_plugin.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_nearest_anchored.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_okf.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_opencode_plugin.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_openspec_profile.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_pathless_descriptor_adoption.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_portable_json.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_proposal_lifecycle.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_public_hook_launch.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_ratify_listing_gone_dark.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_ratify_policy.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_rationale_compatibility.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_community_labels.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_doc_nodes.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_engine_version.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_file_labels.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_label_conventions.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_member_name_lookup.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_member_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_nodes_in_file.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_perf.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_rationale.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_read.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_resolve.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_stub_collapse.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_subdir_mismatch.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_type_split.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_reader_version.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_rebuild_instruction.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_redaction_scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_redaction_seeded.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_redaction_tokens.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_repo_relative_paths_portable.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_repoint_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_budget_counters.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_context.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_drift_marker.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_drilldown.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_guessed.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_ids.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_membership_generations.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_membership_index.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_rank.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_shown_ids.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_terminal_evidence.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_thin_tools.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_toc.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_toptier.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_retrieval_unratified.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sandbox_hygiene.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_schema_descriptor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_schema_domain.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_schema_fact.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_secret_scan_gate.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_binary_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_capture_diagnostics.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_capture_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_cli_diagnostics.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_doc_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_input_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_mcp_write_diagnostics.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_numeric_enums.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_python_shapes.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_redaction_cursor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_redaction_scaling.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_security_validation_errors.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_seed_ladder.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_seed_paths_portable.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_add_anchors.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_anchoring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_argument_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_borrowed_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_capture.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_commit_hint.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_coverage_events.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_drilldown.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_find_entity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_get_store.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_get_task_context.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_graph_freshness.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_graph_path.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_import.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_invocation_policy.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_nearest_anchored.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_prewrite_anchor_validation.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_ratify_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_record_types.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_redaction.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_refresh.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_render_events.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_result_contract.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_supersede.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_sync_anchors.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_telemetry.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_thin_tools.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_tolerant_seeds.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_server_verify.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_stats_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_stats_health.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_stats_skill.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_stats_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_stop_hot_path.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_agent_state.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_bad_file.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_binding_index.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_concurrent_open.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_coverage_telemetry.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_cross_process_mutations.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_derived_community.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_domain_members.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_entities.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_fact_cascade.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_file_anchor_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_git_root_symlink.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_meta.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_migration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_mutation_immediate.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_non_file_entries.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_persistence.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_ratification.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_rebuild_atomicity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_record_identity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_record_types.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_render_events.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_requirement.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_retrieval.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_slug_conflicts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_snapshot_wiring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_stamping_marker.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_symlinks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_telemetry.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_threading.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_tmp_sweep_age.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_store_update_meta_if.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_subagent_start_manifests.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_subprocess_text_encoding.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_canonical_writes.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_clean.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_drift_cache.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_fresh_clone.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_membership.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_moved_adoption.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_rebind.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_repoint.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_report_has_findings.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_run.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_snapshot_membership.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_toc_cache.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_volatile_heal.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_sync_wiring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_telemetry_retention.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_text_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_verify_domain_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_verify_git_framing.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_verify_git_revisions.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_verify_git_stdin.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_verify_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_verify_transitions.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_viz_asset_packaged.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_viz_model.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_viz_render_html.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/test_viz_render_json.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tests/wheel_server_trace.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.16.0}/tools/check_no_session_links.py +0 -0
|
@@ -130,7 +130,7 @@ jobs:
|
|
|
130
130
|
interpreter="$environment/bin/python"
|
|
131
131
|
constraints=()
|
|
132
132
|
if [ "$SDK_PAIR" = minimum ]; then
|
|
133
|
-
constraints=(fastmcp==3.4.2 mcp==1.
|
|
133
|
+
constraints=(fastmcp==3.4.2 mcp==1.30.0)
|
|
134
134
|
fi
|
|
135
135
|
uv pip install --python "$interpreter" "$wheel" pytest "${constraints[@]}"
|
|
136
136
|
mkdir -p "$RUNNER_TEMP/sdk-check"
|
|
@@ -188,13 +188,17 @@ jobs:
|
|
|
188
188
|
uv run pytest -q --junitxml="$env:RUNNER_TEMP/windows-core.xml" `
|
|
189
189
|
tests/test_store_mutation_guard.py `
|
|
190
190
|
tests/test_store_mutation_immediate.py tests/test_store_cross_process_mutations.py `
|
|
191
|
+
tests/test_hook_contention.py tests/test_retrieval_seeds.py `
|
|
191
192
|
tests/test_portable_json.py tests/test_bootstrap_descriptor_cleanup.py `
|
|
192
193
|
tests/test_server_result_contract.py tests/test_server_invocation_policy.py `
|
|
193
194
|
tests/test_verify_git_stdin.py tests/test_seed_paths_portable.py `
|
|
194
195
|
tests/test_repo_relative_paths_portable.py `
|
|
195
196
|
tests/test_command_windows.py `
|
|
196
|
-
tests/test_hook_payload_encoding.py `
|
|
197
|
+
tests/test_hook_payload_encoding.py tests/test_hook_failure_diagnostics.py `
|
|
198
|
+
tests/test_hot_index_facts.py `
|
|
199
|
+
tests/test_delivery_evidence.py tests/test_delivery_stats.py tests/test_delivery_surfaces.py `
|
|
197
200
|
tests/test_git_output_utf8.py `
|
|
201
|
+
tests/test_health_check_skill.py `
|
|
198
202
|
$privateTests `
|
|
199
203
|
tests/test_installed_wheel_smoke.py
|
|
200
204
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
@@ -7,6 +7,81 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.16.0] — 2026-10-20
|
|
11
|
+
|
|
12
|
+
See [Using Sidegraph 0.16](docs/guides/using-0.16.md) for update, compatibility, and
|
|
13
|
+
limitation notes.
|
|
14
|
+
|
|
15
|
+
### Security
|
|
16
|
+
|
|
17
|
+
- Raise the minimum MCP Python SDK to 1.30.0, which includes the upstream fix for
|
|
18
|
+
[GHSA-84m7-p3x7-pcfv](https://github.com/advisories/GHSA-84m7-p3x7-pcfv). The supported
|
|
19
|
+
SDK major remains 1.
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- Add `/sidegraph:health-check`, a read-only installation report with six evidence sections
|
|
24
|
+
and prioritized manual recommendations. It uses an already identified Python interpreter
|
|
25
|
+
and skips doctor and stats paths when an existing SQLite index is unsafe to open.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Hook-owned SQLite handles now refuse lock contention immediately across session, stop,
|
|
30
|
+
tool-use and subagent entry paths. SessionStart's dedupe remains best-effort under overlap;
|
|
31
|
+
its graph, filesystem and Git work is outside this lock-wait bound.
|
|
32
|
+
- Retrieval and file listings reuse a lazy, per-call descriptor lookup, avoiding repeated
|
|
33
|
+
full entity scans while preserving seed selection and rendered output.
|
|
34
|
+
- `sidegraph-compact` reports distinct hot files retained when their content is not fully
|
|
35
|
+
represented in the immutable archive, with warnings that distinguish extra fields from
|
|
36
|
+
shared-value or structure differences.
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- `list_domains` now bounds its complete MCP text response and reports matched, returned and
|
|
41
|
+
omitted counts with whole rows. Its provisional return shape changes from a bare list to a
|
|
42
|
+
JSON-text envelope; exact domain-id and query filters can retrieve rows left out by the cap.
|
|
43
|
+
- `sidegraph-stats` withholds anchor health counts while a fresh index's binding statuses await
|
|
44
|
+
`sidegraph-sync`, while keeping the record inventory and reach figures available.
|
|
45
|
+
|
|
46
|
+
## [0.15.0] — 2026-10-18
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
|
|
50
|
+
- `sidegraph-export-adr` previews and explicitly writes profile-driven ADR sets with stable
|
|
51
|
+
identity, status/history links, full supporting evidence and preserved human notes.
|
|
52
|
+
Import and bootstrap withhold generated projections instead of duplicating memory.
|
|
53
|
+
|
|
54
|
+
- Explicit `record_drift_check` inspections preserve decision capture history and clear
|
|
55
|
+
only the checked advisory. Changed inspected files or anchor scope re-arm review;
|
|
56
|
+
immutable auxiliary evidence is linted without changing the shared store digest.
|
|
57
|
+
|
|
58
|
+
- Local delivery evidence distinguishes prepared answers, rendered record placements and
|
|
59
|
+
anchor relations, with record status at emission and explicit unknown/empty/error outcomes.
|
|
60
|
+
Stats keeps MCP and automatic hooks separate. Optional bounded index-only writes cannot
|
|
61
|
+
block delivery and retain no task/response text or hashes.
|
|
62
|
+
- Automatic point-of-read context and appended task briefs can include eligible facts with
|
|
63
|
+
their complete statement, source and id, using existing record caps and trust rules.
|
|
64
|
+
Fact lines over 512 characters are withheld whole; full facts remain available through
|
|
65
|
+
`list_facts`. SubagentStart's awareness counts still cover decisions only.
|
|
66
|
+
|
|
67
|
+
### Fixed
|
|
68
|
+
|
|
69
|
+
- Automatic file-read context and appended agent briefs replace later identical record bodies
|
|
70
|
+
within one answer with explicit references. First copies, per-file applicability, trust,
|
|
71
|
+
selection limits and journal placements stay intact; no state crosses calls or agents.
|
|
72
|
+
- Explicit file lookups return eligible decisions and facts by their exact durable file
|
|
73
|
+
binding when an available graph lacks the file, marked as file applicability with
|
|
74
|
+
unverified symbol anchors. Remaining-record pointers name both decision and fact listings.
|
|
75
|
+
- Failed lifecycle hooks emit at most one content-free diagnostic line on stderr while
|
|
76
|
+
preserving their existing fail-open output. Missing indexes and deliberate format
|
|
77
|
+
refusals remain quiet; diagnostics do not depend on the index or create a log file.
|
|
78
|
+
|
|
79
|
+
### Known limitations
|
|
80
|
+
|
|
81
|
+
- Selection still uses file/entity/domain context and can include off-task records.
|
|
82
|
+
Task-query ranking remains future work; this release makes no measured relevance or
|
|
83
|
+
time-saving claim. See the [0.15 update and case guide](https://github.com/SantyagoSeaman/sidegraph/blob/v0.15.0/docs/guides/using-0.15.md).
|
|
84
|
+
|
|
10
85
|
## [0.14.0] — 2026-10-16
|
|
11
86
|
|
|
12
87
|
### Graphify 0.9.90
|
|
@@ -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.
|
|
16
|
+
Sidegraph is pre-1.0 (v0.16.0) — the full loop (capture, ratification, mistakes-first
|
|
17
17
|
retrieval, refactor-surviving re-anchoring, semantic docs layer, mind-model domains, and the
|
|
18
18
|
facts evidence layer) ships and is exercised end-to-end, but interfaces may still move before
|
|
19
19
|
a stable release. See
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sidegraph
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.0
|
|
4
4
|
Summary: Own the memory, rent the graph — a durable decision/lessons layer as a sidecar over a code-graph engine.
|
|
5
5
|
Project-URL: Homepage, https://github.com/SantyagoSeaman/sidegraph
|
|
6
6
|
Project-URL: Repository, https://github.com/SantyagoSeaman/sidegraph
|
|
@@ -23,7 +23,7 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
23
23
|
Requires-Python: >=3.13
|
|
24
24
|
Requires-Dist: anyio>=4
|
|
25
25
|
Requires-Dist: fastmcp<4,>=3.4.2
|
|
26
|
-
Requires-Dist: mcp<2,>=1.
|
|
26
|
+
Requires-Dist: mcp<2,>=1.30
|
|
27
27
|
Requires-Dist: pydantic>=2.9
|
|
28
28
|
Requires-Dist: python-ulid>=3.0
|
|
29
29
|
Description-Content-Type: text/markdown
|
|
@@ -397,6 +397,9 @@ Contributions are reviewed here and carried over, with attribution, before the n
|
|
|
397
397
|
|
|
398
398
|
## Documentation
|
|
399
399
|
|
|
400
|
+
[Export and maintain ADRs](docs/guides/adr-export.md) from the available decision store,
|
|
401
|
+
with a preview by default and explicit writes.
|
|
402
|
+
|
|
400
403
|
[Getting started](docs/getting-started/installation.md) ·
|
|
401
404
|
[Concepts](docs/concepts/decision-memory.md) ·
|
|
402
405
|
[Guides](docs/guides/capturing-decisions.md) ·
|
|
@@ -367,6 +367,9 @@ Contributions are reviewed here and carried over, with attribution, before the n
|
|
|
367
367
|
|
|
368
368
|
## Documentation
|
|
369
369
|
|
|
370
|
+
[Export and maintain ADRs](docs/guides/adr-export.md) from the available decision store,
|
|
371
|
+
with a preview by default and explicit writes.
|
|
372
|
+
|
|
370
373
|
[Getting started](docs/getting-started/installation.md) ·
|
|
371
374
|
[Concepts](docs/concepts/decision-memory.md) ·
|
|
372
375
|
[Guides](docs/guides/capturing-decisions.md) ·
|
|
@@ -51,6 +51,17 @@ provider according to your repository's data policy. The runtime data boundary i
|
|
|
51
51
|
separate Graphify CLI against the LLM provider you configure. Review that provider's
|
|
52
52
|
data policy before using the pass on private documents.
|
|
53
53
|
|
|
54
|
+
## Scoped inspection history
|
|
55
|
+
|
|
56
|
+
`record_drift_check` writes immutable `.sidegraph/verifications/<id>.json` files intended
|
|
57
|
+
for source control. They contain a redacted rationale, decision id, UTC time, inspected
|
|
58
|
+
revision, repository-relative paths, Git blob ids and modes, a subject digest and agent
|
|
59
|
+
provenance. Author/session are currently unknown. There is no source body or transcript
|
|
60
|
+
in these files. Paths and Git content addresses are durable repository metadata; review
|
|
61
|
+
the rationale and paths before sharing a store. Redaction is best-effort and cannot
|
|
62
|
+
remove sensitive semantics from ordinary prose. These assertions can be wrong; they are
|
|
63
|
+
neither truth certificates nor ratification. Older runtimes ignore and preserve them.
|
|
64
|
+
|
|
54
65
|
## Secret hygiene
|
|
55
66
|
|
|
56
67
|
Text captured into decisions passes a redaction step before it is stored (API keys,
|
|
@@ -26,6 +26,7 @@ If the repository already has ADRs or specs, use the
|
|
|
26
26
|
## Operate and maintain it
|
|
27
27
|
|
|
28
28
|
- [Migrate an existing store to Sidegraph 0.14](guides/migrating-to-0.14.md).
|
|
29
|
+
- [Check a Sidegraph installation](guides/health-check.md).
|
|
29
30
|
- [Survive refactors and heal anchors](guides/surviving-refactors.md).
|
|
30
31
|
- [Read what Sidegraph tells you when it needs attention](guides/troubleshooting.md).
|
|
31
32
|
- [Run CI and scheduled maintenance](guides/ci-cd-maintenance.md).
|
|
@@ -286,3 +286,41 @@ The `Initiative` model below is a separate low-level persisted record supported
|
|
|
286
286
|
| `name` | str | The label as written at capture — a branch name or a short phrase. |
|
|
287
287
|
| `description` | str \| `null` | Optional one-liner; usually absent for branch-derived initiatives. |
|
|
288
288
|
| `tags` | list[str] | Stored strings on the low-level record; `upsert_initiative` does not slugify them or create `tag:*` entities. |
|
|
289
|
+
|
|
290
|
+
## `DriftCheck` — attributed auxiliary inspection
|
|
291
|
+
|
|
292
|
+
An optional immutable file under `.sidegraph/verifications/` records an explicit agent
|
|
293
|
+
judgment that an existing decision still holds. It preserves the decision and original
|
|
294
|
+
capture provenance; it never ratifies a proposal or proves semantic truth. It is outside
|
|
295
|
+
the shared canonical digest/index record tables. See
|
|
296
|
+
[scoped checks](../reference/store-format.md#scoped-drift-checks) and
|
|
297
|
+
[`record_drift_check`](../reference/mcp-tools.md#record_drift_check).
|
|
298
|
+
|
|
299
|
+
| Field | Type | Meaning |
|
|
300
|
+
|---|---|---|
|
|
301
|
+
| `schema_version` | literal `1` | Version of the auxiliary assertion and fixed subject-digest definition; independent of the store format version. |
|
|
302
|
+
| `id` | ULID | Generated check identity, also its immutable filename. Highest generated id is the deterministic per-decision selection rule, not causal ordering. |
|
|
303
|
+
| `decision_id` | str | Existing decision id; terminal or archived decisions remain valid history references. |
|
|
304
|
+
| `checked_at` | aware datetime | UTC time at which the assertion was recorded. |
|
|
305
|
+
| `checked_commit` | str | Full inspected Git HEAD object id, retained as provenance even after squash/clone removes the object locally. |
|
|
306
|
+
| `provenance` | `Provenance` | Source `agent`, commit equals checked revision; author/session currently unknown. |
|
|
307
|
+
| `rationale` | str | Nonblank explanation, redacted before validation; at most 4000 characters. |
|
|
308
|
+
| `required_files` | list[str] | Exact current required anchor-file set, separate from optional inspected dependencies. |
|
|
309
|
+
| `checked_files` | list[`CheckedCodeFile`] | Explicit inspected regular-file snapshots, covering every required file; 1–256 unique safe paths. |
|
|
310
|
+
| `subject_digest` | str | SHA-256 of fixed immutable decision/provenance fields and durable leaf descriptors; excludes lifecycle and volatile mapping/status fields. |
|
|
311
|
+
|
|
312
|
+
Changed inspected files/modes or required scope re-arm review. A matching snapshot after
|
|
313
|
+
an unrelated commit remains covered. A mistaken semantic assertion cannot be detected
|
|
314
|
+
from these hashes; a genuine successor corrects the decision and preserves the check as
|
|
315
|
+
history. Optional comparison failure has the bounded behavior described in store-format.
|
|
316
|
+
|
|
317
|
+
## `CheckedCodeFile` — inspected Git tree entry
|
|
318
|
+
|
|
319
|
+
Nested in `DriftCheck`; this stores repository metadata, never source bodies or engine
|
|
320
|
+
mappings. The total checked-path budget is 16384 UTF-8 bytes.
|
|
321
|
+
|
|
322
|
+
| Field | Type | Meaning |
|
|
323
|
+
|---|---|---|
|
|
324
|
+
| `path` | str | Safe repository-relative forward-slash path, at most 1024 UTF-8 bytes. |
|
|
325
|
+
| `blob_id` | str | Full Git content address of the inspected file. |
|
|
326
|
+
| `mode` | `100644` \| `100755` | Regular-file Git mode; mode changes participate in applicability. |
|
|
@@ -131,9 +131,11 @@ this matters in practice beyond an ordinary rename: freeing a community that a d
|
|
|
131
131
|
still claims (give the successor no matching `path_prefixes`/`seed_anchors` instead of
|
|
132
132
|
carrying the old rule forward).
|
|
133
133
|
|
|
134
|
-
**Listing.** `list_domains(status=None)`
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
**Listing.** `list_domains(status=None)` searches every status and returns whole domain rows
|
|
135
|
+
inside a bounded JSON-text envelope, with counts and a hint when filters or output limits omit
|
|
136
|
+
rows. Narrow by exact domain ids or query terms to reach a row from an omitted listing. Rows
|
|
137
|
+
include membership/lineage fields (`member_count`, `seed_anchor_count`, `parent_slug` and
|
|
138
|
+
`child_slugs`); this is the general "show me all domains" answer `list_proposed`
|
|
137
139
|
(proposed-only) and `list_domain_candidates` (unclaimed-only) don't cover.
|
|
138
140
|
|
|
139
141
|
## How domains relate to engine communities
|
|
@@ -103,6 +103,12 @@ an empty list with an explanatory `"note"` key — everything store-derived (`do
|
|
|
103
103
|
takes the seeds as `files` and `entities`): given what the agent is about to touch, return a compact slice of structure *and* memory, memory ranked so the things
|
|
104
104
|
most likely to save it from a repeat mistake come first.
|
|
105
105
|
|
|
106
|
+
Within one retrieval or file-list call, descriptor resolution shares a lazy, operation-scoped
|
|
107
|
+
lookup of parsed entities. It preserves the existing exact-path, pathless adoption, ambiguity,
|
|
108
|
+
and winner rules while avoiding a full entity-table parse for each graph node. The lookup is
|
|
109
|
+
discarded after the call; a later call sees entity changes. This is a performance-only change:
|
|
110
|
+
seed selection, record ranking, budgets, and rendered output are unchanged.
|
|
111
|
+
|
|
106
112
|
### Seeds
|
|
107
113
|
|
|
108
114
|
A `Seed` is either:
|
|
@@ -353,6 +359,17 @@ reported separately, by comparing the graph's build commit with `HEAD` (see
|
|
|
353
359
|
[the Graphify integration](../integrations/graphify.md#keeping-the-graph-fresh-git-hooks)), and
|
|
354
360
|
only a rebuild fixes it.
|
|
355
361
|
|
|
362
|
+
### File applicability outside the graph
|
|
363
|
+
|
|
364
|
+
When an available graph does not contain an explicitly requested file, the memory read
|
|
365
|
+
also checks exact durable descriptor paths. Eligible decisions and facts can then arrive as
|
|
366
|
+
`[file-bound]`: declared applicability to that file, with symbol anchors the graph cannot
|
|
367
|
+
verify. This reads no neighboring path as an exact match and changes no anchor or binding.
|
|
368
|
+
Ordinary verified seed routes take precedence over the marker. Named-entity requests,
|
|
369
|
+
ambiguous/directory guesses and graph-present orphan handling keep their existing rules;
|
|
370
|
+
with no graph reader at all, this fallback is unavailable. The file still appears in the
|
|
371
|
+
not-in-graph diagnostic, and proposal policy, history, mistakes-first and budgets still apply.
|
|
372
|
+
|
|
356
373
|
### Rendering
|
|
357
374
|
|
|
358
375
|
`TaskContext.render()` emits, in order: **Known mistakes & gotchas**, **Decisions** (with any
|
|
@@ -82,6 +82,7 @@ warning code is rendered beside the consequence of accepting it anyway:
|
|
|
82
82
|
|
|
83
83
|
| Warning code | Consequence of accepting |
|
|
84
84
|
| --- | --- |
|
|
85
|
+
| `generated-projection` | generated ADRs are projections of existing memory, not new capture evidence |
|
|
85
86
|
| `missing-choice` | the document states no decision; the record would carry only context |
|
|
86
87
|
| `missing-rejected-alternatives` | no rejected alternatives were found; the most valuable field stays empty |
|
|
87
88
|
| `unresolved-anchor` | the anchor does not resolve; the record would not surface for that code |
|
|
@@ -112,7 +113,8 @@ stored. There is no default accept-all action.
|
|
|
112
113
|
Bootstrap reports four outcomes independently: store, anchors, host integration, and
|
|
113
114
|
production-path proof. Proof selects an accepted, currently valid decision with a resolved
|
|
114
115
|
tier-2 anchor and calls the same `get_task_context` production retrieval path used by agent
|
|
115
|
-
sessions.
|
|
116
|
+
sessions. File-bound applicability remains useful retrieval, but does not satisfy this
|
|
117
|
+
current-graph anchor proof. Optional domain suggestions do not block that proof.
|
|
116
118
|
|
|
117
119
|
| Host | MCP | SessionStart | Stop | Read/Grep PreToolUse | Completion label |
|
|
118
120
|
| --- | --- | --- | --- | --- | --- |
|
|
@@ -24,18 +24,18 @@ installs a non-editable wheel outside the checkout, checks its package bytes aga
|
|
|
24
24
|
artifact, runs a CLI, and exchanges real MCP stdio messages in a Unicode/spaced directory.
|
|
25
25
|
The exact selection is in [the CI workflow](../../.github/workflows/ci.yml).
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
For the 0.14.0 release-candidate campaign, real Claude Code and Codex sessions ran with the
|
|
28
28
|
installed plugin, in fresh host profiles, on Windows Server 2022 x64 and macOS 15 arm64,
|
|
29
|
-
each with Python 3.13 and 3.14. Each run
|
|
29
|
+
each with Python 3.13 and 3.14. Each run was the full plugin session for both hosts: the
|
|
30
30
|
plugin's MCP server, `SessionStart` context, records before a Read, a bundled skill, a
|
|
31
31
|
subagent brief, the `Stop` capture prompt, capture and ratification, and recall in a fresh
|
|
32
|
-
session. The project folder and host profile paths
|
|
32
|
+
session. The project folder and host profile paths contained a non-ASCII character.
|
|
33
33
|
|
|
34
34
|
**0.14.0 publication gate:** Claude Code 2.1.296 and Codex CLI 0.162.1 on all four cells
|
|
35
35
|
above, including a Windows 3.14 cell with PowerShell 7 unavailable for preflight and both
|
|
36
36
|
real host sessions. Windows 3.13 retains PowerShell 7; its launcher checks also cover 5.1.
|
|
37
|
-
Stable publication
|
|
38
|
-
README's blue badges summarize release acceptance, rather than live workflow status or
|
|
37
|
+
Stable publication of 0.14.0 required the full gate to pass without a known-issue exception.
|
|
38
|
+
The README's blue badges summarize release acceptance, rather than live workflow status or
|
|
39
39
|
support for every published version. Muse and OpenCode have the narrower coverage in
|
|
40
40
|
their installation guides and are outside this native matrix.
|
|
41
41
|
|
|
@@ -45,14 +45,15 @@ with Git for Windows installed; they do not establish support for Windows hosts
|
|
|
45
45
|
remains outside these checks.
|
|
46
46
|
See [Windows](#windows) before installing a host plugin.
|
|
47
47
|
|
|
48
|
-
Package dependencies support `fastmcp>=3.4.2,<4` and `mcp>=1.
|
|
48
|
+
Package dependencies support `fastmcp>=3.4.2,<4` and `mcp>=1.30,<2`. Major SDK upgrades
|
|
49
49
|
require a separate compatibility review; an unlocked package install may resolve newer
|
|
50
50
|
versions within those bounds than the development lockfile.
|
|
51
51
|
|
|
52
52
|
### Windows
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
Current native CI covers selected core/MCP checks, wheel installation, CLI execution, and
|
|
55
|
+
MCP stdio paths; WSL is not a separate CI target. Full Windows plugin sessions were exercised
|
|
56
|
+
in the historical 0.14.0 release-candidate campaign described above.
|
|
56
57
|
|
|
57
58
|
**Version requirement:** releases before 0.12.0 can stall a native Windows write: a Git
|
|
58
59
|
child inherits the MCP stdin pipe and holds the write until the request times out (see
|
|
@@ -274,7 +275,7 @@ setup, scripted/CI use, and the two deliberately human-run jobs (`sidegraph-impo
|
|
|
274
275
|
| `sidegraph-stop` | `Stop` hook — nudges the agent to distill decisions. |
|
|
275
276
|
| `sidegraph-pre-tool-use` | `PreToolUse` hook — hands the agent the records anchored to a file when it reads or edits it (`Read`, `Grep`, `Edit`, `Write`, and `sed`/`grep`/`rg`/`cat` in Bash). |
|
|
276
277
|
| `sidegraph-subagent-start` | `SubagentStart` hook — tells a starting subagent that decision memory exists and how to ask it. |
|
|
277
|
-
| `sidegraph-bootstrap` | Guided CLI — scan one of
|
|
278
|
+
| `sidegraph-bootstrap` | Guided CLI — scan one of seven supported ADR/spec profiles, preview and review candidates, write only after confirmation, verify anchors/host integration, and prove production retrieval. |
|
|
278
279
|
| `sidegraph-init` | CLI — bootstrap `.sidegraph/` in a repo: create the store, check for the graph, ask (in a terminal) whether to install the git hook that keeps the graph fresh (`--hooks`, `--no-hooks`, `--remove-hooks`), print the plugin install path (and the no-plugin `claude mcp add` alternative). |
|
|
279
280
|
| `sidegraph-ratify` | CLI — review/accept/drop proposed decisions, facts, and domains. |
|
|
280
281
|
| `sidegraph-sync` | CLI — re-anchor the store after a Graphify rebuild. |
|
|
@@ -285,6 +286,7 @@ setup, scripted/CI use, and the two deliberately human-run jobs (`sidegraph-impo
|
|
|
285
286
|
| `sidegraph-verify` | CLI — lint the store's canonical files against its write-path invariants (schema, validity windows, referential integrity, ULID uniqueness); `--against <git-ref>` additionally checks that every store file changed vs that ref was mutated legally (CI mode). |
|
|
286
287
|
| `sidegraph-doctor` | CLI — one-stop store health: composes `sidegraph-verify`'s strict lint with an advisory curation pass (stale proposals, dangling/degraded/orphaned records, never-surfaced decisions); `--check` also fails on advisory findings. |
|
|
287
288
|
| `sidegraph-viz` | CLI — render an interactive HTML/JSON view of decisions, facts, entities, anchor status, supersession, and evidence links. |
|
|
289
|
+
| `sidegraph-export-adr` | CLI — preview ADR projections and diffs from canonical memory; explicitly write managed documents with preserved human notes. See [ADR export](../guides/adr-export.md). |
|
|
288
290
|
| `sidegraph-export-okf` | CLI — project the store into a deterministic [Open Knowledge Format v0.1](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf) bundle any OKF-aware tool can read; strictly one-way, the store stays the source of truth. |
|
|
289
291
|
| `sidegraph-stats` | CLI — one screen of local usage statistics from the gitignored index (how often memory was asked for, how much of the code worked on has memory anchored to it, what the store holds, anchor health); read-only, never creates the index, `--json` for the same report as data. Reachable in a session as `/sidegraph:stats`. |
|
|
290
292
|
| `sidegraph-prepare-commit-msg` | `prepare-commit-msg` git hook — comments candidate `Sidegraph-Decision:` trailers into the commit message template; fail-open with bounded git/SQLite stages. See [`reference/git-bindings.md`](../reference/git-bindings.md). |
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Export and maintain ADRs
|
|
2
|
+
|
|
3
|
+
`sidegraph-export-adr` makes stored architectural decisions readable as Markdown ADRs.
|
|
4
|
+
It projects the memory you have; it does not infer a complete architecture from the code.
|
|
5
|
+
Preview first, then run the same command with `--write` after reviewing its diff:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
uv run sidegraph-export-adr --db .sidegraph --out docs/adr
|
|
9
|
+
uv run sidegraph-export-adr --db .sidegraph --out docs/adr --write
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The default is a read-only preview. It creates no directories or files. Neither preview
|
|
13
|
+
nor write opens a `Store`, migrates it, updates its index, or writes `graph.json`. The source
|
|
14
|
+
must already be a valid canonical store; migrate legacy databases explicitly with
|
|
15
|
+
`sidegraph-init` first. Exported text can contain private reasoning: review the diff before
|
|
16
|
+
putting it in tracked or shared documentation.
|
|
17
|
+
|
|
18
|
+
## What is exported
|
|
19
|
+
|
|
20
|
+
Each accepted, superseded or deprecated `adr` or `constraint` becomes a document. Proposed
|
|
21
|
+
and rejected records stay out. Acceptance status is the trust boundary; legacy accepted
|
|
22
|
+
records need not have a ratifier-name stamp. Context, choice, rejected alternatives and
|
|
23
|
+
consequences come from the record. Missing optional reasoning says `Not recorded.`
|
|
24
|
+
|
|
25
|
+
A fixed footer retains status, validity, history, source pointers, durable code descriptors
|
|
26
|
+
and complete accepted, unclosed supporting facts. Even a future `valid_to` closes a fact;
|
|
27
|
+
the exporter never infers a sample size or runtime qualifier. A successor of another kind
|
|
28
|
+
links to its source record rather than a nonexistent ADR. `index.md` groups documents by
|
|
29
|
+
explicit accepted domain bindings, otherwise under Unassigned. These are membership
|
|
30
|
+
intent and durable descriptors, not claims of current graph resolution.
|
|
31
|
+
|
|
32
|
+
Document-derived records identify their original source and remain orientation to check
|
|
33
|
+
against the artifact and current code. Lessons and gotchas are not turned into ADRs or
|
|
34
|
+
inferred pitfalls just because they share an anchor.
|
|
35
|
+
|
|
36
|
+
## Format and filenames
|
|
37
|
+
|
|
38
|
+
The flow profile supplies output data; `generic-adr` uses Nygard-style sections and `madr`
|
|
39
|
+
uses MADR-style headings. Existing flow readers retain their dialects and ingest globs.
|
|
40
|
+
|
|
41
|
+
| Profile | Default output below the store's parent |
|
|
42
|
+
|---|---|
|
|
43
|
+
| `generic-adr`, `madr` | `docs/adr` |
|
|
44
|
+
| `superpowers` | `docs/superpowers/adr` |
|
|
45
|
+
| `genkovich-sdd` | `docs/features/sidegraph/adr` |
|
|
46
|
+
| `spec-kit` | `specs/sidegraph/adr` |
|
|
47
|
+
| `bmad` | `_bmad-output/sidegraph-adr` |
|
|
48
|
+
| `openspec` | `openspec/adr` |
|
|
49
|
+
|
|
50
|
+
These are separate ADR projections, not replacements for live flow artifacts. Creating a
|
|
51
|
+
profile's directory can affect structural bootstrap detection (`docs/adr`,
|
|
52
|
+
`docs/superpowers` or `docs/features`). Detection does not mean import candidates exist.
|
|
53
|
+
MADR has no detection marker. Use `--out` to choose a different directory.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
uv run sidegraph-export-adr --profile madr --out docs/adr
|
|
57
|
+
uv run sidegraph-export-adr --filename '{number:04d}-{id}.md'
|
|
58
|
+
uv run sidegraph-export-adr --template adr-template.txt --out docs/adr
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Default filenames contain the stable record ID. Numbered patterns append new numbers;
|
|
62
|
+
existing generated records keep their number and filename when older IDs arrive or the
|
|
63
|
+
pattern changes. Patterns permit only `{id}` and `{number}` with an optional decimal width
|
|
64
|
+
of one to eight digits, must contain the ID, and produce a flat portable `.md` basename.
|
|
65
|
+
They cannot target `index.md`, a device name, or a path outside the output directory.
|
|
66
|
+
|
|
67
|
+
A custom template is a regular UTF-8 file up to 64 KiB, using literal text and
|
|
68
|
+
`string.Template` placeholders. It must include `$title`, `$context`, `$choice`, `$rejected`
|
|
69
|
+
and `$consequences`; `$$` prints a dollar sign. Optional fields are `$kind`, `$status`,
|
|
70
|
+
`$valid_from`, `$valid_to`, `$evidence`, `$anchors`, `$domains`, `$supersedes`, `$successors`,
|
|
71
|
+
`$record_link` and `$source`. The fixed footer remains even if the template omits these.
|
|
72
|
+
Default templates avoid duplicating it. Unknown placeholders or reserved marker lines are
|
|
73
|
+
errors. The generated ownership marker precedes the template, so template YAML frontmatter
|
|
74
|
+
is not at the first byte of the generated file.
|
|
75
|
+
|
|
76
|
+
## Keep human edits
|
|
77
|
+
|
|
78
|
+
A generated file has a checksummed region followed by `Local notes`. Add human commentary
|
|
79
|
+
after that region; updates preserve those trailing bytes. If an update writes a file whose
|
|
80
|
+
last line lacks a newline, it appends the repository-required final newline.
|
|
81
|
+
|
|
82
|
+
Changing generated prose, its ID or its number produces a conflict. The complete edited
|
|
83
|
+
file survives; the command does not replace it even with `--write`. Move additions to
|
|
84
|
+
Local notes, review the source record and the diff, then resolve the generated region
|
|
85
|
+
explicitly. There is no force-overwrite or fuzzy title-matching mode.
|
|
86
|
+
|
|
87
|
+
Checksums bind protocol version, ID, number and LF-normalized body. CRLF/BOM checkouts are
|
|
88
|
+
accepted, and equivalent generated content remains a no-op. This detects accidental edits;
|
|
89
|
+
it is not authentication against someone deliberately recomputing the checksum. Authored
|
|
90
|
+
opening/closing marker lines are escaped to prevent nested ownership regions. In a code
|
|
91
|
+
fence that escaping is visible as `<`; the canonical source keeps the original text.
|
|
92
|
+
|
|
93
|
+
An unmanaged destination, duplicate generated ID/number, or case-insensitive filename
|
|
94
|
+
collision is a conflict. A human filename prefix of one to eight digits followed by `-`
|
|
95
|
+
or `_` reserves a sequence number; longer timestamps and unseparated digits do not.
|
|
96
|
+
Numbers stop at 99999999 with an explicit error. A later human/generated number overlap
|
|
97
|
+
warns and keeps both files and existing numbers unchanged. Exact destination collisions
|
|
98
|
+
still refuse the complete plan.
|
|
99
|
+
An imported human ADR already in the chosen directory is linked rather than copied.
|
|
100
|
+
Generated files outside the current export population remain for manual review; they are
|
|
101
|
+
never deleted or listed as current. Symlinked output components and nonregular targets are
|
|
102
|
+
refused, as is output inside the source store.
|
|
103
|
+
|
|
104
|
+
A plan containing a conflict applies no files. Writes recheck exact before bytes, create
|
|
105
|
+
new files exclusively and replace existing files atomically while retaining their mode.
|
|
106
|
+
The batch is not a transaction: an I/O failure or later concurrent edit can leave earlier
|
|
107
|
+
files applied, or a partial new file. The report marks an incomplete attempted write;
|
|
108
|
+
review the remaining diff before retrying. No protection against an adversarial ancestor
|
|
109
|
+
replacement or a simultaneous source/index-mode change is claimed.
|
|
110
|
+
|
|
111
|
+
## Drift and round trips
|
|
112
|
+
|
|
113
|
+
Code drift is advisory output, not rewritten ADR prose. A completed capture-to-HEAD check
|
|
114
|
+
can report a changed anchored file; it does not prove semantic invalidity. Missing stamps,
|
|
115
|
+
uncomputed binding statuses or failed checks remain unknown. Closed/archived decisions are
|
|
116
|
+
not applicable. Uncommitted source edits are outside this existing drift check.
|
|
117
|
+
|
|
118
|
+
The command reuses the doctor's bounded scan for an available rollback index. A WAL index
|
|
119
|
+
is left unopened because even SQLite read-only connections can create auxiliary WAL/SHM
|
|
120
|
+
files; drift is then unknown. The format check follows SQLite's
|
|
121
|
+
[file-header contract](https://www.sqlite.org/fileformat2.html#file_format_version_numbers).
|
|
122
|
+
This preserves source files rather than claiming a clean result from an unavailable check.
|
|
123
|
+
|
|
124
|
+
Generated ADRs are **projections, not new capture evidence**. Both document import and
|
|
125
|
+
bootstrap recognize reserved projection claims and skip them, including changed content,
|
|
126
|
+
foreign IDs and unknown marker versions. Fenced, indented and inline examples are ordinary
|
|
127
|
+
human documents. Import reports `skipped_generated_adr`; bootstrap shows
|
|
128
|
+
`generated-projection`. To transfer memory between repositories, use the canonical store,
|
|
129
|
+
not generated ADRs. This command is separate from the one-way OKF bundle export.
|
|
130
|
+
|
|
131
|
+
`--json` gives planned changes/diffs, advisories, warnings, counts and write-completion
|
|
132
|
+
flags. Exit 0 means successful preview/write, including a valid empty store's empty index;
|
|
133
|
+
2 means invalid input/store, a conflict or operational failure. Review partial-write flags
|
|
134
|
+
before assuming a failed write applied nothing.
|
|
@@ -403,3 +403,8 @@ drafts. Proposed content stays below accepted memory and may be hidden by regula
|
|
|
403
403
|
`add_anchors`'s MCP shapes.
|
|
404
404
|
- [`guides/team-workflow.md`](team-workflow.md) — committing `.sidegraph/` as an ordinary
|
|
405
405
|
part of the repo, outside of CI.
|
|
406
|
+
|
|
407
|
+
Scoped drift checks are committed auxiliary history under `.sidegraph/verifications/`.
|
|
408
|
+
Use the current `sidegraph-verify` for their schema/reference checks and write-once
|
|
409
|
+
`--against` enforcement; older verifiers ignore them. CI should not create semantic
|
|
410
|
+
inspection assertions automatically merely to obtain fewer drift warnings.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Check a Sidegraph installation
|
|
2
|
+
|
|
3
|
+
Use `/sidegraph:health-check` to collect one read-only report for the current repository.
|
|
4
|
+
It covers plugin wiring, runtime versions, Graphify, store integrity, anchor advisories, and
|
|
5
|
+
inventory and usage. `UNKNOWN` means the evidence could not be established; it remains a
|
|
6
|
+
warning and never becomes a clean result.
|
|
7
|
+
|
|
8
|
+
## Runtime requirement
|
|
9
|
+
|
|
10
|
+
The skill runs its local `scripts/collect.py` helper with `-B` under an already identified
|
|
11
|
+
Python interpreter. In a development checkout, the supported paths are:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
"<project>/.venv/bin/python" -B "<skill-directory>/scripts/collect.py" --project "<launch-directory>" --host claude
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
For Codex, pass `--host codex`; use `unknown` when the attached host is not known. On Windows,
|
|
18
|
+
use the existing `<project>/.venv/Scripts/python.exe`. Installed use requires a
|
|
19
|
+
known interpreter from attached host launch metadata or metadata for an identified Sidegraph
|
|
20
|
+
environment. The collector does not guess a Python on `PATH`, run an unknown Sidegraph
|
|
21
|
+
executable, or use `uv`/`uvx` as its launcher. If no suitable interpreter is known, the skill
|
|
22
|
+
shows all six sections as limited, includes safe static evidence already available, lists
|
|
23
|
+
manual recommendations, and stops. The same fallback applies when the helper exits nonzero,
|
|
24
|
+
prints error JSON, or cannot import required inspection helpers; show only the error class and
|
|
25
|
+
do not echo exception text. Cached package files alone do not authorize provisioning.
|
|
26
|
+
|
|
27
|
+
The skill resolves the Git root to select the interpreter, then passes the original launch
|
|
28
|
+
directory as `--project` so Claude plugin-scope checks retain the launch context. The optional
|
|
29
|
+
`--store`, `--graph`, and `--plugin-root` arguments are for
|
|
30
|
+
paths already known to the host or user; the collector does not search unrelated profiles.
|
|
31
|
+
|
|
32
|
+
## Evidence and limits
|
|
33
|
+
|
|
34
|
+
The report separates the collector package, plugin manifest, optional PATH installation,
|
|
35
|
+
Graphify-recorded engine version, and any already observed active MCP evidence. Static
|
|
36
|
+
registration is not proof that a running server answered. The workflow never starts a server
|
|
37
|
+
or calls retrieval tools to test connectivity.
|
|
38
|
+
|
|
39
|
+
The collector fingerprints the canonical store, index and sidecars, settings, plugin
|
|
40
|
+
manifests, graph inputs, and actual Git index around its process. This is a stable-source
|
|
41
|
+
check, not an atomic snapshot; concurrent writes make preservation evidence unstable without
|
|
42
|
+
identifying which process changed it. Host hooks surrounding tool invocation are outside the
|
|
43
|
+
collector's preservation boundary.
|
|
44
|
+
|
|
45
|
+
If the index is absent, canonical-only doctor curation still runs, and index-dependent
|
|
46
|
+
findings and stats are marked skipped. If an existing index has WAL/SHM sidecars, an
|
|
47
|
+
unrecognized header, an unreadable header, or a nonempty rollback journal, all doctor
|
|
48
|
+
advisory and stats paths that could open it are skipped. A regular rollback-mode index allows
|
|
49
|
+
the existing doctor and stats checks to run. Cold or stale index qualifications are retained.
|
|
50
|
+
|
|
51
|
+
The six report sections distinguish contract violations from advisory findings and missing
|
|
52
|
+
coverage. Inventory counts come from canonical readers. Pending age is unknown for malformed
|
|
53
|
+
record identifiers. Usage reports summarize recorded activity only; delivery counts do not
|
|
54
|
+
show usefulness, prevented errors, or saved time. Records on unmerged or remote-only branches
|
|
55
|
+
are not exhaustively checked.
|
|
56
|
+
|
|
57
|
+
## Manual follow-up
|
|
58
|
+
|
|
59
|
+
Recommendations are prioritized and deduplicated, with a reason, explicit scope, argv, working
|
|
60
|
+
directory, and environment for a manual command or skill to run after the report. Render argv
|
|
61
|
+
with the attached shell's native quoting; paths are never embedded into shell snippets. The
|
|
62
|
+
health check never executes recommendations. Ordinary doctor and stats reads
|
|
63
|
+
outside this collector can create SQLite sidecars for a WAL database, so inspect such an
|
|
64
|
+
index separately after the writing session. Ending a session does not guarantee a persistent
|
|
65
|
+
journal-mode change. Do not recommend an upgrade from an unknown version or install the
|
|
66
|
+
optional PATH CLI solely because it is absent.
|
|
@@ -109,8 +109,14 @@ no query. All three read the store's index directly, so each costs a few tens of
|
|
|
109
109
|
carries no records: the subagent asks `get_task_context` for the files it works on.
|
|
110
110
|
`SIDEGRAPH_SUBAGENT_BRIEF=off` stops it.
|
|
111
111
|
|
|
112
|
-
The first two channels deliver
|
|
113
|
-
|
|
112
|
+
The first two channels can deliver eligible facts as well as decisions, within the same record
|
|
113
|
+
caps. Facts keep their whole statement and source; fact lines longer than 512 characters are
|
|
114
|
+
withheld whole and remain available through `list_facts`. Within one answer or appended brief,
|
|
115
|
+
a later identical record may say `See above` with its kind, trust marker and ID under each
|
|
116
|
+
applicable file. The first copy remains complete for that surface. No state crosses calls or
|
|
117
|
+
agents, and saved characters do not buy extra records. Existing once-per-file claims remain;
|
|
118
|
+
use `get_task_context` for fuller decision context and `list_facts` for whole facts.
|
|
119
|
+
These two channels exist on Claude Code only. `SubagentStart` runs on Claude Code and on
|
|
114
120
|
Codex. The wiring is in the [hooks reference](../reference/hooks.md#sidegraph-pre-tool-use).
|
|
115
121
|
|
|
116
122
|
## Asking task-scoped questions so `get_task_context` fires with the right seeds
|
|
@@ -139,6 +145,15 @@ Vague, non-task questions ("what does this project do") don't give the tool anyt
|
|
|
139
145
|
on — be concrete about the file or symbol so the retrieval has something to resolve. A call with
|
|
140
146
|
no seeds at all says so, and names the domains you can drill into.
|
|
141
147
|
|
|
148
|
+
When an available graph does not contain an explicitly requested file, the memory read
|
|
149
|
+
also checks exact durable descriptor paths. Eligible decisions and facts can then arrive as
|
|
150
|
+
`[file-bound]`: declared applicability to that file, with symbol anchors the graph cannot
|
|
151
|
+
verify. This reads no neighboring path as an exact match and changes no anchor or binding.
|
|
152
|
+
Ordinary verified seed routes take precedence over the marker. Named-entity requests,
|
|
153
|
+
ambiguous/directory guesses and graph-present orphan handling keep their existing rules;
|
|
154
|
+
with no graph reader at all, this fallback is unavailable. The file still appears in the
|
|
155
|
+
not-in-graph diagnostic, and proposal policy, history, mistakes-first and budgets still apply.
|
|
156
|
+
|
|
142
157
|
## Reading the output blocks
|
|
143
158
|
|
|
144
159
|
`get_task_context` renders up to six Markdown sections, in this order, each one skipped
|
|
@@ -271,3 +286,13 @@ The SessionStart pending-ratification counter is exempt from both: it reports th
|
|
|
271
286
|
size **and the oldest item's age** even when nothing in it renders, because a queue you
|
|
272
287
|
cannot see is exactly the one that rots. `sidegraph-doctor` adds the latency counterpart
|
|
273
288
|
(`time-to-ratify`) once records carry the ratifier stamp.
|
|
289
|
+
|
|
290
|
+
## When a drift warning remains after inspection
|
|
291
|
+
|
|
292
|
+
`[drifted]` requests a content review; a moved file alone does not invalidate a decision.
|
|
293
|
+
Use `sidegraph:triage-drift` to read the claim and current code. If the claim still holds,
|
|
294
|
+
`record_drift_check` can append a justified inspection of the current clean committed
|
|
295
|
+
files without changing the decision. If it no longer holds, propose a real successor.
|
|
296
|
+
The [tool reference](../reference/mcp-tools.md#record_drift_check) describes refusal cases
|
|
297
|
+
and coverage. Changed inspected files or scope re-arm the warning; unrelated commits do
|
|
298
|
+
not. The check is an attributed assertion and can be wrong.
|