sidegraph 0.12.0__tar.gz → 0.13.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.12.0 → sidegraph-0.13.0}/.github/workflows/ci.yml +3 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/CHANGELOG.md +42 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/CLAUDE.md +1 -1
- sidegraph-0.13.0/PKG-INFO +310 -0
- sidegraph-0.13.0/README.md +280 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/bootstrap.md +1 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/claude-code-setup.md +8 -6
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/codex-setup.md +7 -6
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/installation.md +41 -37
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/quickstart.md +32 -12
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/troubleshooting.md +32 -26
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/verifying-your-setup.md +1 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/integrations/claude-code.md +17 -15
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/integrations/codex.md +26 -16
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/cli.md +8 -6
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/configuration.md +4 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/hooks.md +2 -2
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/mcp-tools.md +4 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
- sidegraph-0.13.0/plugin/sidegraph/.mcp.json +17 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/codex/hooks.json +6 -3
- sidegraph-0.13.0/plugin/sidegraph/codex/mcp.json +15 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/pyproject.toml +1 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/__init__.py +1 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/capture.py +3 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/doctor.py +7 -3
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/engine/reader.py +17 -5
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/githooks.py +2 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/gitio.py +23 -6
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/hooks.py +9 -3
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/mcp_entry.py +46 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/server.py +4 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/store.py +2 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/verify.py +7 -3
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_codex_plugin.py +26 -9
- sidegraph-0.13.0/tests/test_command_windows.py +408 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_docs_claims.py +11 -5
- sidegraph-0.13.0/tests/test_git_output_utf8.py +222 -0
- sidegraph-0.13.0/tests/test_hook_payload_encoding.py +99 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_wiring_checks.py +2 -1
- sidegraph-0.13.0/tests/test_mcp_entry_ratify_policy.py +104 -0
- sidegraph-0.13.0/tests/test_mcp_entry_repo_root.py +148 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_public_hook_launch.py +63 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_session_attribution.py +12 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_subagent_start_manifests.py +6 -0
- sidegraph-0.13.0/tests/test_subprocess_text_encoding.py +111 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_git_stdin.py +2 -1
- {sidegraph-0.12.0 → sidegraph-0.13.0}/uv.lock +1 -1
- sidegraph-0.12.0/PKG-INFO +0 -262
- sidegraph-0.12.0/README.md +0 -232
- sidegraph-0.12.0/plugin/sidegraph/.mcp.json +0 -16
- sidegraph-0.12.0/plugin/sidegraph/codex/mcp.json +0 -9
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.agents/plugins/marketplace.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.claude-plugin/marketplace.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/CODEOWNERS +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/secret_scanning.yml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/workflows/publish.yml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/workflows/scorecard.yml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/workflows/session-link-gate.yml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.gitignore +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.gitleaks.toml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.pre-commit-config.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/.python-version +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/AGENTS.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/CODE_OF_CONDUCT.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/CONTRIBUTING.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/LICENSE +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/SECURITY.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/README.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/anchoring.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/data-model.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/decision-memory.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/mind-model.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/retrieval.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/capturing-decisions.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/ci-cd-maintenance.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/naming-your-domains.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/retrieval-in-sessions.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/semantic-docs.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/surviving-refactors.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/team-workflow.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/integrations/graphify.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/llms.txt +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/README.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/corpus_fit.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/judge-prompt.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/questions-prompt.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/rubric-template.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/git-bindings.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/operations.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/releasing.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/stability.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/store-format.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/whitepaper/index.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/hooks/hooks.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/stats/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/anchoring.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bash_paths.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/__init__.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/apply.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/catalog.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/cli.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/integrations.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/model.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/planner.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/proof.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/review.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/scan.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/cli.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/config.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/doc_import.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/domains.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/engine/__init__.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/freshness.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/gitenv.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/__init__.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/claude_settings.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/launch.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/session_identity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/subagent.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/hot_index.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/importer.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/input_limits.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/integrity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/nearest_anchored.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/okf.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/profiles.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/redaction_scan.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/redaction_tokens.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/retrieval.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/schema.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/seed_ladder.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/stats/__init__.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/stats/model.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/stats/render.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/store_layout.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/sync.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/text_paths.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/tool_rate_limit.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/validation_errors.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/__init__.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/model.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/render.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/template.html +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/worktree_seeds.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/write_boundary.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/__init__.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/conftest.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bitfinex_slice.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/graph.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/design.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/member_names_python_graph.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/member_names_swift_graph.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/mini_graph.json +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/githooks_support.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_agent_brief_manifests.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_anchoring.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_anchoring_mapping_refresh.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bash_paths.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_batch_panel_fixes.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_apply.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_catalog.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_cli.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_descriptor_cleanup.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_integrations.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_model.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_planner.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_proof.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_review.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_scan.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_scan_regular.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_unanchored.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bounded_listings.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_auto_accept.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_facts.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_initiative.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_integration.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_neighbors.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_propose.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_redact.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_compact.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_doctor.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_domains.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_graph_paths.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_import.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_init.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_init_hooks.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_okf.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_ratify.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_ratify_facts.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_stats.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_sync.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_sync_check.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_unreadable_paths.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_viz.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_community_baseline.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_config.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_config_ancestor_lookup.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_config_borrowed_graph.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_corpus_expected_renders.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_corpus_self_corpus.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_coverage_telemetry_e2e.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_digest_integrity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doc_corpus_integration.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doc_import.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_auto_share.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_code_drift.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_dangling_supports.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_duplicate_entity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_graph_stale.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_integrity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_never_surfaced.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_scan.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_stale_instructions.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_unhashable_payload.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_unratified_accept.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_domains.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_entity_duplicate_resolution.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_entity_get_or_create_race.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_entry_point_arguments.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_env_isolation.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_fact_reachability_gate.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_flow_profile.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_bindings_blame.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_bindings_hook.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_bindings_provenance.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_config_isolation.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_env.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_githooks.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_graph_freshness.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hook_showings.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hook_spawn_guard.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_agent_brief.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_agent_state.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_borrowed_graph.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_claude_settings.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_drift_nudge.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_integrity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_launch.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_pretool.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_pretool_records.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_session_key.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_session_start.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_session_start_concurrent.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_stop.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_subagent_start.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_subdirectory_launch.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_touch_events.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hot_index.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hot_index_hook.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hot_path_imports.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_import_dry_run_preview.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_importer.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_index_journal_mode.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_installed_wheel_smoke.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_integrity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_integrity_refresh_hook.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_integrity_replay.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_integrity_stranded.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_lazy_root.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_member_anchor_wiring.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_mind_model_additive_fields.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_nearest_anchored.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_okf.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_openspec_profile.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_pathless_descriptor_adoption.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_portable_json.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_proposal_lifecycle.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_ratify_listing_gone_dark.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_ratify_policy.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_community_labels.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_doc_nodes.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_graph.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_integration.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_member_name_lookup.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_member_names.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_nodes_in_file.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_perf.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_rationale.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_read.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_resolve.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_subdir_mismatch.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_version.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_redaction_scan.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_redaction_seeded.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_redaction_tokens.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_repo_relative_paths_portable.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_repoint_integration.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_budget_counters.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_context.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_drift_marker.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_drilldown.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_facts.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_guessed.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_ids.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_integration.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_rank.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_seeds.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_shown_ids.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_terminal_evidence.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_thin_tools.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_toc.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_toptier.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_unratified.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sandbox_hygiene.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_schema_descriptor.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_schema_domain.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_schema_fact.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_secret_scan_gate.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_binary_limits.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_capture_diagnostics.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_capture_limits.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_cli_diagnostics.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_doc_limits.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_input_limits.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_mcp_write_diagnostics.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_numeric_enums.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_python_shapes.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_redaction_cursor.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_redaction_scaling.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_validation_errors.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_write_boundary.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_seed_ladder.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_seed_paths_portable.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_add_anchors.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_anchoring.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_annotations.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_argument_names.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_borrowed_graph.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_capture.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_commit_hint.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_coverage_events.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_decision_listing.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_domains.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_drilldown.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_facts.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_find_entity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_get_store.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_get_task_context.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_graph_freshness.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_graph_path.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_import.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_invocation_policy.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_mcp_smoke.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_nearest_anchored.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_prewrite_anchor_validation.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_ratify_facts.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_record_types.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_redaction.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_refresh.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_render_events.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_result_contract.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_supersede.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_sync_anchors.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_telemetry.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_thin_tools.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_tolerant_seeds.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_verify.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_skill_frontmatter.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_graph.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_health.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_model.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_render.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_skill.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_snapshot.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stop_hot_path.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stop_rearm.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_agent_state.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_bad_file.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_binding_index.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_canonical_stat.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_compact.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_compact_review.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_concurrent_open.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_coverage_telemetry.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_cross_process_mutations.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_derived_community.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_domains.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_entities.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_fact_cascade.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_facts.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_git_root_symlink.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_meta.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_migration.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_mutation_guard.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_mutation_immediate.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_non_file_entries.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_persistence.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_ratification.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_rebuild_atomicity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_record_identity.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_record_types.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_render_events.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_retrieval.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_slug_conflicts.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_stamping_marker.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_symlinks.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_telemetry.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_threading.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_tmp_sweep_age.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_update_meta_if.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_canonical_writes.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_clean.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_domains.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_drift_cache.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_fresh_clone.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_integration.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_moved_adoption.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_rebind.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_repoint.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_report_has_findings.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_run.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_toc_cache.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_volatile_heal.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_wiring.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_telemetry_retention.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_text_paths.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_git_framing.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_git_revisions.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_snapshot.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_transitions.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_viz_asset_packaged.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_viz_model.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_viz_render_html.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_viz_render_json.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_worktree_seeds.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/wheel_server_trace.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/wheel_smoke.py +0 -0
- {sidegraph-0.12.0 → sidegraph-0.13.0}/tools/check_no_session_links.py +0 -0
|
@@ -192,6 +192,9 @@ jobs:
|
|
|
192
192
|
tests/test_server_result_contract.py tests/test_server_invocation_policy.py `
|
|
193
193
|
tests/test_verify_git_stdin.py tests/test_seed_paths_portable.py `
|
|
194
194
|
tests/test_repo_relative_paths_portable.py `
|
|
195
|
+
tests/test_command_windows.py `
|
|
196
|
+
tests/test_hook_payload_encoding.py `
|
|
197
|
+
tests/test_git_output_utf8.py `
|
|
195
198
|
$privateTests `
|
|
196
199
|
tests/test_installed_wheel_smoke.py
|
|
197
200
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
@@ -7,6 +7,48 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.13.0] — 2026-10-14
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- On Windows, hooks misread the payload the host sends when a path in it has a non-ASCII
|
|
15
|
+
character (an accented or Cyrillic user name or project folder). The Stop capture reminder
|
|
16
|
+
never fired, PreToolUse delivered no records, and for some names SessionStart and
|
|
17
|
+
SubagentStart printed nothing.
|
|
18
|
+
- On Windows, a non-ASCII git user name, branch name or repository path was read back garbled:
|
|
19
|
+
a ratified record could carry a garbled name in its provenance, and `sidegraph-verify
|
|
20
|
+
--against` failed or reported false changes for records containing non-ASCII text.
|
|
21
|
+
- A change to a file whose name has non-ASCII characters, spaces or quotes was missed by the
|
|
22
|
+
drift check and the commit-trailer candidates, because git escaped the name.
|
|
23
|
+
- On Windows, a Codex hook started from a subdirectory of a repository whose path has non-ASCII
|
|
24
|
+
characters now runs from the repository root.
|
|
25
|
+
- A default Git for Windows install no longer breaks the MCP server. Its installer puts only
|
|
26
|
+
`Git\cmd` on PATH, which has no `sh`, so the server, which started with `sh`, did not start.
|
|
27
|
+
The Codex hooks have a Windows command for the same reason (see Changed).
|
|
28
|
+
- The project's ratify policy now applies under Codex. `sidegraph-init` commits it to
|
|
29
|
+
`.claude/settings.json`, which Codex does not read, so under Codex every agent proposal
|
|
30
|
+
waited for review whatever the team chose. The plugin's MCP server now reads the committed
|
|
31
|
+
value when its environment sets none; an explicit `SIDEGRAPH_RATIFY_POLICY` still wins.
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- The plugins launch without `sh` on PATH. Both MCP launchers start `uvx` (`uv` in the
|
|
36
|
+
development manifest) directly, and `sidegraph-mcp --repo-root` anchors the server to the
|
|
37
|
+
project: `CLAUDE_PROJECT_DIR`, else the git top-level, else the working directory. The Codex
|
|
38
|
+
hooks gain a PowerShell `commandWindows` that Windows PowerShell 5.1 parses. On native Windows
|
|
39
|
+
you need no PATH change and no PowerShell 7; Git for Windows at its default options is
|
|
40
|
+
enough. The Codex hooks need a Codex release that supports `commandWindows` (verified with
|
|
41
|
+
0.162.1). The Windows hook definition changes, so approve the changed hooks once in `/hooks`
|
|
42
|
+
on Windows; other platforms are unaffected.
|
|
43
|
+
- The optional terminal CLI now installs from the same place as the plugin, the public
|
|
44
|
+
repository's `main` branch: `uv tool install git+https://github.com/SantyagoSeaman/sidegraph.git@main`,
|
|
45
|
+
updated after each release with `uv tool upgrade sidegraph`. The docs no longer send you to
|
|
46
|
+
PyPI for it; PyPI still carries every release for pinning an exact version. The `path-skew`
|
|
47
|
+
SessionStart line now offers `uv tool install --reinstall git+https://github.com/SantyagoSeaman/sidegraph.git@main`,
|
|
48
|
+
which moves an older install from PyPI, pinned or not, to the latest release.
|
|
49
|
+
- README: the Quickstart is one numbered sequence with the plugin commands inline, a teammate
|
|
50
|
+
path, and the rarer options below it; "How it works" is a numbered list instead of a diagram.
|
|
51
|
+
|
|
10
52
|
## [0.12.0] — 2026-10-12
|
|
11
53
|
|
|
12
54
|
### Fixed
|
|
@@ -13,7 +13,7 @@ task-aware retrieval + decision memory riding on the engine's entity graph.
|
|
|
13
13
|
continuing participant in the project. A core feature must preserve, organize, or deliver
|
|
14
14
|
accumulated project understanding. Document search by itself is not the product.
|
|
15
15
|
|
|
16
|
-
Sidegraph is pre-1.0 (v0.
|
|
16
|
+
Sidegraph is pre-1.0 (v0.13.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
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: sidegraph
|
|
3
|
+
Version: 0.13.0
|
|
4
|
+
Summary: Own the memory, rent the graph — a durable decision/lessons layer as a sidecar over a code-graph engine.
|
|
5
|
+
Project-URL: Homepage, https://github.com/SantyagoSeaman/sidegraph
|
|
6
|
+
Project-URL: Repository, https://github.com/SantyagoSeaman/sidegraph
|
|
7
|
+
Project-URL: Documentation, https://github.com/SantyagoSeaman/sidegraph/tree/main/docs
|
|
8
|
+
Project-URL: Issues, https://github.com/SantyagoSeaman/sidegraph/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/SantyagoSeaman/sidegraph/blob/main/CHANGELOG.md
|
|
10
|
+
Author: SantyagoSeaman
|
|
11
|
+
License-Expression: Apache-2.0
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: adr,agent-memory,claude-code,code-graph,codex,coding-agents,decision-log,decision-records,developer-tools,knowledge-graph,mcp,mcp-server,team-memory
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
23
|
+
Requires-Python: >=3.13
|
|
24
|
+
Requires-Dist: anyio>=4
|
|
25
|
+
Requires-Dist: fastmcp<4,>=3.4.2
|
|
26
|
+
Requires-Dist: mcp<2,>=1.24
|
|
27
|
+
Requires-Dist: pydantic>=2.9
|
|
28
|
+
Requires-Dist: python-ulid>=3.0
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
|
|
31
|
+
# Sidegraph
|
|
32
|
+
|
|
33
|
+
[](https://github.com/SantyagoSeaman/sidegraph/actions/workflows/ci.yml)
|
|
34
|
+
[](https://github.com/SantyagoSeaman/sidegraph/releases)
|
|
35
|
+

|
|
36
|
+

|
|
37
|
+

|
|
38
|
+
[](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/getting-started/installation.md#platform-coverage)
|
|
39
|
+
[](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/getting-started/installation.md#platform-coverage)
|
|
40
|
+
|
|
41
|
+
Sidegraph is a local MCP server and CLI for preserving engineering decisions and
|
|
42
|
+
facts alongside your code. It records why a design was chosen, which alternatives were
|
|
43
|
+
rejected, and what was learned during implementation, then retrieves that context for
|
|
44
|
+
the files and symbols an agent is working on.
|
|
45
|
+
|
|
46
|
+
Records live in your repository as reviewable JSON files. A derived SQLite index supports
|
|
47
|
+
retrieval; [Graphify](https://github.com/safishamsi/graphify) supplies the code and document
|
|
48
|
+
graph used to anchor records. Claude Code and Codex plugins connect capture and retrieval
|
|
49
|
+
to coding sessions.
|
|
50
|
+
|
|
51
|
+
- Keep decisions, rejected alternatives, and evidence with their provenance and history.
|
|
52
|
+
- Hand the agent the relevant mistakes and constraints before it edits, sized to fit its context.
|
|
53
|
+
- Review agent proposals before accepting them, or let low-risk ones be accepted automatically.
|
|
54
|
+
- Follow code through refactors, and flag records whose code changed or disappeared.
|
|
55
|
+
|
|
56
|
+
[Documentation](docs/README.md) · [Installation](docs/getting-started/installation.md) ·
|
|
57
|
+
[Changelog](CHANGELOG.md) · [Contributing](CONTRIBUTING.md)
|
|
58
|
+
|
|
59
|
+
## Quickstart
|
|
60
|
+
|
|
61
|
+
### Set up a repository (once)
|
|
62
|
+
|
|
63
|
+
**You need** Git, Claude Code or Codex, and [uv](https://docs.astral.sh/uv/getting-started/installation/),
|
|
64
|
+
which also downloads Python 3.13 if you do not have it. On Windows you also need
|
|
65
|
+
[Git for Windows](https://gitforwindows.org/) with its default options
|
|
66
|
+
([details](docs/getting-started/installation.md#windows)); run the commands below in
|
|
67
|
+
PowerShell, using the Windows line where one is given. No API keys and no existing ADRs are required.
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # uv on macOS, Linux
|
|
71
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # uv on Windows
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**1. Build the code graph.** [Graphify](https://github.com/safishamsi/graphify) maps your
|
|
75
|
+
functions, classes and files, so a record can point at the exact function it is about.
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
uv tool install "graphifyy==0.9.6" # two y's in the package name; the command is graphify
|
|
79
|
+
cd /path/to/your/repo
|
|
80
|
+
graphify update .
|
|
81
|
+
echo "graphify-out/" >> .gitignore # the graph is rebuilt from your code; keep it out of git
|
|
82
|
+
Add-Content .gitignore "graphify-out/" # the same line on Windows (PowerShell); do not use >> there
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**2. Create the store**, the `.sidegraph/` directory that holds the records:
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
uvx --from git+https://github.com/SantyagoSeaman/sidegraph.git@main sidegraph-init
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
It asks two questions. Both default to yes, so press Enter twice.
|
|
92
|
+
|
|
93
|
+
- *Keep the code graph fresh?* Yes installs a git hook that rebuilds the graph after each commit.
|
|
94
|
+
- *Auto-ratify low-risk records?* Yes means the lessons, gotchas and facts the agent proposes
|
|
95
|
+
are accepted without review. Other proposals still wait for you. The answer is saved in
|
|
96
|
+
`.claude/settings.json`, which you commit. The plugin applies it in Claude Code and in Codex,
|
|
97
|
+
so it covers the whole team.
|
|
98
|
+
|
|
99
|
+
Details: [`sidegraph-init`](docs/reference/cli.md#sidegraph-init).
|
|
100
|
+
|
|
101
|
+
**3. Install the plugin.** It gives the agent the memory at session start and asks it to save
|
|
102
|
+
new decisions at the end of a session. It updates itself: each new session downloads and runs
|
|
103
|
+
the latest Sidegraph release.
|
|
104
|
+
|
|
105
|
+
In Claude Code, run these inside a session in the repository, then start a new session:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
/plugin marketplace add SantyagoSeaman/sidegraph
|
|
109
|
+
/plugin install sidegraph@sidegraph
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
In Codex, run these in a terminal in the repository, then start `codex` and approve the
|
|
113
|
+
Sidegraph hooks when it asks:
|
|
114
|
+
|
|
115
|
+
```sh
|
|
116
|
+
codex plugin marketplace add SantyagoSeaman/sidegraph
|
|
117
|
+
codex plugin add sidegraph@sidegraph
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**4. Record a decision.** In a session, ask the agent, naming a real file and function:
|
|
121
|
+
|
|
122
|
+
> Record this gotcha: the upstream API limits batch requests to 100 items. We rejected
|
|
123
|
+
> a single unbounded request because it fails for larger imports. Anchor it to
|
|
124
|
+
> `import_batch` in `src/importer.py`.
|
|
125
|
+
|
|
126
|
+
It is saved right away. Records the agent proposes on its own may wait for your review: run
|
|
127
|
+
`/sidegraph:ratify-decisions` in Claude Code, or ask Codex to "review pending decisions".
|
|
128
|
+
|
|
129
|
+
**5. Check and commit.** Start a new session and ask: "Before I edit `src/importer.py`, what
|
|
130
|
+
should I know?" The agent should show the gotcha. Then commit `.sidegraph/` and `.gitignore`,
|
|
131
|
+
and `.claude/settings.json` if step 2 created or changed it. The index file inside
|
|
132
|
+
`.sidegraph/` is git-ignored automatically.
|
|
133
|
+
|
|
134
|
+
### Each teammate
|
|
135
|
+
|
|
136
|
+
After cloning, each teammate runs steps 1, 2 and 3. In a clone, step 2 leaves the committed
|
|
137
|
+
records and settings alone. It only installs the graph hook there.
|
|
138
|
+
|
|
139
|
+
Next, [name your domains](docs/guides/naming-your-domains.md) to give the memory a table of
|
|
140
|
+
contents, or import existing ADRs and design specs with the
|
|
141
|
+
[preview-first bootstrap](docs/getting-started/bootstrap.md). The
|
|
142
|
+
[verification checklist](docs/guides/verifying-your-setup.md) covers the whole workflow.
|
|
143
|
+
|
|
144
|
+
### Other options
|
|
145
|
+
|
|
146
|
+
- **Without the graph.** Skip step 1 and answer no to the first question in step 2. Records
|
|
147
|
+
then attach to whole files instead of functions.
|
|
148
|
+
- **Versions.** You always run the latest release. The plugin and the step 2 command install
|
|
149
|
+
Sidegraph from the public repository on GitHub, whose `main` branch changes only when a
|
|
150
|
+
release is published. To pin a version instead, see
|
|
151
|
+
[pinning](docs/getting-started/installation.md#mutable-development-references).
|
|
152
|
+
- **Sidegraph commands in your own terminal.** Optional:
|
|
153
|
+
`uv tool install git+https://github.com/SantyagoSeaman/sidegraph.git@main`, from the same place as the plugin. It does not update itself, so
|
|
154
|
+
after each release run `uv tool upgrade sidegraph`
|
|
155
|
+
([details](docs/getting-started/installation.md#option-a--the-cli-on-your-path)).
|
|
156
|
+
- **Other MCP clients.** Run `sidegraph-mcp` over stdio; see the
|
|
157
|
+
[MCP reference](docs/reference/mcp-tools.md) and [configuration](docs/reference/configuration.md).
|
|
158
|
+
Automatic memory needs a host with hooks, such as Claude Code or Codex.
|
|
159
|
+
- **Windows details**, including what the plugins need from Git for Windows:
|
|
160
|
+
[Windows setup](docs/getting-started/installation.md#windows).
|
|
161
|
+
|
|
162
|
+
## Why
|
|
163
|
+
|
|
164
|
+
Code describes the current implementation, but often omits the alternatives a team
|
|
165
|
+
tried, operational constraints it discovered, and reasons for changing direction.
|
|
166
|
+
Sidegraph captures that reasoning and links it to the code and planning documents it
|
|
167
|
+
concerns. It works alongside an existing ADR or specification process.
|
|
168
|
+
|
|
169
|
+
The useful starting point is a project with decisions worth retaining and people willing
|
|
170
|
+
to review them. Memory quality depends on capture, review, and whether the agent actually
|
|
171
|
+
retrieves it. Small tasks answerable directly from code may gain little from the extra
|
|
172
|
+
context. The [engineering whitepaper](docs/whitepaper/index.md) describes the evidence,
|
|
173
|
+
negative results, and adoption criteria; the [pilot kit](docs/pilot-kit/README.md) helps
|
|
174
|
+
evaluate it on your own repository.
|
|
175
|
+
|
|
176
|
+
## How it works
|
|
177
|
+
|
|
178
|
+
1. **Capture.** During a session the agent saves a decision when you ask for one. At the end of
|
|
179
|
+
a session the plugin reminds it to propose the decisions worth keeping. Secrets are redacted
|
|
180
|
+
before anything is written.
|
|
181
|
+
2. **Review.** You accept or drop what the agent proposed; Sidegraph calls this *ratifying*.
|
|
182
|
+
Records are JSON files in `.sidegraph/`, committed with your code.
|
|
183
|
+
3. **Anchoring.** Each record is linked to the functions, classes, files or document headings it
|
|
184
|
+
is about, using the graph Graphify builds from your code. When a refactor moves code,
|
|
185
|
+
Sidegraph follows the move; when it cannot tell where the code went, it flags the record for
|
|
186
|
+
review.
|
|
187
|
+
4. **Recall.** At the start of the next session the agent gets a short table of contents of the
|
|
188
|
+
project's areas, called *domains*. Before changing a file it asks for that file's records,
|
|
189
|
+
with known mistakes first. In Claude Code, the agent also receives a file's records the
|
|
190
|
+
first time it reads or edits that file.
|
|
191
|
+
5. **Subagents.** In Claude Code, when the agent hands a task to a subagent, the records for the
|
|
192
|
+
files named in that task are added to it. In Claude Code and Codex, each new subagent is told
|
|
193
|
+
that the memory exists and how to use it.
|
|
194
|
+
|
|
195
|
+
Domains are named by you or proposed by the agent; each one says what an area is for and which
|
|
196
|
+
code belongs to it. See the [mind model](docs/concepts/mind-model.md) and the
|
|
197
|
+
[anchoring model](docs/concepts/anchoring.md).
|
|
198
|
+
|
|
199
|
+
## What gets stored
|
|
200
|
+
|
|
201
|
+
| Record | What it is |
|
|
202
|
+
|---|---|
|
|
203
|
+
| `Decision` | Kind (`adr`, `lesson`, `constraint`, or `gotcha`), context, choice, rejected alternatives, consequences, validity, history, and provenance |
|
|
204
|
+
| `Fact` | A benchmark, external constraint, or observed finding that supports a decision or stands alone |
|
|
205
|
+
| `Entity` | A stable ID for a function, class, file or heading, kept when the graph is rebuilt |
|
|
206
|
+
| `AnchorBinding` | The link between a decision or fact and an entity it is about |
|
|
207
|
+
| `Domain` | A named area with a purpose, membership rules, and optional subdomains |
|
|
208
|
+
|
|
209
|
+
Nothing is ever deleted. A reversed decision is closed and replaced by a new one, so *"tried
|
|
210
|
+
before, abandoned because…"* stays retrievable with `get_entity_history`. Dropping a proposal
|
|
211
|
+
marks it rejected; it stays in the history too.
|
|
212
|
+
|
|
213
|
+
Facts follow the same review and history rules as decisions. Accepting or dropping a decision also accepts or drops
|
|
214
|
+
the pending facts attached to it. Details:
|
|
215
|
+
[docs/concepts/data-model.md](docs/concepts/data-model.md) and
|
|
216
|
+
[docs/guides/capturing-decisions.md#facts-the-evidence-layer](docs/guides/capturing-decisions.md#facts-the-evidence-layer).
|
|
217
|
+
|
|
218
|
+
## MCP tools
|
|
219
|
+
|
|
220
|
+
The `sidegraph-mcp` stdio server exposes retrieval, capture, review and maintenance tools.
|
|
221
|
+
The ones an agent uses most: `get_task_context` (the records for the files or functions it is
|
|
222
|
+
working on), `drill_down` (everything in one domain), `get_entity_history` (every decision
|
|
223
|
+
ever made about one function or file, including reversed ones), `propose_decisions` (drafts
|
|
224
|
+
for review) and `ratify` (accept or drop drafts).
|
|
225
|
+
|
|
226
|
+
See the [MCP reference](docs/reference/mcp-tools.md) for the complete tool set, schemas,
|
|
227
|
+
return shapes, and side effects. The [CLI reference](docs/reference/cli.md) covers setup,
|
|
228
|
+
scripted use, and CI maintenance. Tool names and return shapes are
|
|
229
|
+
[provisional before 1.0](docs/reference/stability.md).
|
|
230
|
+
|
|
231
|
+
## Works on code and on docs
|
|
232
|
+
|
|
233
|
+
Anchor decisions to functions and classes, or to **headings in your architecture documents**;
|
|
234
|
+
Graphify builds both graphs without an LLM. `sidegraph-bootstrap` turns existing ADRs and
|
|
235
|
+
design specs into anchored decisions, also without an LLM.
|
|
236
|
+
|
|
237
|
+
An optional **semantic pass** (`graphify extract`, which needs an API key for its model
|
|
238
|
+
provider and caches results per file) goes deeper on documentation: it turns prose into
|
|
239
|
+
concepts and themes that records can anchor to. Walkthrough:
|
|
240
|
+
[docs/guides/semantic-docs.md](docs/guides/semantic-docs.md).
|
|
241
|
+
|
|
242
|
+
## Trust & privacy
|
|
243
|
+
|
|
244
|
+
- **Local runtime:** Sidegraph reads repository files and the graph, and writes records,
|
|
245
|
+
a derived index, and optional setup or export files. It makes no network calls of its own
|
|
246
|
+
and sends nothing anywhere. Installing and updating it downloads it from GitHub. What the agent
|
|
247
|
+
does with Sidegraph's answers is up to your agent host, which sends them to its model
|
|
248
|
+
provider like any other context. Graphify's optional semantic pass uses its own model
|
|
249
|
+
provider. See [SECURITY.md](SECURITY.md) for the data boundary.
|
|
250
|
+
- **Reviewable capture:** text is redacted before storage using best-effort patterns.
|
|
251
|
+
Review drafts and scan the committed store for secrets. Agent proposals wait for human
|
|
252
|
+
review unless the project answered yes to auto-ratify in `sidegraph-init`; even then,
|
|
253
|
+
architecture decisions and domains wait. See the
|
|
254
|
+
[ratification policy](docs/reference/configuration.md).
|
|
255
|
+
- **Preserved history:** a reversal closes the old record and adds a new one. Only two things
|
|
256
|
+
change a record in place: review sets its status, and a confirmed file move updates where
|
|
257
|
+
its anchor points.
|
|
258
|
+
- **Local counts:** for `sidegraph-stats`, Sidegraph counts how often memory was shown. The
|
|
259
|
+
counts stay in `.sidegraph/index.db`, which is git-ignored and never leaves your machine.
|
|
260
|
+
To stop counting, set `SIDEGRAPH_TELEMETRY=off`.
|
|
261
|
+
|
|
262
|
+
## The engine underneath
|
|
263
|
+
|
|
264
|
+
The graph of your code and documents comes from
|
|
265
|
+
[Graphify](https://github.com/safishamsi/graphify), built without an LLM. Sidegraph only reads
|
|
266
|
+
it and never writes into it. Without a graph, records anchor to files and domains, and recall
|
|
267
|
+
still works. Three things need the graph: anchoring a record to a function, grouping related
|
|
268
|
+
code automatically, and following moved code (see the
|
|
269
|
+
[operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)).
|
|
270
|
+
The graph and the local index can be rebuilt at any time. The JSON records in `.sidegraph/`
|
|
271
|
+
cannot: they are the source of truth, so keep them in your repository and backups.
|
|
272
|
+
|
|
273
|
+
## Status
|
|
274
|
+
|
|
275
|
+
Sidegraph is in beta. Read the [stability policy](docs/reference/stability.md) before
|
|
276
|
+
building automation against it. By default the plugin follows the latest release; for
|
|
277
|
+
reproducible deployments, [pin a version](docs/getting-started/installation.md#mutable-development-references).
|
|
278
|
+
The [changelog](CHANGELOG.md) records release changes.
|
|
279
|
+
|
|
280
|
+
The platform badges at the top summarize the 0.13.0 release checks of 2026-10-14: Windows x64
|
|
281
|
+
and macOS arm64 both ran the full plugin session for Claude Code and Codex. The badges are not
|
|
282
|
+
live CI status; see [Platform coverage](docs/getting-started/installation.md#platform-coverage).
|
|
283
|
+
|
|
284
|
+
## Contributing and support
|
|
285
|
+
|
|
286
|
+
Bug reports, questions, and feature requests are welcome in
|
|
287
|
+
[GitHub Issues](https://github.com/SantyagoSeaman/sidegraph/issues). Include the commands
|
|
288
|
+
you ran, expected and actual behavior, and package versions; remove secrets from logs.
|
|
289
|
+
For patches, see [Contributing](CONTRIBUTING.md) and the
|
|
290
|
+
[Code of Conduct](CODE_OF_CONDUCT.md). Report vulnerabilities through the private
|
|
291
|
+
channel in [SECURITY.md](SECURITY.md).
|
|
292
|
+
|
|
293
|
+
The public repository holds the released code; development happens in a private repository.
|
|
294
|
+
Contributions are reviewed here and carried over, with attribution, before the next release.
|
|
295
|
+
|
|
296
|
+
## Documentation
|
|
297
|
+
|
|
298
|
+
[Getting started](docs/getting-started/installation.md) ·
|
|
299
|
+
[Concepts](docs/concepts/decision-memory.md) ·
|
|
300
|
+
[Guides](docs/guides/capturing-decisions.md) ·
|
|
301
|
+
[Reference](docs/reference/mcp-tools.md) ·
|
|
302
|
+
[Integrations](docs/integrations/graphify.md) (Graphify · Claude Code · Codex) ·
|
|
303
|
+
[Verify your setup](docs/guides/verifying-your-setup.md) ·
|
|
304
|
+
[Operations](docs/reference/operations.md) ·
|
|
305
|
+
[Pilot kit](docs/pilot-kit/README.md) ·
|
|
306
|
+
[Engineering whitepaper](docs/whitepaper/index.md)
|
|
307
|
+
|
|
308
|
+
## License
|
|
309
|
+
|
|
310
|
+
[Apache-2.0](LICENSE).
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Sidegraph
|
|
2
|
+
|
|
3
|
+
[](https://github.com/SantyagoSeaman/sidegraph/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/SantyagoSeaman/sidegraph/releases)
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+
[](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/getting-started/installation.md#platform-coverage)
|
|
9
|
+
[](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/getting-started/installation.md#platform-coverage)
|
|
10
|
+
|
|
11
|
+
Sidegraph is a local MCP server and CLI for preserving engineering decisions and
|
|
12
|
+
facts alongside your code. It records why a design was chosen, which alternatives were
|
|
13
|
+
rejected, and what was learned during implementation, then retrieves that context for
|
|
14
|
+
the files and symbols an agent is working on.
|
|
15
|
+
|
|
16
|
+
Records live in your repository as reviewable JSON files. A derived SQLite index supports
|
|
17
|
+
retrieval; [Graphify](https://github.com/safishamsi/graphify) supplies the code and document
|
|
18
|
+
graph used to anchor records. Claude Code and Codex plugins connect capture and retrieval
|
|
19
|
+
to coding sessions.
|
|
20
|
+
|
|
21
|
+
- Keep decisions, rejected alternatives, and evidence with their provenance and history.
|
|
22
|
+
- Hand the agent the relevant mistakes and constraints before it edits, sized to fit its context.
|
|
23
|
+
- Review agent proposals before accepting them, or let low-risk ones be accepted automatically.
|
|
24
|
+
- Follow code through refactors, and flag records whose code changed or disappeared.
|
|
25
|
+
|
|
26
|
+
[Documentation](docs/README.md) · [Installation](docs/getting-started/installation.md) ·
|
|
27
|
+
[Changelog](CHANGELOG.md) · [Contributing](CONTRIBUTING.md)
|
|
28
|
+
|
|
29
|
+
## Quickstart
|
|
30
|
+
|
|
31
|
+
### Set up a repository (once)
|
|
32
|
+
|
|
33
|
+
**You need** Git, Claude Code or Codex, and [uv](https://docs.astral.sh/uv/getting-started/installation/),
|
|
34
|
+
which also downloads Python 3.13 if you do not have it. On Windows you also need
|
|
35
|
+
[Git for Windows](https://gitforwindows.org/) with its default options
|
|
36
|
+
([details](docs/getting-started/installation.md#windows)); run the commands below in
|
|
37
|
+
PowerShell, using the Windows line where one is given. No API keys and no existing ADRs are required.
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # uv on macOS, Linux
|
|
41
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # uv on Windows
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**1. Build the code graph.** [Graphify](https://github.com/safishamsi/graphify) maps your
|
|
45
|
+
functions, classes and files, so a record can point at the exact function it is about.
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
uv tool install "graphifyy==0.9.6" # two y's in the package name; the command is graphify
|
|
49
|
+
cd /path/to/your/repo
|
|
50
|
+
graphify update .
|
|
51
|
+
echo "graphify-out/" >> .gitignore # the graph is rebuilt from your code; keep it out of git
|
|
52
|
+
Add-Content .gitignore "graphify-out/" # the same line on Windows (PowerShell); do not use >> there
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**2. Create the store**, the `.sidegraph/` directory that holds the records:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
uvx --from git+https://github.com/SantyagoSeaman/sidegraph.git@main sidegraph-init
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
It asks two questions. Both default to yes, so press Enter twice.
|
|
62
|
+
|
|
63
|
+
- *Keep the code graph fresh?* Yes installs a git hook that rebuilds the graph after each commit.
|
|
64
|
+
- *Auto-ratify low-risk records?* Yes means the lessons, gotchas and facts the agent proposes
|
|
65
|
+
are accepted without review. Other proposals still wait for you. The answer is saved in
|
|
66
|
+
`.claude/settings.json`, which you commit. The plugin applies it in Claude Code and in Codex,
|
|
67
|
+
so it covers the whole team.
|
|
68
|
+
|
|
69
|
+
Details: [`sidegraph-init`](docs/reference/cli.md#sidegraph-init).
|
|
70
|
+
|
|
71
|
+
**3. Install the plugin.** It gives the agent the memory at session start and asks it to save
|
|
72
|
+
new decisions at the end of a session. It updates itself: each new session downloads and runs
|
|
73
|
+
the latest Sidegraph release.
|
|
74
|
+
|
|
75
|
+
In Claude Code, run these inside a session in the repository, then start a new session:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
/plugin marketplace add SantyagoSeaman/sidegraph
|
|
79
|
+
/plugin install sidegraph@sidegraph
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
In Codex, run these in a terminal in the repository, then start `codex` and approve the
|
|
83
|
+
Sidegraph hooks when it asks:
|
|
84
|
+
|
|
85
|
+
```sh
|
|
86
|
+
codex plugin marketplace add SantyagoSeaman/sidegraph
|
|
87
|
+
codex plugin add sidegraph@sidegraph
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**4. Record a decision.** In a session, ask the agent, naming a real file and function:
|
|
91
|
+
|
|
92
|
+
> Record this gotcha: the upstream API limits batch requests to 100 items. We rejected
|
|
93
|
+
> a single unbounded request because it fails for larger imports. Anchor it to
|
|
94
|
+
> `import_batch` in `src/importer.py`.
|
|
95
|
+
|
|
96
|
+
It is saved right away. Records the agent proposes on its own may wait for your review: run
|
|
97
|
+
`/sidegraph:ratify-decisions` in Claude Code, or ask Codex to "review pending decisions".
|
|
98
|
+
|
|
99
|
+
**5. Check and commit.** Start a new session and ask: "Before I edit `src/importer.py`, what
|
|
100
|
+
should I know?" The agent should show the gotcha. Then commit `.sidegraph/` and `.gitignore`,
|
|
101
|
+
and `.claude/settings.json` if step 2 created or changed it. The index file inside
|
|
102
|
+
`.sidegraph/` is git-ignored automatically.
|
|
103
|
+
|
|
104
|
+
### Each teammate
|
|
105
|
+
|
|
106
|
+
After cloning, each teammate runs steps 1, 2 and 3. In a clone, step 2 leaves the committed
|
|
107
|
+
records and settings alone. It only installs the graph hook there.
|
|
108
|
+
|
|
109
|
+
Next, [name your domains](docs/guides/naming-your-domains.md) to give the memory a table of
|
|
110
|
+
contents, or import existing ADRs and design specs with the
|
|
111
|
+
[preview-first bootstrap](docs/getting-started/bootstrap.md). The
|
|
112
|
+
[verification checklist](docs/guides/verifying-your-setup.md) covers the whole workflow.
|
|
113
|
+
|
|
114
|
+
### Other options
|
|
115
|
+
|
|
116
|
+
- **Without the graph.** Skip step 1 and answer no to the first question in step 2. Records
|
|
117
|
+
then attach to whole files instead of functions.
|
|
118
|
+
- **Versions.** You always run the latest release. The plugin and the step 2 command install
|
|
119
|
+
Sidegraph from the public repository on GitHub, whose `main` branch changes only when a
|
|
120
|
+
release is published. To pin a version instead, see
|
|
121
|
+
[pinning](docs/getting-started/installation.md#mutable-development-references).
|
|
122
|
+
- **Sidegraph commands in your own terminal.** Optional:
|
|
123
|
+
`uv tool install git+https://github.com/SantyagoSeaman/sidegraph.git@main`, from the same place as the plugin. It does not update itself, so
|
|
124
|
+
after each release run `uv tool upgrade sidegraph`
|
|
125
|
+
([details](docs/getting-started/installation.md#option-a--the-cli-on-your-path)).
|
|
126
|
+
- **Other MCP clients.** Run `sidegraph-mcp` over stdio; see the
|
|
127
|
+
[MCP reference](docs/reference/mcp-tools.md) and [configuration](docs/reference/configuration.md).
|
|
128
|
+
Automatic memory needs a host with hooks, such as Claude Code or Codex.
|
|
129
|
+
- **Windows details**, including what the plugins need from Git for Windows:
|
|
130
|
+
[Windows setup](docs/getting-started/installation.md#windows).
|
|
131
|
+
|
|
132
|
+
## Why
|
|
133
|
+
|
|
134
|
+
Code describes the current implementation, but often omits the alternatives a team
|
|
135
|
+
tried, operational constraints it discovered, and reasons for changing direction.
|
|
136
|
+
Sidegraph captures that reasoning and links it to the code and planning documents it
|
|
137
|
+
concerns. It works alongside an existing ADR or specification process.
|
|
138
|
+
|
|
139
|
+
The useful starting point is a project with decisions worth retaining and people willing
|
|
140
|
+
to review them. Memory quality depends on capture, review, and whether the agent actually
|
|
141
|
+
retrieves it. Small tasks answerable directly from code may gain little from the extra
|
|
142
|
+
context. The [engineering whitepaper](docs/whitepaper/index.md) describes the evidence,
|
|
143
|
+
negative results, and adoption criteria; the [pilot kit](docs/pilot-kit/README.md) helps
|
|
144
|
+
evaluate it on your own repository.
|
|
145
|
+
|
|
146
|
+
## How it works
|
|
147
|
+
|
|
148
|
+
1. **Capture.** During a session the agent saves a decision when you ask for one. At the end of
|
|
149
|
+
a session the plugin reminds it to propose the decisions worth keeping. Secrets are redacted
|
|
150
|
+
before anything is written.
|
|
151
|
+
2. **Review.** You accept or drop what the agent proposed; Sidegraph calls this *ratifying*.
|
|
152
|
+
Records are JSON files in `.sidegraph/`, committed with your code.
|
|
153
|
+
3. **Anchoring.** Each record is linked to the functions, classes, files or document headings it
|
|
154
|
+
is about, using the graph Graphify builds from your code. When a refactor moves code,
|
|
155
|
+
Sidegraph follows the move; when it cannot tell where the code went, it flags the record for
|
|
156
|
+
review.
|
|
157
|
+
4. **Recall.** At the start of the next session the agent gets a short table of contents of the
|
|
158
|
+
project's areas, called *domains*. Before changing a file it asks for that file's records,
|
|
159
|
+
with known mistakes first. In Claude Code, the agent also receives a file's records the
|
|
160
|
+
first time it reads or edits that file.
|
|
161
|
+
5. **Subagents.** In Claude Code, when the agent hands a task to a subagent, the records for the
|
|
162
|
+
files named in that task are added to it. In Claude Code and Codex, each new subagent is told
|
|
163
|
+
that the memory exists and how to use it.
|
|
164
|
+
|
|
165
|
+
Domains are named by you or proposed by the agent; each one says what an area is for and which
|
|
166
|
+
code belongs to it. See the [mind model](docs/concepts/mind-model.md) and the
|
|
167
|
+
[anchoring model](docs/concepts/anchoring.md).
|
|
168
|
+
|
|
169
|
+
## What gets stored
|
|
170
|
+
|
|
171
|
+
| Record | What it is |
|
|
172
|
+
|---|---|
|
|
173
|
+
| `Decision` | Kind (`adr`, `lesson`, `constraint`, or `gotcha`), context, choice, rejected alternatives, consequences, validity, history, and provenance |
|
|
174
|
+
| `Fact` | A benchmark, external constraint, or observed finding that supports a decision or stands alone |
|
|
175
|
+
| `Entity` | A stable ID for a function, class, file or heading, kept when the graph is rebuilt |
|
|
176
|
+
| `AnchorBinding` | The link between a decision or fact and an entity it is about |
|
|
177
|
+
| `Domain` | A named area with a purpose, membership rules, and optional subdomains |
|
|
178
|
+
|
|
179
|
+
Nothing is ever deleted. A reversed decision is closed and replaced by a new one, so *"tried
|
|
180
|
+
before, abandoned because…"* stays retrievable with `get_entity_history`. Dropping a proposal
|
|
181
|
+
marks it rejected; it stays in the history too.
|
|
182
|
+
|
|
183
|
+
Facts follow the same review and history rules as decisions. Accepting or dropping a decision also accepts or drops
|
|
184
|
+
the pending facts attached to it. Details:
|
|
185
|
+
[docs/concepts/data-model.md](docs/concepts/data-model.md) and
|
|
186
|
+
[docs/guides/capturing-decisions.md#facts-the-evidence-layer](docs/guides/capturing-decisions.md#facts-the-evidence-layer).
|
|
187
|
+
|
|
188
|
+
## MCP tools
|
|
189
|
+
|
|
190
|
+
The `sidegraph-mcp` stdio server exposes retrieval, capture, review and maintenance tools.
|
|
191
|
+
The ones an agent uses most: `get_task_context` (the records for the files or functions it is
|
|
192
|
+
working on), `drill_down` (everything in one domain), `get_entity_history` (every decision
|
|
193
|
+
ever made about one function or file, including reversed ones), `propose_decisions` (drafts
|
|
194
|
+
for review) and `ratify` (accept or drop drafts).
|
|
195
|
+
|
|
196
|
+
See the [MCP reference](docs/reference/mcp-tools.md) for the complete tool set, schemas,
|
|
197
|
+
return shapes, and side effects. The [CLI reference](docs/reference/cli.md) covers setup,
|
|
198
|
+
scripted use, and CI maintenance. Tool names and return shapes are
|
|
199
|
+
[provisional before 1.0](docs/reference/stability.md).
|
|
200
|
+
|
|
201
|
+
## Works on code and on docs
|
|
202
|
+
|
|
203
|
+
Anchor decisions to functions and classes, or to **headings in your architecture documents**;
|
|
204
|
+
Graphify builds both graphs without an LLM. `sidegraph-bootstrap` turns existing ADRs and
|
|
205
|
+
design specs into anchored decisions, also without an LLM.
|
|
206
|
+
|
|
207
|
+
An optional **semantic pass** (`graphify extract`, which needs an API key for its model
|
|
208
|
+
provider and caches results per file) goes deeper on documentation: it turns prose into
|
|
209
|
+
concepts and themes that records can anchor to. Walkthrough:
|
|
210
|
+
[docs/guides/semantic-docs.md](docs/guides/semantic-docs.md).
|
|
211
|
+
|
|
212
|
+
## Trust & privacy
|
|
213
|
+
|
|
214
|
+
- **Local runtime:** Sidegraph reads repository files and the graph, and writes records,
|
|
215
|
+
a derived index, and optional setup or export files. It makes no network calls of its own
|
|
216
|
+
and sends nothing anywhere. Installing and updating it downloads it from GitHub. What the agent
|
|
217
|
+
does with Sidegraph's answers is up to your agent host, which sends them to its model
|
|
218
|
+
provider like any other context. Graphify's optional semantic pass uses its own model
|
|
219
|
+
provider. See [SECURITY.md](SECURITY.md) for the data boundary.
|
|
220
|
+
- **Reviewable capture:** text is redacted before storage using best-effort patterns.
|
|
221
|
+
Review drafts and scan the committed store for secrets. Agent proposals wait for human
|
|
222
|
+
review unless the project answered yes to auto-ratify in `sidegraph-init`; even then,
|
|
223
|
+
architecture decisions and domains wait. See the
|
|
224
|
+
[ratification policy](docs/reference/configuration.md).
|
|
225
|
+
- **Preserved history:** a reversal closes the old record and adds a new one. Only two things
|
|
226
|
+
change a record in place: review sets its status, and a confirmed file move updates where
|
|
227
|
+
its anchor points.
|
|
228
|
+
- **Local counts:** for `sidegraph-stats`, Sidegraph counts how often memory was shown. The
|
|
229
|
+
counts stay in `.sidegraph/index.db`, which is git-ignored and never leaves your machine.
|
|
230
|
+
To stop counting, set `SIDEGRAPH_TELEMETRY=off`.
|
|
231
|
+
|
|
232
|
+
## The engine underneath
|
|
233
|
+
|
|
234
|
+
The graph of your code and documents comes from
|
|
235
|
+
[Graphify](https://github.com/safishamsi/graphify), built without an LLM. Sidegraph only reads
|
|
236
|
+
it and never writes into it. Without a graph, records anchor to files and domains, and recall
|
|
237
|
+
still works. Three things need the graph: anchoring a record to a function, grouping related
|
|
238
|
+
code automatically, and following moved code (see the
|
|
239
|
+
[operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)).
|
|
240
|
+
The graph and the local index can be rebuilt at any time. The JSON records in `.sidegraph/`
|
|
241
|
+
cannot: they are the source of truth, so keep them in your repository and backups.
|
|
242
|
+
|
|
243
|
+
## Status
|
|
244
|
+
|
|
245
|
+
Sidegraph is in beta. Read the [stability policy](docs/reference/stability.md) before
|
|
246
|
+
building automation against it. By default the plugin follows the latest release; for
|
|
247
|
+
reproducible deployments, [pin a version](docs/getting-started/installation.md#mutable-development-references).
|
|
248
|
+
The [changelog](CHANGELOG.md) records release changes.
|
|
249
|
+
|
|
250
|
+
The platform badges at the top summarize the 0.13.0 release checks of 2026-10-14: Windows x64
|
|
251
|
+
and macOS arm64 both ran the full plugin session for Claude Code and Codex. The badges are not
|
|
252
|
+
live CI status; see [Platform coverage](docs/getting-started/installation.md#platform-coverage).
|
|
253
|
+
|
|
254
|
+
## Contributing and support
|
|
255
|
+
|
|
256
|
+
Bug reports, questions, and feature requests are welcome in
|
|
257
|
+
[GitHub Issues](https://github.com/SantyagoSeaman/sidegraph/issues). Include the commands
|
|
258
|
+
you ran, expected and actual behavior, and package versions; remove secrets from logs.
|
|
259
|
+
For patches, see [Contributing](CONTRIBUTING.md) and the
|
|
260
|
+
[Code of Conduct](CODE_OF_CONDUCT.md). Report vulnerabilities through the private
|
|
261
|
+
channel in [SECURITY.md](SECURITY.md).
|
|
262
|
+
|
|
263
|
+
The public repository holds the released code; development happens in a private repository.
|
|
264
|
+
Contributions are reviewed here and carried over, with attribution, before the next release.
|
|
265
|
+
|
|
266
|
+
## Documentation
|
|
267
|
+
|
|
268
|
+
[Getting started](docs/getting-started/installation.md) ·
|
|
269
|
+
[Concepts](docs/concepts/decision-memory.md) ·
|
|
270
|
+
[Guides](docs/guides/capturing-decisions.md) ·
|
|
271
|
+
[Reference](docs/reference/mcp-tools.md) ·
|
|
272
|
+
[Integrations](docs/integrations/graphify.md) (Graphify · Claude Code · Codex) ·
|
|
273
|
+
[Verify your setup](docs/guides/verifying-your-setup.md) ·
|
|
274
|
+
[Operations](docs/reference/operations.md) ·
|
|
275
|
+
[Pilot kit](docs/pilot-kit/README.md) ·
|
|
276
|
+
[Engineering whitepaper](docs/whitepaper/index.md)
|
|
277
|
+
|
|
278
|
+
## License
|
|
279
|
+
|
|
280
|
+
[Apache-2.0](LICENSE).
|