sidegraph 0.3.0__tar.gz → 0.4.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.0 → sidegraph-0.4.0}/CHANGELOG.md +39 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/CLAUDE.md +1 -1
- {sidegraph-0.3.0 → sidegraph-0.4.0}/PKG-INFO +5 -4
- {sidegraph-0.3.0 → sidegraph-0.4.0}/README.md +4 -3
- {sidegraph-0.3.0 → sidegraph-0.4.0}/SECURITY.md +4 -3
- sidegraph-0.4.0/docs/README.md +56 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/data-model.md +10 -6
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/mind-model.md +3 -2
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/retrieval.md +22 -20
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/getting-started/bootstrap.md +2 -6
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/getting-started/claude-code-setup.md +6 -10
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/getting-started/codex-setup.md +12 -15
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/getting-started/installation.md +31 -31
- sidegraph-0.4.0/docs/getting-started/quickstart.md +71 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/capturing-decisions.md +11 -8
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/ci-cd-maintenance.md +85 -138
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/naming-your-domains.md +5 -5
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/retrieval-in-sessions.md +23 -24
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/semantic-docs.md +10 -8
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/team-workflow.md +13 -13
- sidegraph-0.4.0/docs/guides/verifying-your-setup.md +78 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/integrations/claude-code.md +18 -23
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/integrations/codex.md +10 -10
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/integrations/graphify.md +2 -2
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/llms.txt +8 -8
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/README.md +25 -11
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/cli.md +62 -73
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/configuration.md +6 -6
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/git-bindings.md +4 -3
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/hooks.md +30 -9
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/mcp-tools.md +49 -30
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/operations.md +12 -9
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/releasing.md +37 -29
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/stability.md +6 -6
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/reference/store-format.md +21 -21
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
- {sidegraph-0.3.0 → sidegraph-0.4.0}/pyproject.toml +1 -1
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/__init__.py +1 -1
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/integrations.py +6 -1
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/config.py +8 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/gitio.py +6 -5
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/host/hooks.py +48 -12
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/server.py +39 -23
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_cli.py +1 -1
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_integrations.py +64 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_docs_claims.py +103 -7
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_drift_nudge.py +8 -5
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_pretool.py +33 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_session_key.py +93 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_stop.py +31 -2
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_touch_events.py +25 -0
- sidegraph-0.4.0/tests/test_server_prewrite_anchor_validation.py +214 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_migration.py +1 -1
- {sidegraph-0.3.0 → sidegraph-0.4.0}/uv.lock +1 -1
- sidegraph-0.3.0/docs/README.md +0 -78
- sidegraph-0.3.0/docs/getting-started/quickstart.md +0 -102
- sidegraph-0.3.0/docs/guides/verifying-your-setup.md +0 -517
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.agents/plugins/marketplace.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.claude-plugin/marketplace.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/CODEOWNERS +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/secret_scanning.yml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/workflows/ci.yml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/workflows/publish.yml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.github/workflows/scorecard.yml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.gitignore +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.gitleaks.toml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.pre-commit-config.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/.python-version +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/AGENTS.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/CODE_OF_CONDUCT.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/CONTRIBUTING.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/LICENSE +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/anchoring.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/concepts/decision-memory.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/guides/surviving-refactors.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/corpus_fit.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/judge-prompt.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/questions-prompt.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/pilot-kit/rubric-template.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/docs/whitepaper/index.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/.mcp.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/codex/hooks.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/codex/mcp.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/hooks/hooks.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/stats/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/anchoring.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/__init__.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/apply.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/catalog.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/cli.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/model.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/planner.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/proof.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/review.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/bootstrap/scan.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/capture.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/cli.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/doc_import.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/doctor.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/domains.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/engine/__init__.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/engine/reader.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/host/__init__.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/host/claude_settings.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/importer.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/okf.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/profiles.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/retrieval.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/schema.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/stats/__init__.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/stats/model.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/stats/render.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/store.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/sync.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/verify.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/__init__.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/model.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/render.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/src/sidegraph/viz/template.html +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/__init__.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/conftest.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bitfinex_slice.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/graph.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/design.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/fixtures/mini_graph.json +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_anchoring.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_anchoring_mapping_refresh.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_apply.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_catalog.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_model.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_planner.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_proof.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_review.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_bootstrap_scan.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_auto_accept.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_facts.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_integration.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_neighbors.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_propose.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_capture_redact.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_compact.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_doctor.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_domains.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_import.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_init.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_okf.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_ratify.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_ratify_facts.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_stats.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_sync.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_sync_check.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_cli_viz.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_codex_plugin.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_community_baseline.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_config.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_corpus_expected_renders.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_corpus_self_corpus.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_coverage_telemetry_e2e.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_digest_integrity.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doc_corpus_integration.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doc_import.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_auto_share.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_code_drift.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_dangling_supports.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_duplicate_entity.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_never_surfaced.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_scan.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_stale_instructions.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_doctor_unratified_accept.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_domains.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_entity_duplicate_resolution.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_entity_get_or_create_race.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_env_isolation.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_fact_reachability_gate.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_flow_profile.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_git_bindings_blame.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_git_bindings_hook.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_git_bindings_provenance.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_claude_settings.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_host_session_start.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_importer.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_mind_model_additive_fields.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_okf.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_openspec_profile.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_pathless_descriptor_adoption.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_proposal_lifecycle.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_ratify_listing_gone_dark.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_ratify_policy.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_community_labels.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_doc_nodes.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_graph.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_integration.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_nodes_in_file.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_perf.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_rationale.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_read.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_resolve.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_subdir_mismatch.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_reader_version.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_redaction_seeded.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_repoint_integration.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_budget_counters.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_context.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_drift_marker.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_drilldown.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_facts.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_ids.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_integration.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_rank.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_seeds.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_shown_ids.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_terminal_evidence.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_thin_tools.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_toc.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_toptier.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_retrieval_unratified.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sandbox_hygiene.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_schema_descriptor.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_schema_domain.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_schema_fact.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_add_anchors.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_anchoring.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_capture.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_coverage_events.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_domains.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_drilldown.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_facts.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_find_entity.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_get_store.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_get_task_context.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_import.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_mcp_smoke.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_ratify_facts.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_redaction.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_render_events.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_supersede.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_sync_anchors.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_telemetry.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_thin_tools.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_server_verify.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_graph.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_model.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_render.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_skill.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_stats_snapshot.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_canonical_stat.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_compact.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_compact_review.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_concurrent_open.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_coverage_telemetry.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_derived_community.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_domains.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_entities.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_fact_cascade.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_facts.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_meta.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_mutation_guard.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_mutation_immediate.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_persistence.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_ratification.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_rebuild_atomicity.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_render_events.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_retrieval.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_slug_conflicts.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_stamping_marker.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_telemetry.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_threading.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_store_tmp_sweep_age.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_clean.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_domains.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_drift_cache.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_fresh_clone.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_integration.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_rebind.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_repoint.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_report_has_findings.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_run.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_toc_cache.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_volatile_heal.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_sync_wiring.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_telemetry_retention.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_verify_snapshot.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_verify_transitions.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_viz_asset_packaged.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_viz_model.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_viz_render_html.py +0 -0
- {sidegraph-0.3.0 → sidegraph-0.4.0}/tests/test_viz_render_json.py +0 -0
|
@@ -7,6 +7,45 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.0] — 2026-09-22
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **`supersede_decision` no longer half-applies when an anchor is invalid.** It wrote the
|
|
15
|
+
successor and closed the predecessor before checking the anchors, so an illegal `relation`
|
|
16
|
+
left an accepted successor with none, or only some, of its bindings: wholly or partly
|
|
17
|
+
invisible to task-seeded retrieval, and permanent in an append-only store. An anchor list
|
|
18
|
+
in which no anchor had a `name` reached the same state without any error.
|
|
19
|
+
- **All five anchor-taking tools (`add_decision`, `supersede_decision`, `add_fact`,
|
|
20
|
+
`supersede_fact`, `add_anchors`) now validate the whole anchor list before their first
|
|
21
|
+
write.** An illegal `relation` is now rejected on every path; `supersede_decision` used to
|
|
22
|
+
accept it silently when no graph was present or the anchor had no `name`. Two cases are
|
|
23
|
+
newly rejected. The first is a `name` or `file_path` that is not a string, which used to
|
|
24
|
+
half-write on the fact paths and `add_anchors`, and on the decision paths whenever a graph
|
|
25
|
+
was present. The second is a non-empty list in which no anchor has a `name`, which used to
|
|
26
|
+
succeed while binding nothing. On `add_fact` it also bypassed the check that an anchorless
|
|
27
|
+
fact supports a live decision.
|
|
28
|
+
|
|
29
|
+
## [0.3.1] — 2026-09-19
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **A session is now identified by its transcript, not by the host's `session_id`.** That
|
|
34
|
+
field does not mean the same thing on every host: Claude Code mints one per session (and
|
|
35
|
+
names the transcript after it), while Codex reports the *workspace* session — one id that
|
|
36
|
+
outlives a single session, survives `resume`, and is shared by every thread beneath it. On
|
|
37
|
+
Codex that put a whole store's history in one bucket (measured: 1928 of 1929 recorded events
|
|
38
|
+
in one live store, spanning 27 hours) and, worse, made every per-session guard fire once per
|
|
39
|
+
workspace instead of once per session: the second thread opened within a minute had its
|
|
40
|
+
context map dropped as a duplicate injection, and the first thread to finish spent the
|
|
41
|
+
capture nudge for all of them. All four hook sites now take the session from
|
|
42
|
+
`transcript_path`'s file name, falling back to `session_id` when no transcript is given.
|
|
43
|
+
On Claude Code this is the same string it already recorded — verified against a live store,
|
|
44
|
+
where all 74 recorded session ids are exactly transcript names — so nothing moves there.
|
|
45
|
+
The workspace session is kept beside it in the new `telemetry:session_group` meta key, as
|
|
46
|
+
the only link between sibling threads. See
|
|
47
|
+
[`docs/reference/hooks.md`](docs/reference/hooks.md#which-session-a-hook-is-in).
|
|
48
|
+
|
|
10
49
|
## [0.3.0] — 2026-09-19
|
|
11
50
|
|
|
12
51
|
### Added
|
|
@@ -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.4.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.4.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
|
|
|
@@ -91,7 +91,8 @@ sidegraph-init
|
|
|
91
91
|
|
|
92
92
|
4. **Name your domains** — turns the graph's communities into a described table of
|
|
93
93
|
contents. Tell your agent *"name my domains"* (or run `/sidegraph:name-domains`) and
|
|
94
|
-
|
|
94
|
+
review its proposed grouping (larger graphs may get 2–3 alternatives). CLI alternative
|
|
95
|
+
for scripted/CI use:
|
|
95
96
|
`sidegraph-domains bootstrap` + `sidegraph-ratify` —
|
|
96
97
|
see [naming your domains](docs/guides/naming-your-domains.md).
|
|
97
98
|
|
|
@@ -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
|
|
|
@@ -63,7 +63,8 @@ sidegraph-init
|
|
|
63
63
|
|
|
64
64
|
4. **Name your domains** — turns the graph's communities into a described table of
|
|
65
65
|
contents. Tell your agent *"name my domains"* (or run `/sidegraph:name-domains`) and
|
|
66
|
-
|
|
66
|
+
review its proposed grouping (larger graphs may get 2–3 alternatives). CLI alternative
|
|
67
|
+
for scripted/CI use:
|
|
67
68
|
`sidegraph-domains bootstrap` + `sidegraph-ratify` —
|
|
68
69
|
see [naming your domains](docs/guides/naming-your-domains.md).
|
|
69
70
|
|
|
@@ -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
|
|
|
@@ -11,6 +11,15 @@ Sidegraph has two parts: **Sidegraph itself** (the decision store + MCP server +
|
|
|
11
11
|
- An MCP- and hooks-capable agent host: [Claude Code](claude-code-setup.md) or
|
|
12
12
|
[OpenAI Codex CLI](codex-setup.md).
|
|
13
13
|
|
|
14
|
+
## Mutable development references
|
|
15
|
+
|
|
16
|
+
The `git+…@main` examples below track a mutable branch: a later `uvx` cache refresh can
|
|
17
|
+
install different code. That is useful while trying Sidegraph. For CI, shared setup, or a
|
|
18
|
+
measured pilot, replace `@main` with a release tag or commit SHA, for example
|
|
19
|
+
`git+https://github.com/SantyagoSeaman/sidegraph.git@<sha>`. The plugin marketplace is the
|
|
20
|
+
exception: its public manifests intentionally track `main`. See
|
|
21
|
+
[`reference/stability.md`](../reference/stability.md) for the promises made by each surface.
|
|
22
|
+
|
|
14
23
|
## Install Sidegraph
|
|
15
24
|
|
|
16
25
|
### Option A — PyPI (recommended for the package + CLIs)
|
|
@@ -26,28 +35,24 @@ That puts `sidegraph-mcp` and every `sidegraph-*` CLI on your PATH. Pin a versio
|
|
|
26
35
|
`uvx --from sidegraph sidegraph-mcp` works — the entry-point name differs from the package
|
|
27
36
|
name, so `--from sidegraph` is required (a bare `uvx sidegraph-mcp` will not resolve).
|
|
28
37
|
|
|
29
|
-
### Option B —
|
|
30
|
-
|
|
31
|
-
Inside a Claude Code session, in the repo you want memory over:
|
|
38
|
+
### Option B — host plugin (recommended for Claude Code and Codex)
|
|
32
39
|
|
|
33
|
-
|
|
34
|
-
> branch: what you install today is not what you installed yesterday, and a `uvx` cache
|
|
35
|
-
> refresh can change it under you. Fine for trying Sidegraph out; for anything you depend
|
|
36
|
-
> on — CI, a shared team setup, a pilot you intend to measure — replace `@main` with a
|
|
37
|
-
> commit SHA (`git+https://github.com/SantyagoSeaman/sidegraph@<sha>`) so the version is a
|
|
38
|
-
> decision you made rather than whatever HEAD happened to be. See [`reference/stability.md`](../reference/stability.md) for what each surface promises.
|
|
40
|
+
Inside an interactive host session, in the repo you want memory over:
|
|
39
41
|
|
|
40
42
|
```
|
|
41
43
|
/plugin marketplace add SantyagoSeaman/sidegraph
|
|
42
44
|
/plugin install sidegraph@sidegraph
|
|
43
45
|
```
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
The Claude Code host installs the MCP server and all three hooks (`SessionStart`, `Stop`,
|
|
48
|
+
`PreToolUse`). Codex installs the MCP server, `SessionStart`/`Stop`, and the bundled skills;
|
|
49
|
+
its tool surface has no equivalent target for the Claude-specific Read/Grep nudge. The
|
|
50
|
+
plugin's bundled config runs everything via `uvx --from
|
|
51
|
+
git+https://github.com/SantyagoSeaman/sidegraph.git@main`: unlike the package install, the
|
|
52
|
+
plugin deliberately follows the public repository's `main` branch and does not use the
|
|
53
|
+
PyPI package. See
|
|
54
|
+
the integration details for [Claude Code](../integrations/claude-code.md#plugin-install-path)
|
|
55
|
+
or [Codex](../integrations/codex.md#plugin-install-path).
|
|
51
56
|
|
|
52
57
|
### Option C — uvx directly from git (latest / unreleased)
|
|
53
58
|
|
|
@@ -92,7 +97,7 @@ runs against Sidegraph's own `.venv`. Silence it with `uv run --no-active --proj
|
|
|
92
97
|
deactivating the other venv first.
|
|
93
98
|
|
|
94
99
|
|
|
95
|
-
|
|
100
|
+
## Entry points
|
|
96
101
|
|
|
97
102
|
This table is the terminal reference. In day-to-day use you rarely type any of it: everyday
|
|
98
103
|
operations (recording, ratifying, syncing, domain work) run conversationally inside a
|
|
@@ -109,25 +114,23 @@ setup, scripted/CI use, and the two deliberately human-run jobs (`sidegraph-impo
|
|
|
109
114
|
| `sidegraph-pre-tool-use` | `PreToolUse` hook — redirects a blind `Read`/`Grep` toward `get_task_context`/`drill_down`. |
|
|
110
115
|
| `sidegraph-bootstrap` | Guided CLI — scan one of six supported ADR/spec profiles, preview and review candidates, write only after confirmation, verify anchors/host integration, and prove production retrieval. |
|
|
111
116
|
| `sidegraph-init` | CLI — bootstrap `.sidegraph/` in a repo: create the store, check for the graph, print the plugin install path (and the no-plugin `claude mcp add` alternative). |
|
|
112
|
-
| `sidegraph-ratify` | CLI — review/accept/drop proposed decisions and domains. |
|
|
117
|
+
| `sidegraph-ratify` | CLI — review/accept/drop proposed decisions, facts, and domains. |
|
|
113
118
|
| `sidegraph-sync` | CLI — re-anchor the store after a Graphify rebuild. |
|
|
114
119
|
| `sidegraph-import` | CLI — bootstrap decisions from Graphify rationale nodes (code docstrings, or ADR/SAD prose after a semantic pass), or from existing ADR/spec markdown directly (`--docs`). |
|
|
115
120
|
| `sidegraph-domains` | CLI — author Domain proposals: `bootstrap` from graph communities, or `add` manually. |
|
|
116
121
|
| `sidegraph-compact` | CLI — pack terminal-status (superseded/rejected/dropped) decisions and domains into an immutable archive segment. |
|
|
117
122
|
| `sidegraph-verify` | CLI — lint the store's canonical files against its write-path invariants (schema, validity windows, referential integrity, ULID uniqueness); `--against <git-ref>` additionally checks that every store file changed vs that ref was mutated legally (CI mode). |
|
|
118
123
|
| `sidegraph-doctor` | CLI — one-stop store health: composes `sidegraph-verify`'s strict lint with an advisory curation pass (stale proposals, dangling/degraded/orphaned records, never-surfaced decisions); `--check` also fails on advisory findings. |
|
|
119
|
-
| `sidegraph-viz` | CLI — render
|
|
124
|
+
| `sidegraph-viz` | CLI — render an interactive HTML/JSON view of decisions, facts, entities, anchor status, supersession, and evidence links. |
|
|
120
125
|
| `sidegraph-export-okf` | CLI — project the store into a deterministic [Open Knowledge Format v0.1](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf) bundle any OKF-aware tool can read; strictly one-way, the store stays the source of truth. |
|
|
121
126
|
| `sidegraph-stats` | CLI — one screen of local usage statistics from the gitignored index (how often memory was asked for, how much of the code worked on has memory anchored to it, what the store holds, anchor health); read-only, never creates the index, `--json` for the same report as data. Reachable in a session as `/sidegraph:stats`. |
|
|
122
|
-
| `sidegraph-prepare-commit-msg` | `prepare-commit-msg` git hook — comments candidate `Sidegraph-Decision:` trailers into the commit message template
|
|
127
|
+
| `sidegraph-prepare-commit-msg` | `prepare-commit-msg` git hook — comments candidate `Sidegraph-Decision:` trailers into the commit message template; fail-open with bounded git/SQLite stages. See [`reference/git-bindings.md`](../reference/git-bindings.md). |
|
|
123
128
|
| `sidegraph-blame` | CLI — `git blame` a file, joined to the decisions/facts each hunk's commit carries (commit trailers + `provenance.commit`). See [`reference/git-bindings.md`](../reference/git-bindings.md). |
|
|
124
129
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
then `$SIDEGRAPH_DIR`, then the deprecated `$SIDEGRAPH_DB`, then an existing `.sidegraph/`,
|
|
130
|
-
then the default `.sidegraph` — see
|
|
130
|
+
Commands that need the graph use `SIDEGRAPH_GRAPH` (default
|
|
131
|
+
`graphify-out/graph.json`). Store-aware entry points resolve `SIDEGRAPH_DIR` through the same
|
|
132
|
+
shared precedence: an explicit `--db` flag where available, then `$SIDEGRAPH_DIR`, then the
|
|
133
|
+
deprecated `$SIDEGRAPH_DB`, then an existing `.sidegraph/`, then the default `.sidegraph` — see
|
|
131
134
|
[`reference/configuration.md`](../reference/configuration.md#store-path-resolution) for the
|
|
132
135
|
exact rules.
|
|
133
136
|
|
|
@@ -150,7 +153,7 @@ Fallback if you don't use `uv`: `pip install 'graphifyy==0.9.6'`.
|
|
|
150
153
|
`[mcp]` is an **optional** extra (`uv tool install "graphifyy[mcp]==0.9.6"`) that adds Graphify's
|
|
151
154
|
*own* MCP server — a deeper structure-query layer over the same `graph.json`. It coexists
|
|
152
155
|
fine with Sidegraph; Sidegraph only ever reads `graph.json` directly and doesn't need it. Add
|
|
153
|
-
`[pdf]` if your corpus includes PDFs (extras compose: `"graphifyy[mcp,pdf]"`).
|
|
156
|
+
`[pdf]` if your corpus includes PDFs (extras compose: `"graphifyy[mcp,pdf]==0.9.6"`).
|
|
154
157
|
|
|
155
158
|
See [`integrations/graphify.md`](../integrations/graphify.md) for how Sidegraph reads
|
|
156
159
|
Graphify's output, corpus types, and troubleshooting.
|
|
@@ -161,8 +164,5 @@ Continue to the [quickstart](quickstart.md) for the shortest path to a first cap
|
|
|
161
164
|
retrieved decision. If the repository already contains ADRs or supported flow specs, use the
|
|
162
165
|
[Bootstrap existing rationale guide](bootstrap.md) for the preview-first path instead. Once
|
|
163
166
|
you've done that, run through
|
|
164
|
-
[verifying your setup](../guides/verifying-your-setup.md) — a
|
|
165
|
-
|
|
166
|
-
capture, refactor survival, git-native merges, facts evidence and cascade, and your own usage statistics
|
|
167
|
-
actually work on your repo, each with an exact command and an observable
|
|
168
|
-
result.
|
|
167
|
+
[verifying your setup](../guides/verifying-your-setup.md) — a four-case checklist for host
|
|
168
|
+
wiring, durable capture/retrieval, ratification with evidence, and sync/repository hygiene.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Quickstart
|
|
2
|
+
|
|
3
|
+
This is one complete loop: build the graph, create the store, connect one host, record one
|
|
4
|
+
anchored gotcha, and retrieve it in a new session. It assumes the package and Graphify are
|
|
5
|
+
installed as described in [Installation](installation.md).
|
|
6
|
+
|
|
7
|
+
Run the shell commands from the repository that Sidegraph should remember.
|
|
8
|
+
|
|
9
|
+
## 1. Build the graph and store
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
graphify update .
|
|
13
|
+
sidegraph-init
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`graphify update .` creates `graphify-out/graph.json`; Sidegraph reads it but never writes to
|
|
17
|
+
it. `sidegraph-init` creates the repo-committed `.sidegraph/` record directories and a
|
|
18
|
+
gitignored derived `index.db`. Both commands are safe to run again.
|
|
19
|
+
|
|
20
|
+
If the repository already contains ADRs or supported flow specs, you can now switch to the
|
|
21
|
+
[preview-first bootstrap](bootstrap.md). Otherwise continue here.
|
|
22
|
+
|
|
23
|
+
## 2. Connect your host
|
|
24
|
+
|
|
25
|
+
The plugin is the recommended route for both Claude Code and Codex:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
/plugin marketplace add SantyagoSeaman/sidegraph
|
|
29
|
+
/plugin install sidegraph@sidegraph
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Start a new interactive session in the repository and approve the hook trust prompt. For a
|
|
33
|
+
manual or source-checkout setup, use the host-specific page:
|
|
34
|
+
[Claude Code](claude-code-setup.md) or [Codex](codex-setup.md).
|
|
35
|
+
|
|
36
|
+
## 3. Record one real gotcha
|
|
37
|
+
|
|
38
|
+
Choose a real file or symbol in the repository. Tell the agent:
|
|
39
|
+
|
|
40
|
+
> Record this gotcha against `<real path or symbol>`: caching parser output by file path
|
|
41
|
+
> failed because the same path can identify different content across branches; key it by a
|
|
42
|
+
> content hash instead.
|
|
43
|
+
|
|
44
|
+
This human-requested path calls `add_decision`, so the record lands accepted. Confirm that a
|
|
45
|
+
new JSON file exists under `.sidegraph/decisions/` and that its binding points at the file or
|
|
46
|
+
symbol you named.
|
|
47
|
+
|
|
48
|
+
## 4. Retrieve it from a fresh session
|
|
49
|
+
|
|
50
|
+
Start another session in the same repository and ask:
|
|
51
|
+
|
|
52
|
+
> Before I edit `<the same path or symbol>`, retrieve the Sidegraph task context. What should
|
|
53
|
+
> I know?
|
|
54
|
+
|
|
55
|
+
The agent should call `get_task_context` with that path or entity. The gotcha appears in
|
|
56
|
+
**Known mistakes & gotchas**, ahead of accepted ADRs and related memory.
|
|
57
|
+
|
|
58
|
+
## 5. Commit the durable part
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
git status --short
|
|
62
|
+
sidegraph-verify
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Commit `.sidegraph/format`, `.sidegraph/.gitignore`, and the canonical JSON directories.
|
|
66
|
+
Do not commit `.sidegraph/index.db`; it is derived and already ignored.
|
|
67
|
+
|
|
68
|
+
The loop is now working. Next, run the short
|
|
69
|
+
[verification checklist](../guides/verifying-your-setup.md), then
|
|
70
|
+
[name domains](../guides/naming-your-domains.md) if you want a human-readable SessionStart
|
|
71
|
+
table of contents.
|