sidegraph 0.3.1__tar.gz → 0.5.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.3.1 → sidegraph-0.5.0}/.github/workflows/ci.yml +0 -1
- {sidegraph-0.3.1 → sidegraph-0.5.0}/CHANGELOG.md +80 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/CLAUDE.md +1 -1
- {sidegraph-0.3.1 → sidegraph-0.5.0}/PKG-INFO +8 -6
- {sidegraph-0.3.1 → sidegraph-0.5.0}/README.md +7 -5
- {sidegraph-0.3.1 → sidegraph-0.5.0}/SECURITY.md +4 -3
- sidegraph-0.5.0/docs/README.md +56 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/concepts/data-model.md +10 -6
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/concepts/mind-model.md +3 -2
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/concepts/retrieval.md +22 -20
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/getting-started/bootstrap.md +2 -6
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/getting-started/claude-code-setup.md +6 -10
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/getting-started/codex-setup.md +12 -15
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/getting-started/installation.md +38 -35
- sidegraph-0.5.0/docs/getting-started/quickstart.md +71 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/guides/capturing-decisions.md +11 -8
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/guides/ci-cd-maintenance.md +85 -138
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/guides/naming-your-domains.md +5 -5
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/guides/retrieval-in-sessions.md +23 -24
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/guides/semantic-docs.md +10 -8
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/guides/team-workflow.md +13 -13
- sidegraph-0.5.0/docs/guides/verifying-your-setup.md +78 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/integrations/claude-code.md +18 -23
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/integrations/codex.md +10 -10
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/integrations/graphify.md +2 -2
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/llms.txt +8 -8
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/pilot-kit/README.md +25 -11
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/reference/cli.md +120 -89
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/reference/configuration.md +6 -6
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/reference/git-bindings.md +4 -3
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/reference/mcp-tools.md +49 -30
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/reference/operations.md +12 -9
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/reference/releasing.md +56 -38
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/reference/stability.md +6 -6
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/reference/store-format.md +21 -21
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +7 -2
- {sidegraph-0.3.1 → sidegraph-0.5.0}/pyproject.toml +1 -1
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/__init__.py +1 -1
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/integrations.py +6 -1
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/cli.py +26 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/doc_import.py +23 -6
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/gitio.py +6 -5
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/server.py +39 -23
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/verify.py +110 -23
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/conftest.py +11 -7
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_bootstrap_cli.py +1 -1
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_bootstrap_integrations.py +64 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_import.py +66 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_init.py +67 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doc_import.py +67 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_docs_claims.py +103 -7
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_env_isolation.py +3 -1
- sidegraph-0.5.0/tests/test_sandbox_hygiene.py +328 -0
- sidegraph-0.5.0/tests/test_server_prewrite_anchor_validation.py +214 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_migration.py +1 -1
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_verify_transitions.py +368 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/uv.lock +5 -4
- sidegraph-0.3.1/docs/README.md +0 -78
- sidegraph-0.3.1/docs/getting-started/quickstart.md +0 -102
- sidegraph-0.3.1/docs/guides/verifying-your-setup.md +0 -517
- sidegraph-0.3.1/tests/test_sandbox_hygiene.py +0 -133
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.agents/plugins/marketplace.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.claude-plugin/marketplace.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.github/CODEOWNERS +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.github/secret_scanning.yml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.github/workflows/publish.yml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.github/workflows/scorecard.yml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.gitignore +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.gitleaks.toml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.pre-commit-config.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/.python-version +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/AGENTS.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/CODE_OF_CONDUCT.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/CONTRIBUTING.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/LICENSE +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/concepts/anchoring.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/concepts/decision-memory.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/guides/surviving-refactors.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/pilot-kit/corpus_fit.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/pilot-kit/judge-prompt.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/pilot-kit/questions-prompt.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/pilot-kit/rubric-template.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/reference/hooks.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/docs/whitepaper/index.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/.mcp.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/codex/hooks.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/codex/mcp.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/hooks/hooks.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/stats/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/anchoring.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/__init__.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/apply.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/catalog.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/cli.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/model.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/planner.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/proof.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/review.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/bootstrap/scan.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/capture.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/config.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/doctor.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/domains.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/engine/__init__.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/engine/reader.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/host/__init__.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/host/claude_settings.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/host/hooks.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/importer.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/okf.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/profiles.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/retrieval.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/schema.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/stats/__init__.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/stats/model.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/stats/render.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/store.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/sync.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/viz/__init__.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/viz/model.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/viz/render.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/src/sidegraph/viz/template.html +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/__init__.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bitfinex_slice.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/graph.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/design.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/fixtures/mini_graph.json +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_anchoring.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_anchoring_mapping_refresh.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_bootstrap_apply.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_bootstrap_catalog.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_bootstrap_model.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_bootstrap_planner.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_bootstrap_proof.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_bootstrap_review.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_bootstrap_scan.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_capture_auto_accept.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_capture_facts.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_capture_integration.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_capture_neighbors.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_capture_propose.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_capture_redact.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_compact.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_doctor.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_domains.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_okf.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_ratify.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_ratify_facts.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_stats.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_sync.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_sync_check.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_cli_viz.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_codex_plugin.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_community_baseline.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_config.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_corpus_expected_renders.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_corpus_self_corpus.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_coverage_telemetry_e2e.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_digest_integrity.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doc_corpus_integration.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor_auto_share.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor_code_drift.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor_dangling_supports.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor_duplicate_entity.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor_never_surfaced.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor_scan.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor_stale_instructions.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_doctor_unratified_accept.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_domains.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_entity_duplicate_resolution.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_entity_get_or_create_race.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_fact_reachability_gate.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_flow_profile.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_git_bindings_blame.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_git_bindings_hook.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_git_bindings_provenance.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_host_claude_settings.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_host_drift_nudge.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_host_pretool.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_host_session_key.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_host_session_start.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_host_stop.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_host_touch_events.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_importer.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_mind_model_additive_fields.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_okf.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_openspec_profile.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_pathless_descriptor_adoption.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_proposal_lifecycle.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_ratify_listing_gone_dark.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_ratify_policy.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_community_labels.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_doc_nodes.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_graph.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_integration.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_nodes_in_file.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_perf.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_rationale.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_read.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_resolve.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_subdir_mismatch.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_reader_version.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_redaction_seeded.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_repoint_integration.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_budget_counters.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_context.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_drift_marker.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_drilldown.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_facts.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_ids.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_integration.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_rank.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_seeds.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_shown_ids.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_terminal_evidence.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_thin_tools.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_toc.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_toptier.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_retrieval_unratified.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_schema_descriptor.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_schema_domain.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_schema_fact.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_add_anchors.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_anchoring.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_capture.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_coverage_events.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_domains.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_drilldown.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_facts.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_find_entity.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_get_store.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_get_task_context.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_import.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_mcp_smoke.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_ratify_facts.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_redaction.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_render_events.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_supersede.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_sync_anchors.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_telemetry.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_thin_tools.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_server_verify.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_stats_graph.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_stats_model.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_stats_render.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_stats_skill.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_stats_snapshot.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_canonical_stat.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_compact.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_compact_review.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_concurrent_open.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_coverage_telemetry.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_derived_community.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_domains.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_entities.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_fact_cascade.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_facts.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_meta.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_mutation_guard.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_mutation_immediate.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_persistence.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_ratification.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_rebuild_atomicity.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_render_events.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_retrieval.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_slug_conflicts.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_stamping_marker.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_telemetry.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_threading.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_store_tmp_sweep_age.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_clean.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_domains.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_drift_cache.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_fresh_clone.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_integration.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_rebind.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_repoint.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_report_has_findings.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_run.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_toc_cache.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_volatile_heal.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_sync_wiring.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_telemetry_retention.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_verify_snapshot.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_viz_asset_packaged.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_viz_model.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_viz_render_html.py +0 -0
- {sidegraph-0.3.1 → sidegraph-0.5.0}/tests/test_viz_render_json.py +0 -0
|
@@ -7,6 +7,86 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.5.0] — 2026-09-23
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **The public `main`, which the plugin manifests install from, moves only at releases.**
|
|
15
|
+
The plugin runs whatever `main` holds, so a snapshot pushed between releases used to reach
|
|
16
|
+
every plugin user at once. The release script now pushes `main` only for a release: it
|
|
17
|
+
refuses unless the version it carries is untagged in the public repository and
|
|
18
|
+
`CHANGELOG.md` dates it.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- **`sidegraph-init` now says to restart the Claude Code session after it writes
|
|
23
|
+
`SIDEGRAPH_RATIFY_POLICY`.** The Sidegraph MCP server reads the policy from the
|
|
24
|
+
environment it started with, so a server started before `sidegraph-init` kept proposing
|
|
25
|
+
under the old policy until the session restarted, and nothing said so.
|
|
26
|
+
- **`sidegraph-verify --against` no longer flags a ratification of an already-committed
|
|
27
|
+
proposal, or a supersede/drop that touches a record written before a later schema addition
|
|
28
|
+
(`Provenance.commit`, `Domain.seed_anchors`/`path_prefixes`) existed.** Ratifying a
|
|
29
|
+
decision, fact, or domain stamps `ratified_at`/`ratified_by`, and neither field was on the
|
|
30
|
+
transition layer's mutable allow-list, so the stamp alone was reported as an illegal field
|
|
31
|
+
change. Separately, rewriting an old record that predates a field added to its schema
|
|
32
|
+
serializes that field back in as its default, which a plain top-level or whole-list
|
|
33
|
+
comparison also read as a change. The ratifier stamp may now be set once, from a proposed
|
|
34
|
+
record, landing on any state reached through accepted within the diffed range; an absent
|
|
35
|
+
field now counts as the same value as an explicit `null` or an empty list/object, at every
|
|
36
|
+
nesting depth and inside list items. A field whose default is a non-empty value is not
|
|
37
|
+
covered by this.
|
|
38
|
+
- **`sidegraph-import --docs` no longer aborts on a file that is not valid UTF-8.** It
|
|
39
|
+
decoded every document as strict UTF-8 with no handler, so one document saved in
|
|
40
|
+
`cp1251` (or carrying a stray non-UTF-8 byte) raised and stopped the whole run, with
|
|
41
|
+
nothing after it imported and no report printed. The file is now a named skip
|
|
42
|
+
(`skipped_undecodable`) instead: the run continues, and both the real run and
|
|
43
|
+
`--dry-run` print the skipped path(s), last.
|
|
44
|
+
- **`sidegraph-import --docs` now reads a UTF-8 document that starts with a byte-order mark
|
|
45
|
+
(BOM).** The BOM used to survive into the parsed text, so the H1 and any frontmatter never
|
|
46
|
+
matched, and a real decision document was silently counted `skipped_not_decision`. It is
|
|
47
|
+
now stripped before parsing. `sidegraph-bootstrap` still reads such a file without
|
|
48
|
+
stripping it.
|
|
49
|
+
|
|
50
|
+
Re-importing a BOM document that an earlier version did import can change its record,
|
|
51
|
+
once:
|
|
52
|
+
- On the `openspec` profile, a BOM `proposal.md` had imported under a title built from its
|
|
53
|
+
path. The re-import supersedes it with the real H1 title.
|
|
54
|
+
- Frontmatter the BOM hid is now honoured. A document marked `status: superseded` now
|
|
55
|
+
counts `skipped_superseded_frontmatter`, and its earlier live record stays as it is.
|
|
56
|
+
- A document marked as a draft, proposed, pending or under review keeps its earlier
|
|
57
|
+
`accepted` record: a re-import compares content, not status, and the content is
|
|
58
|
+
unchanged.
|
|
59
|
+
|
|
60
|
+
Retiring or re-proposing such a record is manual.
|
|
61
|
+
|
|
62
|
+
### Security
|
|
63
|
+
|
|
64
|
+
- **The lockfile moves `anyio` from 4.14.1 to 4.15.1**, past three advisories fixed in
|
|
65
|
+
4.14.2: TLS certificate spoofing through IDNA 2003 host-name encoding (critical),
|
|
66
|
+
`run_process` keeping the parent's supplementary groups (high), and process-pool workers
|
|
67
|
+
blocking on undrained stderr (moderate). The published package does not pin `anyio`, so
|
|
68
|
+
this changes development and CI environments and installs made from `uv.lock`; a fresh
|
|
69
|
+
install already resolves a fixed version.
|
|
70
|
+
|
|
71
|
+
## [0.4.0] — 2026-09-22
|
|
72
|
+
|
|
73
|
+
### Fixed
|
|
74
|
+
|
|
75
|
+
- **`supersede_decision` no longer half-applies when an anchor is invalid.** It wrote the
|
|
76
|
+
successor and closed the predecessor before checking the anchors, so an illegal `relation`
|
|
77
|
+
left an accepted successor with none, or only some, of its bindings: wholly or partly
|
|
78
|
+
invisible to task-seeded retrieval, and permanent in an append-only store. An anchor list
|
|
79
|
+
in which no anchor had a `name` reached the same state without any error.
|
|
80
|
+
- **All five anchor-taking tools (`add_decision`, `supersede_decision`, `add_fact`,
|
|
81
|
+
`supersede_fact`, `add_anchors`) now validate the whole anchor list before their first
|
|
82
|
+
write.** An illegal `relation` is now rejected on every path; `supersede_decision` used to
|
|
83
|
+
accept it silently when no graph was present or the anchor had no `name`. Two cases are
|
|
84
|
+
newly rejected. The first is a `name` or `file_path` that is not a string, which used to
|
|
85
|
+
half-write on the fact paths and `add_anchors`, and on the decision paths whenever a graph
|
|
86
|
+
was present. The second is a non-empty list in which no anchor has a `name`, which used to
|
|
87
|
+
succeed while binding nothing. On `add_fact` it also bypassed the check that an anchorless
|
|
88
|
+
fact supports a live decision.
|
|
89
|
+
|
|
10
90
|
## [0.3.1] — 2026-09-19
|
|
11
91
|
|
|
12
92
|
### 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.5.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.5.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
|
|
@@ -63,11 +63,11 @@ Works cold: no existing ADRs required. No API key — the core loop is fully loc
|
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
65
|
# 1. Install the graph engine and build a graph over your repo (code or markdown)
|
|
66
|
-
uv tool install graphifyy
|
|
66
|
+
uv tool install "graphifyy==0.9.6" # double "y" — that's the PyPI name; CLI is `graphify`
|
|
67
67
|
cd /path/to/your/repo && graphify update .
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
`[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]"`) — it adds
|
|
70
|
+
`[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]==0.9.6"`) — it adds
|
|
71
71
|
Graphify's *own* MCP server, a deeper structure-query layer over the same graph. Sidegraph
|
|
72
72
|
only ever reads `graph.json`, so the plain install above is all it needs.
|
|
73
73
|
|
|
@@ -84,14 +84,16 @@ only ever reads `graph.json`, so the plain install above is all it needs.
|
|
|
84
84
|
uv tool install sidegraph # from PyPI — puts sidegraph-init / sidegraph-mcp / … on PATH
|
|
85
85
|
sidegraph-init
|
|
86
86
|
|
|
87
|
-
# Prefer
|
|
87
|
+
# Prefer running straight from git instead of PyPI? Swap step 3 for:
|
|
88
88
|
# uvx --from git+https://github.com/SantyagoSeaman/sidegraph.git@main sidegraph-init
|
|
89
|
-
# `@main`
|
|
89
|
+
# `@main` moves only when a release is cut. It is still a mutable ref: a later cache refresh can
|
|
90
|
+
# install a newer one. Pin a tag or a SHA for CI.
|
|
90
91
|
```
|
|
91
92
|
|
|
92
93
|
4. **Name your domains** — turns the graph's communities into a described table of
|
|
93
94
|
contents. Tell your agent *"name my domains"* (or run `/sidegraph:name-domains`) and
|
|
94
|
-
|
|
95
|
+
review its proposed grouping (larger graphs may get 2–3 alternatives). CLI alternative
|
|
96
|
+
for scripted/CI use:
|
|
95
97
|
`sidegraph-domains bootstrap` + `sidegraph-ratify` —
|
|
96
98
|
see [naming your domains](docs/guides/naming-your-domains.md).
|
|
97
99
|
|
|
@@ -35,11 +35,11 @@ Works cold: no existing ADRs required. No API key — the core loop is fully loc
|
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
# 1. Install the graph engine and build a graph over your repo (code or markdown)
|
|
38
|
-
uv tool install graphifyy
|
|
38
|
+
uv tool install "graphifyy==0.9.6" # double "y" — that's the PyPI name; CLI is `graphify`
|
|
39
39
|
cd /path/to/your/repo && graphify update .
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
`[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]"`) — it adds
|
|
42
|
+
`[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]==0.9.6"`) — it adds
|
|
43
43
|
Graphify's *own* MCP server, a deeper structure-query layer over the same graph. Sidegraph
|
|
44
44
|
only ever reads `graph.json`, so the plain install above is all it needs.
|
|
45
45
|
|
|
@@ -56,14 +56,16 @@ only ever reads `graph.json`, so the plain install above is all it needs.
|
|
|
56
56
|
uv tool install sidegraph # from PyPI — puts sidegraph-init / sidegraph-mcp / … on PATH
|
|
57
57
|
sidegraph-init
|
|
58
58
|
|
|
59
|
-
# Prefer
|
|
59
|
+
# Prefer running straight from git instead of PyPI? Swap step 3 for:
|
|
60
60
|
# uvx --from git+https://github.com/SantyagoSeaman/sidegraph.git@main sidegraph-init
|
|
61
|
-
# `@main`
|
|
61
|
+
# `@main` moves only when a release is cut. It is still a mutable ref: a later cache refresh can
|
|
62
|
+
# install a newer one. Pin a tag or a SHA for CI.
|
|
62
63
|
```
|
|
63
64
|
|
|
64
65
|
4. **Name your domains** — turns the graph's communities into a described table of
|
|
65
66
|
contents. Tell your agent *"name my domains"* (or run `/sidegraph:name-domains`) and
|
|
66
|
-
|
|
67
|
+
review its proposed grouping (larger graphs may get 2–3 alternatives). CLI alternative
|
|
68
|
+
for scripted/CI use:
|
|
67
69
|
`sidegraph-domains bootstrap` + `sidegraph-ratify` —
|
|
68
70
|
see [naming your domains](docs/guides/naming-your-domains.md).
|
|
69
71
|
|
|
@@ -16,9 +16,10 @@ Sidegraph is a local-only tool. Its entire data surface:
|
|
|
16
16
|
(`.sidegraph/` by convention) — small, human-readable JSON record files meant to be
|
|
17
17
|
committed to your repo, a derived and gitignored `index.db` (a local SQLite index
|
|
18
18
|
rebuilt from those files for fast queries, never itself committed), a committed format
|
|
19
|
-
marker, and a `.gitignore` the store writes for itself. Opening a
|
|
20
|
-
store (`decisions.db
|
|
21
|
-
`decisions.db.migrated-backup` (kept, never deleted)
|
|
19
|
+
marker, and a `.gitignore` the store writes for itself. Opening a legacy single-file
|
|
20
|
+
store (`decisions.db`, from before store schema 0.4.0) triggers a one-time migration
|
|
21
|
+
that renames the legacy file to `decisions.db.migrated-backup` (kept, never deleted)
|
|
22
|
+
alongside writing the new
|
|
22
23
|
directory layout. Outside `.sidegraph/`, the only filesystem writes are the standard
|
|
23
24
|
config snippets you install yourself (`.mcp.json`, hook entries) — Sidegraph touches
|
|
24
25
|
nothing else. See [`docs/reference/store-format.md`](docs/reference/store-format.md)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Sidegraph documentation
|
|
2
|
+
|
|
3
|
+
Sidegraph stores durable decisions and non-derivable facts beside the repository they
|
|
4
|
+
describe. Start with the task you have now; [`llms.txt`](llms.txt) is the flat index for an
|
|
5
|
+
agent.
|
|
6
|
+
|
|
7
|
+
## Install and prove it works
|
|
8
|
+
|
|
9
|
+
1. [Install Sidegraph and Graphify](getting-started/installation.md).
|
|
10
|
+
2. Follow the [end-to-end quickstart](getting-started/quickstart.md).
|
|
11
|
+
3. Use the recommended host path for [Claude Code](getting-started/claude-code-setup.md) or
|
|
12
|
+
[Codex](getting-started/codex-setup.md).
|
|
13
|
+
4. Run the [four-case verification checklist](guides/verifying-your-setup.md).
|
|
14
|
+
|
|
15
|
+
If the repository already has ADRs or specs, use the
|
|
16
|
+
[preview-first bootstrap](getting-started/bootstrap.md) after installation.
|
|
17
|
+
|
|
18
|
+
## Use it during normal work
|
|
19
|
+
|
|
20
|
+
- [Retrieve context before editing](guides/retrieval-in-sessions.md).
|
|
21
|
+
- [Capture decisions and supporting facts](guides/capturing-decisions.md).
|
|
22
|
+
- [Name domains for the SessionStart table of contents](guides/naming-your-domains.md).
|
|
23
|
+
- [Share and review the store as a team](guides/team-workflow.md).
|
|
24
|
+
|
|
25
|
+
## Operate and maintain it
|
|
26
|
+
|
|
27
|
+
- [Survive refactors and heal anchors](guides/surviving-refactors.md).
|
|
28
|
+
- [Run CI and scheduled maintenance](guides/ci-cd-maintenance.md).
|
|
29
|
+
- [Import decision-shaped documents](guides/semantic-docs.md).
|
|
30
|
+
- [See runtime cost and operational boundaries](reference/operations.md).
|
|
31
|
+
- [Cut a Sidegraph release](reference/releasing.md) (maintainers).
|
|
32
|
+
|
|
33
|
+
The [pilot kit](pilot-kit/README.md) is an evaluation protocol for teams deciding whether to
|
|
34
|
+
adopt Sidegraph. The engineering whitepaper is generated in the published snapshot at
|
|
35
|
+
[`docs/whitepaper/index.md`](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/whitepaper/index.md);
|
|
36
|
+
it is optional background on evidence, limits, and repository fit.
|
|
37
|
+
|
|
38
|
+
## Understand the model
|
|
39
|
+
|
|
40
|
+
- [Decision memory](concepts/decision-memory.md) — what belongs in the store.
|
|
41
|
+
- [Mind model](concepts/mind-model.md) — domains, TOC, and drill-down.
|
|
42
|
+
- [Data model](concepts/data-model.md) — persisted record shapes.
|
|
43
|
+
- [Anchoring](concepts/anchoring.md) — how records stay attached to code and docs.
|
|
44
|
+
- [Retrieval](concepts/retrieval.md) — ranking, trust quarantine, and budgets.
|
|
45
|
+
|
|
46
|
+
## Look up an exact contract
|
|
47
|
+
|
|
48
|
+
- [MCP tools](reference/mcp-tools.md)
|
|
49
|
+
- [CLI](reference/cli.md)
|
|
50
|
+
- [Hooks](reference/hooks.md)
|
|
51
|
+
- [Configuration](reference/configuration.md)
|
|
52
|
+
- [Store format](reference/store-format.md)
|
|
53
|
+
- [Stability levels](reference/stability.md)
|
|
54
|
+
- [Git bindings](reference/git-bindings.md)
|
|
55
|
+
- Integrations: [Claude Code](integrations/claude-code.md),
|
|
56
|
+
[Codex](integrations/codex.md), [Graphify](integrations/graphify.md)
|
|
@@ -254,20 +254,24 @@ written; a garbled row raises and leaves the legacy file untouched) into the can
|
|
|
254
254
|
file-per-record layout, stamped at the running code's current `SCHEMA_VERSION`; the legacy
|
|
255
255
|
file is renamed to `<name>.migrated-backup` (never deleted) rather than removed. Both `0.2.0`
|
|
256
256
|
and `0.3.0` sources go through this same export, not a stamp-only rewrite — see
|
|
257
|
-
[store format: migration to 0.4.0](../reference/store-format.md#migration-to-040-from-02x-and-03x)
|
|
257
|
+
[store format: migration to schema 0.4.0](../reference/store-format.md#migration-to-schema-040-from-schema-02x-and-03x)
|
|
258
258
|
for the full four-step sequence. Any other mismatch (a version older than `0.2.0`, a
|
|
259
259
|
newer/future version, or an unrecognized string) is a hard rejection: use a fresh store.
|
|
260
260
|
|
|
261
261
|
## `Initiative` — the Tier-0 grouping container
|
|
262
262
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
263
|
+
The high-level capture APIs use an initiative as a flat Tier-0 abstract entity named
|
|
264
|
+
`initiative:<label>`. Passing a draft's `initiative` field creates that entity and binding;
|
|
265
|
+
omitting it creates neither. Capture may derive the label from a branch before it reaches
|
|
266
|
+
this step, but the storage layer does not do so implicitly.
|
|
267
|
+
|
|
268
|
+
The `Initiative` model below is a separate low-level persisted record supported by
|
|
269
|
+
`Store.upsert_initiative`. Current MCP capture paths do not create one, so do not expect an
|
|
270
|
+
`initiatives/<id>.json` file merely because a decision has an `initiative:*` binding.
|
|
267
271
|
|
|
268
272
|
| Field | Type | Meaning |
|
|
269
273
|
|---|---|---|
|
|
270
274
|
| `id` | ULID | Record identity. |
|
|
271
275
|
| `name` | str | The label as written at capture — a branch name or a short phrase. |
|
|
272
276
|
| `description` | str \| `null` | Optional one-liner; usually absent for branch-derived initiatives. |
|
|
273
|
-
| `tags` | list[str] |
|
|
277
|
+
| `tags` | list[str] | Stored strings on the low-level record; `upsert_initiative` does not slugify them or create `tag:*` entities. |
|
|
@@ -187,7 +187,7 @@ Three ways to group decisions across entities exist now, and they answer differe
|
|
|
187
187
|
|---|---|---|---|
|
|
188
188
|
| **Tag** (`tag:<slug>`) | "which decisions carry this cross-cutting label?" | a bare slug, no prose | none — get-or-create, no ratification, no supersession |
|
|
189
189
|
| **Domain** | "what is this named area of the system, and what do I need to know about it?" | slug + title + required WHY-IT-EXISTS summary + optional parent/communities/path_prefixes | full record: proposed → accepted, append-only supersession to revise |
|
|
190
|
-
| **Initiative** | "which decisions belong to this piece of work?" | a
|
|
190
|
+
| **Initiative** (`initiative:<label>`) | "which decisions belong to this piece of work?" | a Tier-0 label on captured decisions | flat grouping, no ratification gate of its own |
|
|
191
191
|
|
|
192
192
|
A tag is the cheapest of the three — free-form text slugified into a durable entity at capture
|
|
193
193
|
(`add_decision(tags=[...])`, or a draft's `tags` field), many-to-many, tier-0, no lifecycle to
|
|
@@ -196,7 +196,8 @@ describing *why performance work exists here* — that's what a domain's summary
|
|
|
196
196
|
domain is the only one of the three that is itself ratified content: it has a required summary,
|
|
197
197
|
it can be superseded, and it is what the TOC and `drill_down` are built from. An initiative
|
|
198
198
|
groups decisions around a unit of *work* (a branch, a project) rather than a unit of the
|
|
199
|
-
*system
|
|
199
|
+
*system*. Current capture paths implement it as an abstract entity and binding, not as an
|
|
200
|
+
`Initiative` record with a description; nothing renders a description-first view of it the way
|
|
200
201
|
`drill_down` does for a domain.
|
|
201
202
|
|
|
202
203
|
## See also
|
|
@@ -55,12 +55,12 @@ at two points:
|
|
|
55
55
|
rebuild it.
|
|
56
56
|
2. **Every `ratify` call (MCP tool or `sidegraph-ratify` CLI) that actually accepted or dropped
|
|
57
57
|
at least one domain** — immediately, without waiting for the next sync. This is what makes
|
|
58
|
-
`bootstrap → ratify` visibly turn the TOC on in the very same session
|
|
59
|
-
|
|
60
|
-
layer would look inert until the next real graph rebuild.
|
|
58
|
+
`bootstrap → ratify` visibly turn the TOC on in the very same session, even when no graph
|
|
59
|
+
sync is needed.
|
|
61
60
|
|
|
62
|
-
A decisions-only ratify (no domain ids in the batch)
|
|
63
|
-
change the
|
|
61
|
+
A decisions-only ratify (no domain ids in the batch) does not rebuild the cache immediately.
|
|
62
|
+
It can change a rendered mistake count; the next completed or skipped sync refreshes that
|
|
63
|
+
count. Domain acceptance is the special case refreshed in the ratify operation itself.
|
|
64
64
|
|
|
65
65
|
## `drill_down(domain_slug)` — the Axis-1 operation
|
|
66
66
|
|
|
@@ -104,8 +104,10 @@ render actually deliver on real ADR-scale content instead of dropping it.)
|
|
|
104
104
|
|
|
105
105
|
### Ranking buckets, and why mistakes come first
|
|
106
106
|
|
|
107
|
-
Decisions are gathered from seeds outward and ranked into ordered buckets
|
|
108
|
-
|
|
107
|
+
Decisions are gathered from seeds outward and ranked into ordered buckets. Each source list
|
|
108
|
+
(a seed entity, community/domain, peripheral entity, or global scope) is sorted by recency
|
|
109
|
+
before it is appended; the implementation does not perform a second global recency sort across
|
|
110
|
+
all sources in the same bucket.
|
|
109
111
|
|
|
110
112
|
| Bucket | Section | Contents |
|
|
111
113
|
|---|---|---|
|
|
@@ -154,20 +156,19 @@ not the other way around.
|
|
|
154
156
|
A `Fact` rides the same `memory_chars` budget as decisions, spent strictly after them, in two
|
|
155
157
|
forms:
|
|
156
158
|
|
|
157
|
-
- **Inline evidence.** In buckets B-D, the moment
|
|
158
|
-
(`rank_decisions.add()`), its live supporting facts
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
`[unratified]` when still `proposed` (a decision line can also carry `[drifted]` — see
|
|
163
|
-
the code-drift marker below). Bucket A (mistakes) defers this to a second pass
|
|
159
|
+
- **Inline evidence.** In buckets B-D, the moment an accepted decision line is placed
|
|
160
|
+
(`rank_decisions.add()`), its live **accepted** supporting facts render immediately as
|
|
161
|
+
adjacent ` evidence: <statement> [<source>]` lines. A live proposed supporting fact is
|
|
162
|
+
quarantined in the final **Unratified proposals** section instead; a superseded fact does
|
|
163
|
+
not render. Bucket A (mistakes) defers accepted evidence to a second pass
|
|
164
164
|
instead of rendering it immediately — see the mistakes-budget guarantee below for why.
|
|
165
165
|
Either way, evidence lines degrade/drop with their decision under budget pressure — a fact
|
|
166
166
|
only ever renders next to a decision that itself made the cut.
|
|
167
167
|
- **The Known-facts bucket** (`## Known facts`, rendered right after `## Decisions`, ahead of
|
|
168
|
-
the structural map).
|
|
169
|
-
above — bound to a seed or peripheral entity, walked in the same
|
|
170
|
-
every other bucket uses, sorted by fact id for determinism.
|
|
168
|
+
the structural map). Accepted standalone facts — ones not already rendered inline under a
|
|
169
|
+
decision above — bound to a seed or peripheral entity, walked in the same
|
|
170
|
+
seed-then-peripheral order every other bucket uses, sorted by fact id for determinism.
|
|
171
|
+
Proposed facts go to **Unratified proposals**. This bucket is populated only AFTER every
|
|
171
172
|
decision bucket (A-D) and the superseded one-liners have already had first claim on the
|
|
172
173
|
budget.
|
|
173
174
|
|
|
@@ -304,9 +305,10 @@ too (see [mind model](mind-model.md#how-domains-relate-to-engine-communities)).
|
|
|
304
305
|
### Rendering
|
|
305
306
|
|
|
306
307
|
`TaskContext.render()` emits, in order: **Known mistakes & gotchas**, **Decisions** (with any
|
|
307
|
-
inline `evidence:` lines nested under the decision they support), **Known facts**
|
|
308
|
-
facts — see above), **Structural map** (the budgeted subgraph around the
|
|
309
|
-
pointers — `- name (file_type) [file_path:line]`, never inlined code),
|
|
308
|
+
accepted inline `evidence:` lines nested under the decision they support), **Known facts**
|
|
309
|
+
(accepted standalone facts — see above), **Structural map** (the budgeted subgraph around the
|
|
310
|
+
seeds, rendered as pointers — `- name (file_type) [file_path:line]`, never inlined code),
|
|
311
|
+
**Related**, then **Unratified proposals**.
|
|
310
312
|
Missing sections are omitted; an empty result renders `"No context found."`.
|
|
311
313
|
|
|
312
314
|
## See also
|
|
@@ -152,12 +152,8 @@ supported-document path against it:
|
|
|
152
152
|
> cannot run today. This is the intended reproduction path once it ships; there is no working
|
|
153
153
|
> substitute before then.
|
|
154
154
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
> refresh can change it under you. Fine for trying Sidegraph out; for anything you depend
|
|
158
|
-
> on — CI, a shared team setup, a pilot you intend to measure — replace `@main` with a
|
|
159
|
-
> commit SHA (`git+https://github.com/SantyagoSeaman/sidegraph@<sha>`) so the version is a
|
|
160
|
-
> decision you made rather than whatever HEAD happened to be. See [`reference/stability.md`](../reference/stability.md) for what each surface promises.
|
|
155
|
+
This command follows the current development branch. For durable environments, see
|
|
156
|
+
[how to pin mutable development references](installation.md#mutable-development-references).
|
|
161
157
|
|
|
162
158
|
```bash
|
|
163
159
|
git clone --branch demo https://github.com/SantyagoSeaman/sidegraph.git sidegraph-demo
|
|
@@ -13,12 +13,8 @@ Run these in the repo you want memory over (not the Sidegraph checkout).
|
|
|
13
13
|
|
|
14
14
|
Inside a Claude Code session, in that repo:
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
> refresh can change it under you. Fine for trying Sidegraph out; for anything you depend
|
|
19
|
-
> on — CI, a shared team setup, a pilot you intend to measure — replace `@main` with a
|
|
20
|
-
> commit SHA (`git+https://github.com/SantyagoSeaman/sidegraph@<sha>`) so the version is a
|
|
21
|
-
> decision you made rather than whatever HEAD happened to be. See [`reference/stability.md`](../reference/stability.md) for what each surface promises.
|
|
16
|
+
The commands below follow the current development branch. For durable environments, see
|
|
17
|
+
[how to pin mutable development references](installation.md#mutable-development-references).
|
|
22
18
|
|
|
23
19
|
```
|
|
24
20
|
/plugin marketplace add SantyagoSeaman/sidegraph
|
|
@@ -73,10 +69,10 @@ flag if you want a private, user-local registration instead.
|
|
|
73
69
|
`uv run --project /ABSOLUTE/PATH/TO/sidegraph sidegraph-mcp` (CLI form: `-- uv run --project
|
|
74
70
|
/ABSOLUTE/PATH/TO/sidegraph sidegraph-mcp`).
|
|
75
71
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
The released package is available from PyPI, so both shorten further, to `uvx --from
|
|
73
|
+
sidegraph sidegraph-mcp` — see
|
|
74
|
+
[`integrations/claude-code.md`](../integrations/claude-code.md#plugin-install-path)
|
|
75
|
+
for the pinning policy. Use `sidegraph==X.Y.Z` in automation.
|
|
80
76
|
|
|
81
77
|
The store (`SIDEGRAPH_DIR`) is meant to live **inside the repo it documents** — commit
|
|
82
78
|
`.sidegraph/` alongside your code (its committed record directories, not the gitignored
|
|
@@ -17,12 +17,8 @@ and AGENTS.md registered separately, for fine control or a source checkout).
|
|
|
17
17
|
|
|
18
18
|
Inside a Codex CLI session, in that repo:
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
> refresh can change it under you. Fine for trying Sidegraph out. For anything you depend
|
|
23
|
-
> on, such as CI, a shared team setup, or a pilot you intend to measure, replace `@main`
|
|
24
|
-
> with a commit SHA (`git+https://github.com/SantyagoSeaman/sidegraph@<sha>`) so the version
|
|
25
|
-
> is a decision you made rather than whatever HEAD happened to be. See [`reference/stability.md`](../reference/stability.md) for what each surface promises.
|
|
20
|
+
The commands below follow the current development branch. For durable environments, see
|
|
21
|
+
[how to pin mutable development references](installation.md#mutable-development-references).
|
|
26
22
|
|
|
27
23
|
```
|
|
28
24
|
/plugin marketplace add SantyagoSeaman/sidegraph
|
|
@@ -47,7 +43,7 @@ Skip to [Verify](#verify) once installed.
|
|
|
47
43
|
|
|
48
44
|
## Option B: manual registration
|
|
49
45
|
|
|
50
|
-
Prefer explicit
|
|
46
|
+
Prefer explicit `.codex/config.toml`/`.codex/hooks.json` files (e.g. for review in a PR), or
|
|
51
47
|
want to point at a source checkout? Register the pieces yourself.
|
|
52
48
|
|
|
53
49
|
### 1. Register the MCP server
|
|
@@ -58,7 +54,7 @@ Via the CLI:
|
|
|
58
54
|
codex mcp add sidegraph -- bash -lc "cd /ABSOLUTE/PATH/TO/your-repo && SIDEGRAPH_DIR=.sidegraph SIDEGRAPH_GRAPH=graphify-out/graph.json uv run --project /ABSOLUTE/PATH/TO/sidegraph sidegraph-mcp"
|
|
59
55
|
```
|
|
60
56
|
|
|
61
|
-
Or add
|
|
57
|
+
Or add it to the repo's `.codex/config.toml` (recommended for project-specific setup):
|
|
62
58
|
|
|
63
59
|
```toml
|
|
64
60
|
[mcp_servers.sidegraph]
|
|
@@ -69,9 +65,10 @@ args = [
|
|
|
69
65
|
]
|
|
70
66
|
```
|
|
71
67
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
`
|
|
68
|
+
Codex also reads `~/.codex/config.toml`. Use the project file when the registration belongs
|
|
69
|
+
to this repository; use the global file only when you intentionally want the server in every
|
|
70
|
+
project. The `cd` wrapper remains useful in either scope because Sidegraph's relative paths
|
|
71
|
+
must resolve against the repository whose memory it serves.
|
|
75
72
|
|
|
76
73
|
### 2. Tell the agent about Sidegraph
|
|
77
74
|
|
|
@@ -89,7 +86,7 @@ first. When you make a real decision or hit a hard-won gotcha, call `propose_dec
|
|
|
89
86
|
|
|
90
87
|
### 3. Add the hooks
|
|
91
88
|
|
|
92
|
-
Create `.codex/hooks
|
|
89
|
+
Create `.codex/hooks.json` in the repo:
|
|
93
90
|
|
|
94
91
|
```json
|
|
95
92
|
{
|
|
@@ -125,9 +122,9 @@ working on a non-git corpus too (Sidegraph doesn't require the corpus to be a gi
|
|
|
125
122
|
[`integrations/graphify.md`](../integrations/graphify.md#non-git-and-doc-only-corpora)), where a
|
|
126
123
|
bare `git rev-parse --show-toplevel` would fail and leave `cd` with no argument.
|
|
127
124
|
|
|
128
|
-
No `PreToolUse` entry is included above
|
|
129
|
-
|
|
130
|
-
Code's Read/Grep redirect nudge
|
|
125
|
+
No `PreToolUse` entry is included above. Codex can invoke that event for local function tools,
|
|
126
|
+
but it has no stable `Read`/`Grep` tool pair to which Sidegraph's Claude-specific redirect can
|
|
127
|
+
attach. Therefore Claude Code's Read/Grep redirect nudge
|
|
131
128
|
(`sidegraph-pre-tool-use`) has no Codex counterpart to wire up yet — see
|
|
132
129
|
[`integrations/codex.md`](../integrations/codex.md) for details.
|
|
133
130
|
|