sidegraph 0.14.0__tar.gz → 0.15.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.15.0}/.github/workflows/ci.yml +3 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/CHANGELOG.md +39 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/CLAUDE.md +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/PKG-INFO +4 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/README.md +3 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/SECURITY.md +11 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/concepts/data-model.md +38 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/concepts/retrieval.md +11 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/getting-started/bootstrap.md +3 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/getting-started/installation.md +2 -1
- sidegraph-0.15.0/docs/guides/adr-export.md +134 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/ci-cd-maintenance.md +5 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/retrieval-in-sessions.md +27 -2
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/troubleshooting.md +5 -4
- sidegraph-0.15.0/docs/guides/using-0.15.md +42 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/reference/cli.md +58 -4
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/reference/configuration.md +2 -2
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/reference/hooks.md +112 -25
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/reference/mcp-tools.md +69 -11
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/reference/operations.md +16 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/reference/stability.md +3 -3
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/reference/store-format.md +105 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/package.json +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/.muse-plugin/plugin.json +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/explain-why/SKILL.md +2 -2
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/record-decision/SKILL.md +5 -4
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/record-fact/SKILL.md +6 -5
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +36 -16
- {sidegraph-0.14.0 → sidegraph-0.15.0}/pyproject.toml +2 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/__init__.py +1 -1
- sidegraph-0.15.0/src/sidegraph/adr.py +295 -0
- sidegraph-0.15.0/src/sidegraph/adr_cli.py +246 -0
- sidegraph-0.15.0/src/sidegraph/adr_files.py +313 -0
- sidegraph-0.15.0/src/sidegraph/adr_identity.py +47 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/model.py +4 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/planner.py +13 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/proof.py +4 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/cli.py +10 -0
- sidegraph-0.15.0/src/sidegraph/delivery.py +358 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/doc_import.py +7 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/doctor.py +151 -3
- sidegraph-0.15.0/src/sidegraph/drift_checks.py +209 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/gitio.py +31 -17
- sidegraph-0.15.0/src/sidegraph/host/diagnostics.py +60 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/host/hooks.py +291 -74
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/host/launch.py +10 -2
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/host/subagent.py +52 -32
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/hot_index.py +171 -47
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/integrity.py +25 -8
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/nearest_anchored.py +33 -10
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/profiles.py +140 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/retrieval.py +224 -30
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/schema.py +71 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/seed_ladder.py +4 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/server.py +280 -16
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/stats/model.py +118 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/stats/render.py +34 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/store.py +92 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/store_layout.py +6 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/validation_errors.py +4 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/verify.py +42 -3
- sidegraph-0.15.0/tests/test_adr.py +344 -0
- sidegraph-0.15.0/tests/test_adr_files.py +316 -0
- sidegraph-0.15.0/tests/test_adr_identity.py +96 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_proof.py +25 -0
- sidegraph-0.15.0/tests/test_cli_adr.py +338 -0
- sidegraph-0.15.0/tests/test_delivery_evidence.py +297 -0
- sidegraph-0.15.0/tests/test_delivery_stats.py +97 -0
- sidegraph-0.15.0/tests/test_delivery_surfaces.py +350 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_docs_claims.py +3 -4
- sidegraph-0.15.0/tests/test_drift_checks.py +701 -0
- sidegraph-0.15.0/tests/test_file_bound_retrieval.py +493 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_flow_profile.py +1 -0
- sidegraph-0.15.0/tests/test_hook_body_compaction.py +295 -0
- sidegraph-0.15.0/tests/test_hook_failure_diagnostics.py +468 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_hook_showings.py +41 -7
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_drift_nudge.py +3 -3
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_launch.py +2 -2
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_stop.py +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_hot_index.py +3 -1
- sidegraph-0.15.0/tests/test_hot_index_facts.py +797 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_hot_index_hook.py +2 -2
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_integrity.py +4 -3
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_write_boundary.py +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_annotations.py +2 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_session_attribution.py +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_stats_model.py +21 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_mutation_guard.py +50 -5
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_worktree_seeds.py +17 -25
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/wheel_smoke.py +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/uv.lock +1 -1
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.agents/plugins/marketplace.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.claude-plugin/marketplace.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.github/CODEOWNERS +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.github/secret_scanning.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.github/workflows/publish.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.github/workflows/scorecard.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.github/workflows/session-link-gate.yml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.gitignore +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.gitleaks.toml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.opencode/INSTALL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.pre-commit-config.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/.python-version +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/AGENTS.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/CODE_OF_CONDUCT.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/CONTRIBUTING.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/LICENSE +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/README.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/concepts/anchoring.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/concepts/decision-memory.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/concepts/mind-model.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/getting-started/claude-code-setup.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/getting-started/codex-setup.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/getting-started/quickstart.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/capturing-decisions.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/migrating-to-0.14.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/naming-your-domains.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/semantic-docs.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/surviving-refactors.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/team-workflow.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/guides/verifying-your-setup.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/integrations/claude-code.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/integrations/codex.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/integrations/graphify.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/integrations/muse.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/integrations/opencode.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/llms.txt +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/pilot-kit/README.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/pilot-kit/corpus_fit.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/pilot-kit/judge-prompt.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/pilot-kit/questions-prompt.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/pilot-kit/rubric-template.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/reference/git-bindings.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/reference/releasing.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/docs/whitepaper/index.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/index.js +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/.mcp.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/codex/hooks.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/codex/mcp.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/hooks/hooks.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/stats/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/anchoring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bash_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/apply.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/catalog.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/cli.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/integrations.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/review.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/bootstrap/scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/capture.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/config.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/domain_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/engine/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/engine/rationale.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/engine/reader.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/freshness.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/gitenv.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/githooks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/host/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/host/claude_settings.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/host/mcp_entry.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/host/session_identity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/importer.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/input_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/okf.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/redaction_scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/redaction_tokens.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/stats/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/sync.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/text_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/tool_rate_limit.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/viz/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/viz/model.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/viz/render.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/viz/template.html +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/worktree_seeds.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/src/sidegraph/write_boundary.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/__init__.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/conftest.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bitfinex_slice.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.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.15.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.15.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.15.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/member_names_python_graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/member_names_swift_graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/fixtures/mini_graph.json +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/githooks_support.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/graph_fixtures.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/opencode_plugin_runner.mjs +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/snapshot_support.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_agent_brief_manifests.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_anchor_descriptor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_anchor_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_anchoring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_anchoring_mapping_refresh.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_anchoring_membership.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bash_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_batch_panel_fixes.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_apply.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_catalog.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_cli.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_descriptor_cleanup.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_integrations.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_model.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_planner.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_review.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_scan_regular.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bootstrap_unanchored.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_bounded_listings.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_capture_auto_accept.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_capture_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_capture_initiative.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_capture_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_capture_neighbors.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_capture_propose.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_capture_redact.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_compact.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_doctor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_domains_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_graph_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_import.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_init.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_init_hooks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_okf.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_ratify.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_ratify_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_stats.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_sync.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_sync_check.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_unreadable_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_cli_viz.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_codex_plugin.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_command_windows.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_community_baseline.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_config.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_config_ancestor_lookup.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_config_borrowed_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_corpus_expected_renders.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_corpus_self_corpus.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_coverage_telemetry_e2e.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_digest_integrity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doc_corpus_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doc_import.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_auto_share.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_code_drift.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_dangling_supports.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_duplicate_entity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_graph_stale.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_integrity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_never_surfaced.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_stale_instructions.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_unhashable_payload.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_doctor_unratified_accept.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_domain_seed_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_domain_snapshot_format.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_domain_snapshot_notices.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_engine_build.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_entity_duplicate_resolution.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_entity_get_or_create_race.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_entry_point_arguments.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_env_isolation.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_fact_reachability_gate.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_git_bindings_blame.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_git_bindings_hook.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_git_bindings_provenance.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_git_config_isolation.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_git_env.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_git_output_utf8.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_githooks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_graph_freshness.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_graphify_pin.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_hook_payload_encoding.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_hook_spawn_guard.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_agent_brief.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_agent_state.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_borrowed_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_claude_settings.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_integrity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_pretool.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_pretool_records.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_session_key.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_session_start.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_session_start_concurrent.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_subagent_start.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_subdirectory_launch.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_touch_events.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_host_wiring_checks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_hot_path_imports.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_import_dry_run_preview.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_importer.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_index_journal_mode.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_installed_wheel_smoke.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_integrity_engine_version.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_integrity_refresh_hook.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_integrity_replay.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_integrity_stranded.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_lazy_root.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_mcp_entry_ratify_policy.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_mcp_entry_repo_root.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_member_anchor_wiring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_mind_model_additive_fields.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_muse_plugin.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_nearest_anchored.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_okf.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_opencode_plugin.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_openspec_profile.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_pathless_descriptor_adoption.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_portable_json.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_proposal_lifecycle.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_public_hook_launch.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_ratify_listing_gone_dark.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_ratify_policy.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_rationale_compatibility.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_community_labels.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_doc_nodes.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_engine_version.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_file_labels.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_label_conventions.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_member_name_lookup.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_member_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_nodes_in_file.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_perf.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_rationale.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_read.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_resolve.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_stub_collapse.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_subdir_mismatch.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_type_split.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_reader_version.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_rebuild_instruction.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_redaction_scan.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_redaction_seeded.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_redaction_tokens.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_repo_relative_paths_portable.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_repoint_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_budget_counters.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_context.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_drift_marker.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_drilldown.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_guessed.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_ids.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_membership_generations.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_membership_index.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_rank.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_seeds.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_shown_ids.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_terminal_evidence.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_thin_tools.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_toc.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_toptier.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_retrieval_unratified.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sandbox_hygiene.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_schema_descriptor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_schema_domain.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_schema_fact.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_secret_scan_gate.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_binary_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_capture_diagnostics.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_capture_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_cli_diagnostics.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_doc_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_input_limits.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_mcp_write_diagnostics.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_numeric_enums.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_python_shapes.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_redaction_cursor.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_redaction_scaling.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_security_validation_errors.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_seed_ladder.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_seed_paths_portable.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_add_anchors.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_anchoring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_argument_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_borrowed_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_capture.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_commit_hint.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_coverage_events.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_decision_listing.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_drilldown.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_find_entity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_get_store.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_get_task_context.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_graph_freshness.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_graph_path.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_import.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_invocation_policy.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_mcp_smoke.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_nearest_anchored.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_prewrite_anchor_validation.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_ratify_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_record_types.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_redaction.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_refresh.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_render_events.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_result_contract.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_supersede.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_sync_anchors.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_telemetry.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_thin_tools.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_tolerant_seeds.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_server_verify.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_skill_frontmatter.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_stats_graph.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_stats_health.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_stats_render.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_stats_skill.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_stats_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_stop_hot_path.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_stop_rearm.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_agent_state.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_bad_file.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_binding_index.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_canonical_stat.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_compact.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_compact_review.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_concurrent_open.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_coverage_telemetry.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_cross_process_mutations.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_derived_community.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_domain_members.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_entities.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_fact_cascade.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_facts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_file_anchor_names.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_git_root_symlink.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_meta.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_migration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_mutation_immediate.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_non_file_entries.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_persistence.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_ratification.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_rebuild_atomicity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_record_identity.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_record_types.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_render_events.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_requirement.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_retrieval.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_slug_conflicts.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_snapshot_wiring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_stamping_marker.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_symlinks.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_telemetry.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_threading.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_tmp_sweep_age.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_store_update_meta_if.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_subagent_start_manifests.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_subprocess_text_encoding.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_canonical_writes.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_clean.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_domains.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_drift_cache.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_fresh_clone.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_integration.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_membership.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_moved_adoption.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_rebind.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_repoint.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_report_has_findings.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_run.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_snapshot_membership.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_toc_cache.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_volatile_heal.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_sync_wiring.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_telemetry_retention.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_text_paths.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_verify_domain_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_verify_git_framing.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_verify_git_revisions.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_verify_git_stdin.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_verify_snapshot.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_verify_transitions.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_viz_asset_packaged.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_viz_model.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_viz_render_html.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/test_viz_render_json.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tests/wheel_server_trace.py +0 -0
- {sidegraph-0.14.0 → sidegraph-0.15.0}/tools/check_no_session_links.py +0 -0
|
@@ -193,7 +193,9 @@ jobs:
|
|
|
193
193
|
tests/test_verify_git_stdin.py tests/test_seed_paths_portable.py `
|
|
194
194
|
tests/test_repo_relative_paths_portable.py `
|
|
195
195
|
tests/test_command_windows.py `
|
|
196
|
-
tests/test_hook_payload_encoding.py `
|
|
196
|
+
tests/test_hook_payload_encoding.py tests/test_hook_failure_diagnostics.py `
|
|
197
|
+
tests/test_hot_index_facts.py `
|
|
198
|
+
tests/test_delivery_evidence.py tests/test_delivery_stats.py tests/test_delivery_surfaces.py `
|
|
197
199
|
tests/test_git_output_utf8.py `
|
|
198
200
|
$privateTests `
|
|
199
201
|
tests/test_installed_wheel_smoke.py
|
|
@@ -7,6 +7,45 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.15.0] — 2026-10-18
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `sidegraph-export-adr` previews and explicitly writes profile-driven ADR sets with stable
|
|
15
|
+
identity, status/history links, full supporting evidence and preserved human notes.
|
|
16
|
+
Import and bootstrap withhold generated projections instead of duplicating memory.
|
|
17
|
+
|
|
18
|
+
- Explicit `record_drift_check` inspections preserve decision capture history and clear
|
|
19
|
+
only the checked advisory. Changed inspected files or anchor scope re-arm review;
|
|
20
|
+
immutable auxiliary evidence is linted without changing the shared store digest.
|
|
21
|
+
|
|
22
|
+
- Local delivery evidence distinguishes prepared answers, rendered record placements and
|
|
23
|
+
anchor relations, with record status at emission and explicit unknown/empty/error outcomes.
|
|
24
|
+
Stats keeps MCP and automatic hooks separate. Optional bounded index-only writes cannot
|
|
25
|
+
block delivery and retain no task/response text or hashes.
|
|
26
|
+
- Automatic point-of-read context and appended task briefs can include eligible facts with
|
|
27
|
+
their complete statement, source and id, using existing record caps and trust rules.
|
|
28
|
+
Fact lines over 512 characters are withheld whole; full facts remain available through
|
|
29
|
+
`list_facts`. SubagentStart's awareness counts still cover decisions only.
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- Automatic file-read context and appended agent briefs replace later identical record bodies
|
|
34
|
+
within one answer with explicit references. First copies, per-file applicability, trust,
|
|
35
|
+
selection limits and journal placements stay intact; no state crosses calls or agents.
|
|
36
|
+
- Explicit file lookups return eligible decisions and facts by their exact durable file
|
|
37
|
+
binding when an available graph lacks the file, marked as file applicability with
|
|
38
|
+
unverified symbol anchors. Remaining-record pointers name both decision and fact listings.
|
|
39
|
+
- Failed lifecycle hooks emit at most one content-free diagnostic line on stderr while
|
|
40
|
+
preserving their existing fail-open output. Missing indexes and deliberate format
|
|
41
|
+
refusals remain quiet; diagnostics do not depend on the index or create a log file.
|
|
42
|
+
|
|
43
|
+
### Known limitations
|
|
44
|
+
|
|
45
|
+
- Selection still uses file/entity/domain context and can include off-task records.
|
|
46
|
+
Task-query ranking remains future work; this release makes no measured relevance or
|
|
47
|
+
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).
|
|
48
|
+
|
|
10
49
|
## [0.14.0] — 2026-10-16
|
|
11
50
|
|
|
12
51
|
### 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.15.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.15.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
|
|
@@ -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,
|
|
@@ -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. |
|
|
@@ -353,6 +353,17 @@ reported separately, by comparing the graph's build commit with `HEAD` (see
|
|
|
353
353
|
[the Graphify integration](../integrations/graphify.md#keeping-the-graph-fresh-git-hooks)), and
|
|
354
354
|
only a rebuild fixes it.
|
|
355
355
|
|
|
356
|
+
### File applicability outside the graph
|
|
357
|
+
|
|
358
|
+
When an available graph does not contain an explicitly requested file, the memory read
|
|
359
|
+
also checks exact durable descriptor paths. Eligible decisions and facts can then arrive as
|
|
360
|
+
`[file-bound]`: declared applicability to that file, with symbol anchors the graph cannot
|
|
361
|
+
verify. This reads no neighboring path as an exact match and changes no anchor or binding.
|
|
362
|
+
Ordinary verified seed routes take precedence over the marker. Named-entity requests,
|
|
363
|
+
ambiguous/directory guesses and graph-present orphan handling keep their existing rules;
|
|
364
|
+
with no graph reader at all, this fallback is unavailable. The file still appears in the
|
|
365
|
+
not-in-graph diagnostic, and proposal policy, history, mistakes-first and budgets still apply.
|
|
366
|
+
|
|
356
367
|
### Rendering
|
|
357
368
|
|
|
358
369
|
`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
|
| --- | --- | --- | --- | --- | --- |
|
|
@@ -274,7 +274,7 @@ setup, scripted/CI use, and the two deliberately human-run jobs (`sidegraph-impo
|
|
|
274
274
|
| `sidegraph-stop` | `Stop` hook — nudges the agent to distill decisions. |
|
|
275
275
|
| `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
276
|
| `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
|
|
277
|
+
| `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
278
|
| `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
279
|
| `sidegraph-ratify` | CLI — review/accept/drop proposed decisions, facts, and domains. |
|
|
280
280
|
| `sidegraph-sync` | CLI — re-anchor the store after a Graphify rebuild. |
|
|
@@ -285,6 +285,7 @@ setup, scripted/CI use, and the two deliberately human-run jobs (`sidegraph-impo
|
|
|
285
285
|
| `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
286
|
| `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
287
|
| `sidegraph-viz` | CLI — render an interactive HTML/JSON view of decisions, facts, entities, anchor status, supersession, and evidence links. |
|
|
288
|
+
| `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
289
|
| `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
290
|
| `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
291
|
| `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.
|
|
@@ -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.
|
|
@@ -70,7 +70,7 @@ established by core/installed-wheel CI; the native Windows route is verified wit
|
|
|
70
70
|
|---|---|---|---|---|
|
|
71
71
|
| `store-unreadable` | broken | The store cannot be opened, so memory is off for the session | session notice and line | `sidegraph-verify`, or remove the damaged index |
|
|
72
72
|
| `pending-ratification` | advisory | Proposals await a human's verdict | session line; a notice once the oldest is 30 days old | `sidegraph-ratify` |
|
|
73
|
-
| `code-drift` | advisory | Records
|
|
73
|
+
| `code-drift` | advisory | Records need content review after code or check-scope changes | session line | `sidegraph-doctor` |
|
|
74
74
|
| `graph-borrowed` | advisory | A linked worktree reads the main checkout's graph | session line | none needed |
|
|
75
75
|
| `graph-stale` | degraded | The graph was built at a commit `HEAD` has moved past | session line and notice, doctor, stats | `graphify update .` |
|
|
76
76
|
| `stray-store` | degraded | A subdirectory launch created a second, empty store | session line and notice | remove the empty store |
|
|
@@ -127,9 +127,10 @@ notice.
|
|
|
127
127
|
|
|
128
128
|
### code-drift
|
|
129
129
|
|
|
130
|
-
Records
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
Records needing content review after code changed or a prior scoped check stopped applying.
|
|
131
|
+
The line says how many. Inspect current code: record an explicit `record_drift_check` if the
|
|
132
|
+
claim still holds, or propose a real successor if it does not. There is no user notice.
|
|
133
|
+
`sidegraph-doctor` lists them as `code-drift` findings, and the `sidegraph:triage-drift` skill walks them.
|
|
133
134
|
`SIDEGRAPH_DRIFT_NUDGE=off` silences the line.
|
|
134
135
|
|
|
135
136
|
### graph-borrowed
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Using Sidegraph 0.15
|
|
2
|
+
|
|
3
|
+
0.15 adds ADR export and maintenance, auditable delivery statistics, explicit drift
|
|
4
|
+
inspections, eligible fact delivery, and fixes for repeated automatic context and exact-file
|
|
5
|
+
memory outside the graph. File/entity/domain selection still applies; task-query ranking
|
|
6
|
+
is future work. Release changes are listed in the [changelog](../../CHANGELOG.md#0150--2026-10-18).
|
|
7
|
+
|
|
8
|
+
## Update
|
|
9
|
+
|
|
10
|
+
Keep a backup or commit of your authored `.sidegraph/` files. For a CLI installation:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
uv tool install --upgrade sidegraph==0.15.0
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
For plugins, update the marketplace/package and installed plugin using your
|
|
17
|
+
[host's installation instructions](../getting-started/installation.md), then start a new
|
|
18
|
+
session so the MCP server and hooks use the new release. Public plugins intentionally
|
|
19
|
+
follow `main`; an explicit RC pin stays pinned until you change it.
|
|
20
|
+
|
|
21
|
+
## Collect cases during the first week
|
|
22
|
+
|
|
23
|
+
Use ordinary working tasks. Before a task-specific Sidegraph lookup, save the task brief,
|
|
24
|
+
expected files/entities and any constraints or facts you already expect to help. Unknown
|
|
25
|
+
expectations are valid. After lookup, retain the exact tool arguments and full response
|
|
26
|
+
locally, then note what the agent actually did with the memory.
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
Date, project, host, Sidegraph version:
|
|
30
|
+
Task and intended result (before lookup):
|
|
31
|
+
Files/entities and known constraints (before lookup):
|
|
32
|
+
Tool arguments and response (saved locally):
|
|
33
|
+
Useful / off-task / missing records, with IDs if known:
|
|
34
|
+
Observed action influenced by memory, or UNKNOWN:
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
A few ordinary cases across the week are enough for an initial diagnosis. Include cases
|
|
38
|
+
where memory did not help. Keep real records and responses private; redact credentials
|
|
39
|
+
before sharing a report and exclude whole dialogue exports. Record an observed action
|
|
40
|
+
rather than estimating time saved. Inspected cases can inform private or synthetic regression examples; real records and
|
|
41
|
+
responses stay out of repositories. An inspected case cannot serve as an unseen test for
|
|
42
|
+
a later ranking change.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# CLI reference
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
21 console scripts are registered in `pyproject.toml` (`[project.scripts]`): sixteen
|
|
4
4
|
commands documented on this page — fourteen in [`src/sidegraph/cli.py`](../../src/sidegraph/cli.py)
|
|
5
5
|
(including `sidegraph-prepare-commit-msg`, which doubles as a git hook — see
|
|
6
6
|
[`reference/git-bindings.md`](git-bindings.md) for its installation and mechanism) and the
|
|
7
7
|
guided `sidegraph-bootstrap` in
|
|
8
|
-
[`src/sidegraph/bootstrap/cli.py`](../../src/sidegraph/bootstrap/cli.py)
|
|
8
|
+
[`src/sidegraph/bootstrap/cli.py`](../../src/sidegraph/bootstrap/cli.py) and ADR export in
|
|
9
|
+
[`src/sidegraph/adr_cli.py`](../../src/sidegraph/adr_cli.py) — plus the MCP server
|
|
9
10
|
(`sidegraph-mcp`) and the four hook entry points (`sidegraph-session-start`,
|
|
10
11
|
`sidegraph-stop`, `sidegraph-pre-tool-use`, `sidegraph-subagent-start`; see
|
|
11
12
|
[`reference/hooks.md`](hooks.md)).
|
|
@@ -1226,6 +1227,7 @@ plain-text line):
|
|
|
1226
1227
|
| `dangling-supersedes` | snapshot | a `supersedes` id doesn't resolve to any record, hot or archived (a file skipped for its unsafe name still counts as the record it holds, so renaming it back is the only heal) |
|
|
1227
1228
|
| `dangling-binding-entity` | snapshot | a binding's `entity_id` doesn't resolve to any `entities/<id>.json` (an entity held by a file skipped for its unsafe name still counts) |
|
|
1228
1229
|
| `dangling-fact-support` | snapshot | a fact's `supports` id doesn't resolve to any decision (a file skipped for its unsafe name still counts, as for `dangling-supersedes`) |
|
|
1230
|
+
| `dangling-drift-check` | snapshot | an auxiliary verification references no hot or archived decision; terminal targets remain valid history |
|
|
1229
1231
|
| `dangling-parent` | snapshot | a domain's `parent_id` doesn't resolve to any domain, hot or archived (a superseded, dropped or archived parent still counts, as the write path only checks that it exists; a file skipped for its unsafe name counts too, as for `dangling-supersedes`) |
|
|
1230
1232
|
| `parent-cycle` | snapshot | the `parent_id` chain of some domains loops back on itself (a domain that is its own parent included); reported once per cycle, at the domain with the smallest id on it, and not for a domain that merely hangs off the cycle |
|
|
1231
1233
|
| `duplicate-ulid` | snapshot | the same internal id appears in more than one canonical location — two hot files, a hot file plus any archive copy, or two archive segments whose payloads for that id actually differ. **Exempt:** two or more archive segments carrying byte-*identical* payloads for the same id — a sanctioned cross-branch `sidegraph-compact` merge (independent compaction on two branches, later merged) — see [`reference/store-format.md#archive-segments-sidegraph-compact`](store-format.md#archive-segments-sidegraph-compact) |
|
|
@@ -1233,7 +1235,7 @@ plain-text line):
|
|
|
1233
1235
|
| `filename-id-mismatch` | snapshot | a hot record file's name doesn't match its own internal id |
|
|
1234
1236
|
| `unsafe-record-id` | snapshot | a record's id is not a safe filename (a single path segment, at most 128 characters, starting with a letter or digit), or is not a string; also a `bindings/` file or hot record file whose name is unsafe, and an `archive/*.jsonl` line whose id is missing, not a string or unsafe. The store's reload skips such a file, and its startup warning points here. A file with an unsafe name gets this code whether or not its content parses; a file with an unsafe name or an unsafe id gets no other snapshot finding (no `filename-id-mismatch`, `duplicate-ulid` or `parse-error`) |
|
|
1235
1237
|
| `symlinked-store-entry` | snapshot | a store-owned directory or file inside the store is a symlink, live or dangling (one violation per entry); `Store()` refuses to open such a store, so `sidegraph-verify` and `sidegraph-doctor` report the links and stop: no record is linted, no reference checked, no `--against` diff run and no advisory check made until the links are removed (an `--against` ref that does not resolve, or a store outside git, is checked first and still exits `1` without reporting the links) (the text output says so in one line; `--json` carries no marker), see [`reference/store-format.md`](store-format.md#layout-file-per-record-json-plus-a-derived-local-index) |
|
|
1236
|
-
| `illegal-field-change` | transition | an immutable field changed between `GIT_REF` and the working tree (the detail names the field); also covers immutable raw keys lost during hot-to-archive transfer, or a modified already-published archive segment (write-once) |
|
|
1238
|
+
| `illegal-field-change` | transition | an immutable field changed between `GIT_REF` and the working tree (the detail names the field); also covers immutable raw keys lost during hot-to-archive transfer, or a modified already-published archive segment or auxiliary verification (write-once) |
|
|
1237
1239
|
| `illegal-status-jump` | transition | `status` changed to something that isn't a real write-path transition for that record kind |
|
|
1238
1240
|
| `valid-to-unset` | transition | `valid_to` reverted from a value back to `null` |
|
|
1239
1241
|
| `valid-to-changed` | transition | `valid_to` changed from one value to a *different* value (only `null → value`, once, is legal) |
|
|
@@ -1281,6 +1283,9 @@ which methods):
|
|
|
1281
1283
|
- **Initiatives:** no append-only guard in `store.py` at all (`Store.upsert_initiative` is a
|
|
1282
1284
|
bare, unconditional upsert) — only a *deletion* is flagged (`illegal-deletion`); no
|
|
1283
1285
|
field-level check runs for initiatives.
|
|
1286
|
+
- **Auxiliary verifications** (`verifications/*.json`): write-once, including formatting;
|
|
1287
|
+
additions are schema/reference-checked by the snapshot layer, every later modification
|
|
1288
|
+
or deletion is illegal. Older verifier versions ignore this directory.
|
|
1284
1289
|
- **Archive segments** (`archive/*.jsonl`): write-once — a brand-new segment (git status
|
|
1285
1290
|
`A`) is legal; any modification or deletion of an already-published one is always
|
|
1286
1291
|
illegal.
|
|
@@ -1383,7 +1388,7 @@ plain-text line):
|
|
|
1383
1388
|
| `stale-proposal` | a proposed decision/domain whose ULID timestamp is strictly older than `--stale-days` |
|
|
1384
1389
|
| `unreferenced-entity` | a hot entity no committed anchor set references (structural `domain:*`/`community:*` entities are exempt) |
|
|
1385
1390
|
| `expired-open-validity` | a decision's `valid_to` is strictly past but its status is still open (`proposed`/`accepted`) |
|
|
1386
|
-
| `code-drift` | an open (`proposed`/`accepted`) decision's anchored file(s) changed since
|
|
1391
|
+
| `code-drift` | an open (`proposed`/`accepted`) decision's anchored file(s) changed since capture, or an earlier scoped check no longer applies; `record_drift_check` can record an explicit current inspection without rewriting the decision (MCP only); when binding statuses are uncomputed or unavailable, excludes committed deletions and says "binding status unknown"; also carries the "N record(s) predate commit stamping — not checkable" and git-unavailable notes, in place, when either applies |
|
|
1387
1392
|
| `never-surfaced` | an accepted decision has `0` shows against `N > 0` queries on its anchored file(s) — anchored where people repeatedly work, never once rendered or injected by a hook |
|
|
1388
1393
|
| `stale-instructions` | an auto-injected agent-instructions file beside the store (`CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, `.cursorrules`) still carries the distinctive wording of a **superseded** decision — that file reaches the agent at turn zero, before retrieval, so an abandoned rule surviving there outranks the store's correction by default. Verbatim-ish match on normalized text with length/word floors; superseded records only; no git call. Advisory: it reports a quotation, not a proven contradiction — the file may be narrating history |
|
|
1389
1394
|
| `unratified-accept` | an **accepted** record whose provenance says `agent` and which carries no ratifier stamp — the signature `SIDEGRAPH_AUTO_ACCEPT=on` leaves in a shared store (one environment's setting bypassing the ratification gate for everyone). Scoped to records created at/after the EARLIER of the store's earliest ratifier stamp and its creation marker (`.sidegraph/stamping_live_since`, written once when a store is genuinely new — never backfilled onto an existing one), so a store predating both reports nothing rather than everything; a store that has never ratified anything but was created by a marker-writing version is still in scope from its own creation, closing the blind window an unratified store would otherwise sit in forever. A stamped record — including one stamped `auto:<policy>` by an auto-ratification policy — and a human-sourced one are never flagged. A **supersession successor** (`supersedes` set — `supersede_decision`/`supersede_fact`) is never flagged either: reversal has no ratification queue to bypass and lands accepted immediately by design, so it reproduces the signature with no relation to the env var this check hunts. Narrowed exception: a `supersedes`-bearing record IS still flagged if it carries a `layer`, a `provenance.ref`, or a tier-0 `tag:`/`initiative:` binding absent from its predecessor — neither `supersede_decision` nor `supersede_fact` can produce any of the three, so one present proves the `propose_decisions`/auto-accept path wrote it. (The fact half is defensive only: `supersede_fact` always stamps `source="human"`, so a fact successor never reaches this agent-sourced check, and no draft shape carries `supersedes` on a fact.) Only a MINIMAL superseding draft (none of the three) is indistinguishable from a legitimate successor by the record's own fields, and stays excluded — a known, accepted, narrower trade-off than treating every supersession alike. Advisory: the signature is not proof — verify before concluding |
|
|
@@ -1517,6 +1522,45 @@ so startup may migrate supported legacy data or rebuild `index.db`. Binding stat
|
|
|
1517
1522
|
Exit code 0 on success (a store with problems still exits 0 — the problems are the output), 2
|
|
1518
1523
|
on an operational error (uninitialized store or unwritable output path).
|
|
1519
1524
|
|
|
1525
|
+
## `sidegraph-export-adr`
|
|
1526
|
+
|
|
1527
|
+
```bash
|
|
1528
|
+
uv run sidegraph-export-adr --db .sidegraph --out docs/adr # preview only
|
|
1529
|
+
uv run sidegraph-export-adr --db .sidegraph --out docs/adr --write # explicit application
|
|
1530
|
+
uv run sidegraph-export-adr --profile madr --json
|
|
1531
|
+
```
|
|
1532
|
+
|
|
1533
|
+
Generate and maintain record-derived ADRs with a unified diff by default. Accepted,
|
|
1534
|
+
superseded and deprecated ADR/constraint decisions become documents; proposed/rejected
|
|
1535
|
+
records stay out. A fixed footer retains complete accepted, unclosed explicit evidence,
|
|
1536
|
+
source pointers, status, history, anchors and domain intent. No inferred architectural
|
|
1537
|
+
coverage, automatic prose synthesis or retrieval policy change.
|
|
1538
|
+
|
|
1539
|
+
| Flag | Behavior |
|
|
1540
|
+
|---|---|
|
|
1541
|
+
| `--db` | store path; `SIDEGRAPH_DIR` preferred, deprecated `SIDEGRAPH_DB` retained |
|
|
1542
|
+
| `--profile` | export settings from a flow profile; default `generic-adr` |
|
|
1543
|
+
| `--out` | override the profile directory, otherwise below the store's parent |
|
|
1544
|
+
| `--template` | UTF-8 body template, regular file up to 64 KiB |
|
|
1545
|
+
| `--filename` | safe flat pattern containing `{id}`, optionally `{number:04d}` |
|
|
1546
|
+
| `--write` | explicitly apply a conflict-free plan; absent means no output writes |
|
|
1547
|
+
| `--json` | changes/diffs, advisory states, warnings and write-completion flags |
|
|
1548
|
+
|
|
1549
|
+
Manual additions after the managed region survive. Editing generated prose/ownership
|
|
1550
|
+
causes a conflict, preserving the file; any planned conflict prevents all writes.
|
|
1551
|
+
Existing filenames/numbers are stable; no generated history is deleted. Symlinks,
|
|
1552
|
+
nonregular targets and source-store overlap are refused. Existing files are replaced
|
|
1553
|
+
atomically, but an I/O/race failure can leave earlier writes or a partial newly created
|
|
1554
|
+
file: inspect `applied` and `partial_write_possible` before retrying.
|
|
1555
|
+
|
|
1556
|
+
Export never opens Store, migrates it, or updates source/index/graph files. Drift is
|
|
1557
|
+
report-only and can be unknown, including for unopened WAL indexes. Both import and
|
|
1558
|
+
bootstrap skip generated projections; importing exported ADRs does not create fresh
|
|
1559
|
+
memory. Exit 0 for successful preview/write (including an admitted empty population), 2
|
|
1560
|
+
for invalid input/store, conflicts or operational errors. See the
|
|
1561
|
+
[ADR export guide](../guides/adr-export.md) for formats, custom templates, source tracing,
|
|
1562
|
+
conflict recovery, drift limits and round-trip semantics.
|
|
1563
|
+
|
|
1520
1564
|
## `sidegraph-export-okf`
|
|
1521
1565
|
|
|
1522
1566
|
```bash
|
|
@@ -1573,6 +1617,16 @@ sidegraph-stats [--db PATH] [--window DAYS] [--graph PATH] [--json]
|
|
|
1573
1617
|
|
|
1574
1618
|
One screen of usage statistics, read-only: how often memory was asked for, how much of the
|
|
1575
1619
|
code being worked on has memory anchored to it, what the store holds, and how the anchors are doing.
|
|
1620
|
+
An additional **DELIVERY** section (`delivery_evidence` in JSON) reports observed MCP
|
|
1621
|
+
outcomes and prepared hook blocks separately: occurrences, actual record placements, anchor relations,
|
|
1622
|
+
retained unique records, status/kind at emission, comparable ranker populations and bounded
|
|
1623
|
+
retention metadata. It is not added to legacy activation or `showings`. Missing optional
|
|
1624
|
+
tables mean unavailable evidence, not zero; with telemetry off the JSON field is `null`.
|
|
1625
|
+
Capacity-eviction counts cover this index's recording lifetime, not just the requested
|
|
1626
|
+
window. Older writers, failed writes and host receipt remain unknown, and hooks have no
|
|
1627
|
+
all-attempt denominator. See [delivery evidence](store-format.md#delivery-evidence-derived-index-only)
|
|
1628
|
+
for exact surfaces, units, privacy and caps. This read-only command never migrates the ledger.
|
|
1629
|
+
|
|
1576
1630
|
It states what was **shown, asked and touched** — never what was improved, prevented, saved
|
|
1577
1631
|
or caused. A journal cannot separate "memory sent the agent there" from "the agent was going
|
|
1578
1632
|
there anyway", so no line of the report claims an effect.
|