sidegraph 0.2.0__tar.gz → 0.3.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.2.0 → sidegraph-0.3.0}/CHANGELOG.md +36 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/CLAUDE.md +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/PKG-INFO +64 -167
- {sidegraph-0.2.0 → sidegraph-0.3.0}/README.md +63 -166
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/README.md +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/codex-setup.md +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/installation.md +4 -3
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/verifying-your-setup.md +89 -2
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/integrations/codex.md +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/llms.txt +2 -2
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/cli.md +165 -9
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/configuration.md +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/mcp-tools.md +10 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/releasing.md +5 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/stability.md +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/store-format.md +16 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
- sidegraph-0.3.0/plugin/sidegraph/skills/stats/SKILL.md +36 -0
- sidegraph-0.3.0/plugin/sidegraph/skills/stats/agents/openai.yaml +6 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/pyproject.toml +2 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/__init__.py +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/cli.py +121 -17
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/host/hooks.py +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/retrieval.py +68 -18
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/server.py +123 -13
- sidegraph-0.3.0/src/sidegraph/stats/__init__.py +1 -0
- sidegraph-0.3.0/src/sidegraph/stats/model.py +582 -0
- sidegraph-0.3.0/src/sidegraph/stats/render.py +337 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/store.py +89 -6
- sidegraph-0.3.0/tests/test_cli_stats.py +613 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_codex_plugin.py +2 -2
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_docs_claims.py +20 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_session_key.py +1 -1
- sidegraph-0.3.0/tests/test_retrieval_budget_counters.py +420 -0
- sidegraph-0.3.0/tests/test_server_render_events.py +356 -0
- sidegraph-0.3.0/tests/test_stats_graph.py +113 -0
- sidegraph-0.3.0/tests/test_stats_model.py +1387 -0
- sidegraph-0.3.0/tests/test_stats_render.py +1176 -0
- sidegraph-0.3.0/tests/test_stats_skill.py +35 -0
- sidegraph-0.3.0/tests/test_stats_snapshot.py +164 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_coverage_telemetry.py +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_mutation_guard.py +31 -3
- sidegraph-0.3.0/tests/test_store_render_events.py +101 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/uv.lock +1 -1
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.agents/plugins/marketplace.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.claude-plugin/marketplace.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/CODEOWNERS +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/secret_scanning.yml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/workflows/ci.yml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/workflows/publish.yml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.github/workflows/scorecard.yml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.gitignore +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.gitleaks.toml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.pre-commit-config.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/.python-version +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/AGENTS.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/CONTRIBUTING.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/LICENSE +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/SECURITY.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/anchoring.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/data-model.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/decision-memory.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/mind-model.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/concepts/retrieval.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/bootstrap.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/claude-code-setup.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/getting-started/quickstart.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/capturing-decisions.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/ci-cd-maintenance.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/naming-your-domains.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/retrieval-in-sessions.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/semantic-docs.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/surviving-refactors.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/guides/team-workflow.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/integrations/claude-code.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/integrations/graphify.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/README.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/corpus_fit.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/judge-prompt.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/questions-prompt.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/pilot-kit/rubric-template.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/git-bindings.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/hooks.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/reference/operations.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/docs/whitepaper/index.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/.mcp.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/codex/hooks.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/codex/mcp.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/hooks/hooks.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/anchoring.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/__init__.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/apply.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/catalog.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/cli.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/integrations.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/model.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/planner.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/proof.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/review.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/scan.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/capture.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/config.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/doc_import.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/doctor.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/domains.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/engine/__init__.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/engine/reader.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/gitio.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/host/__init__.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/host/claude_settings.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/importer.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/okf.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/profiles.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/schema.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/sync.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/verify.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/__init__.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/model.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/render.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/src/sidegraph/viz/template.html +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/__init__.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/conftest.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bitfinex_slice.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/graph.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/fixtures/mini_graph.json +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_anchoring.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_anchoring_mapping_refresh.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_apply.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_catalog.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_cli.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_integrations.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_model.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_planner.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_proof.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_review.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_bootstrap_scan.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_auto_accept.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_facts.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_integration.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_neighbors.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_propose.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_capture_redact.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_compact.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_doctor.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_domains.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_import.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_init.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_okf.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_ratify.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_ratify_facts.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_sync.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_sync_check.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_cli_viz.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_community_baseline.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_config.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_corpus_expected_renders.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_corpus_self_corpus.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_coverage_telemetry_e2e.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_digest_integrity.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doc_corpus_integration.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doc_import.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_auto_share.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_code_drift.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_dangling_supports.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_duplicate_entity.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_never_surfaced.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_scan.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_stale_instructions.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_doctor_unratified_accept.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_domains.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_entity_duplicate_resolution.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_entity_get_or_create_race.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_env_isolation.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_fact_reachability_gate.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_flow_profile.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_git_bindings_blame.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_git_bindings_hook.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_git_bindings_provenance.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_claude_settings.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_drift_nudge.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_pretool.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_session_start.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_stop.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_host_touch_events.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_importer.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_mind_model_additive_fields.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_okf.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_openspec_profile.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_pathless_descriptor_adoption.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_proposal_lifecycle.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_ratify_listing_gone_dark.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_ratify_policy.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_community_labels.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_doc_nodes.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_graph.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_integration.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_nodes_in_file.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_perf.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_rationale.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_read.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_resolve.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_subdir_mismatch.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_reader_version.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_redaction_seeded.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_repoint_integration.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_context.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_drift_marker.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_drilldown.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_facts.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_ids.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_integration.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_rank.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_seeds.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_shown_ids.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_terminal_evidence.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_thin_tools.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_toc.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_toptier.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_retrieval_unratified.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sandbox_hygiene.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_schema_descriptor.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_schema_domain.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_schema_fact.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_add_anchors.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_anchoring.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_capture.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_coverage_events.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_domains.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_drilldown.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_facts.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_find_entity.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_get_store.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_get_task_context.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_import.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_mcp_smoke.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_ratify_facts.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_redaction.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_supersede.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_sync_anchors.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_telemetry.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_thin_tools.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_server_verify.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_canonical_stat.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_compact.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_compact_review.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_concurrent_open.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_derived_community.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_domains.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_entities.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_fact_cascade.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_facts.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_meta.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_migration.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_mutation_immediate.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_persistence.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_ratification.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_rebuild_atomicity.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_retrieval.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_slug_conflicts.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_stamping_marker.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_telemetry.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_threading.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_store_tmp_sweep_age.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_clean.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_domains.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_drift_cache.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_fresh_clone.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_integration.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_rebind.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_repoint.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_report_has_findings.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_run.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_toc_cache.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_volatile_heal.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_sync_wiring.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_telemetry_retention.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_verify_snapshot.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_verify_transitions.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_viz_asset_packaged.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_viz_model.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_viz_render_html.py +0 -0
- {sidegraph-0.2.0 → sidegraph-0.3.0}/tests/test_viz_render_json.py +0 -0
|
@@ -7,6 +7,42 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.0] — 2026-09-19
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`sidegraph-stats` — one screen of local usage statistics.** Reads the gitignored
|
|
15
|
+
`.sidegraph/index.db` and reports how often memory was asked for, how much of the code
|
|
16
|
+
worked on has memory anchored to it, what the store holds, and anchor health, with activation
|
|
17
|
+
first. It states what was shown, asked and touched, and makes no claim about effect.
|
|
18
|
+
Flags: `--db`, `--window DAYS` (default 30, the journal's retention), `--graph` and
|
|
19
|
+
`--json` (the same report as data, with a figure the text withholds as `null`, never a
|
|
20
|
+
zero). Read-only: it never creates or rebuilds the index,
|
|
21
|
+
exits `2` on a bad `--window`, a missing index, an unreadable one or an unparseable record
|
|
22
|
+
row, and says so in the report when there is too little data to print a ratio, when
|
|
23
|
+
recording is off, when the budget counts were never recorded, or when the index is behind
|
|
24
|
+
the committed records after a `git pull` (it never opens the store, so it states that
|
|
25
|
+
rather than printing the old numbers). A new console script, so a committed surface: see
|
|
26
|
+
[`docs/reference/cli.md`](docs/reference/cli.md) and
|
|
27
|
+
[`docs/reference/stability.md`](docs/reference/stability.md).
|
|
28
|
+
- **`/sidegraph:stats` skill**, with its Codex twin (explicit invocation only). It runs
|
|
29
|
+
`sidegraph-stats` and shows the output verbatim, without restating or interpreting the
|
|
30
|
+
numbers.
|
|
31
|
+
- **A `render_events` journal and an optional `intent` parameter.** `get_task_context` and
|
|
32
|
+
`query_decisions` now record what each render selected and what survived the budget in a
|
|
33
|
+
new table of the local index (`drill_down` records the decisions it returned there too, with
|
|
34
|
+
no budget figures), and accept an optional `intent` label for what asked. The
|
|
35
|
+
label is recorded for statistics only and never affects what is returned. Both stay local:
|
|
36
|
+
no network calls, `SIDEGRAPH_TELEMETRY=off` stops the recording, and the 30-day pruning
|
|
37
|
+
keeps running when it is off, so opting out only reduces what is kept. See
|
|
38
|
+
[`docs/reference/store-format.md`](docs/reference/store-format.md) and
|
|
39
|
+
[`docs/reference/mcp-tools.md`](docs/reference/mcp-tools.md).
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- **The README's privacy note describes the local diagnostics as what was shown and
|
|
44
|
+
touched**, rather than which memory is "earning its keep".
|
|
45
|
+
|
|
10
46
|
## [0.2.0] — 2026-09-18
|
|
11
47
|
|
|
12
48
|
### 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.3.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.3.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
|
|
@@ -28,11 +28,15 @@ Description-Content-Type: text/markdown
|
|
|
28
28
|
|
|
29
29
|
# Sidegraph
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
[](https://github.com/SantyagoSeaman/sidegraph/actions/workflows/ci.yml)
|
|
32
|
+
[](https://pypi.org/project/sidegraph/)
|
|
33
|
+

|
|
34
|
+

|
|
35
|
+

|
|
32
36
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
> **Give an AI coding agent the mental model of a project that an experienced engineer carries — what exists,
|
|
38
|
+
> how it is connected, why it is built this way, and what was already tried — served task-aware, within budget,
|
|
39
|
+
> before the first grep; and make that why survive rebuilds, refactors, and time.**
|
|
36
40
|
|
|
37
41
|
Coding agents broke an old equilibrium: **code is now produced faster than anyone
|
|
38
42
|
accumulates the understanding of why it is the way it is.** The reasoning that shaped
|
|
@@ -45,69 +49,17 @@ decides projects is not: **why it's built this way, what was tried and abandoned
|
|
|
45
49
|
constraint from outside the code forced the shape.** That information isn't in the
|
|
46
50
|
artifact at all. No future model will recover it, because it exists exactly once — at
|
|
47
51
|
decision time — and then evaporates: people leave, sessions end, the ticket from three
|
|
48
|
-
years ago is never found.
|
|
49
|
-
|
|
50
|
-
Sidegraph keeps that half and serves it back. Specs say what should be true and code
|
|
51
|
-
says what was built; Sidegraph keeps the third line — *how one became the other*: the
|
|
52
|
-
decisions, the rejected alternatives, and the lessons learned by doing — knowledge
|
|
53
|
-
recoverable from neither the documents nor the code. Every record is bound into one
|
|
54
|
-
graph with your code and your own planning artifacts, so the memory knows what it
|
|
55
|
-
governs — and notices when it goes stale. And it reaches the agent at the moment of
|
|
56
|
-
work, **mistakes first, before the first grep** — so no mistake is paid for twice, and
|
|
57
|
-
an agent doesn't confidently re-propose the design your team already rejected.
|
|
52
|
+
years ago is never found. Sidegraph keeps that half and serves it back.
|
|
58
53
|
|
|
59
54
|
**Deciding whether this is worth your team's time?** Read the
|
|
60
55
|
[engineering whitepaper](docs/whitepaper/index.md) first. It states the idea,
|
|
61
|
-
walks one real decision chain end to end, reports what running it showed
|
|
62
|
-
(including the corpus where memory cost 25.5% more and answered worse), and
|
|
56
|
+
walks one real decision chain end to end, reports what running it showed, and
|
|
63
57
|
gives a fit test you can apply to your own repository before installing anything.
|
|
64
58
|
|
|
65
|
-
```text
|
|
66
|
-
You: "refactor risk/fee_gate.py"
|
|
67
|
-
|
|
68
|
-
Injected into the agent's context — before it reads a single file:
|
|
69
|
-
|
|
70
|
-
## ⚠ Known mistakes & gotchas
|
|
71
|
-
- [gotcha] HFT strategies require 0% maker/taker fees: assert_zero_fees()
|
|
72
|
-
checks account fees up front and raises FeeGateError — the bot refuses
|
|
73
|
-
to trade.
|
|
74
|
-
|
|
75
|
-
## Decisions
|
|
76
|
-
- [adr] Stop levels ratchet monotonically: force_widen() is the only
|
|
77
|
-
entry point allowed to widen an active stop.
|
|
78
|
-
evidence: backtest showed ad-hoc re-widening added ~12% drawdown [internal backtest, 2026-03]
|
|
79
|
-
|
|
80
|
-
## Related
|
|
81
|
-
~ tried, reverted 2026-01: [adr] threshold-based fee checks
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**Maximum relevant context before the first grep — and no mistake paid for twice.**
|
|
85
|
-
|
|
86
|
-
No vector database, no service, no API key: your team's **decision log as small text
|
|
87
|
-
records in the repo** — decisions, domain definitions, anchors — merging like code and
|
|
88
|
-
readable in the PR diff, plus a local MCP server and three hooks.
|
|
89
|
-
|
|
90
|
-
[](https://github.com/SantyagoSeaman/sidegraph/actions/workflows/ci.yml)
|
|
91
|
-
[](https://pypi.org/project/sidegraph/)
|
|
92
|
-

|
|
93
|
-

|
|
94
|
-

|
|
95
|
-
|
|
96
|
-
Green `tests` badge = the full suite (ruff · mypy · pytest) passing in CI on every push.
|
|
97
|
-
Install: **`pip install sidegraph`** (or `uv tool install sidegraph`) — a pure-Python package
|
|
98
|
-
(`sidegraph` on PyPI: the MCP server, the three hooks, and the `sidegraph-*` CLIs), no service,
|
|
99
|
-
no API key.
|
|
100
|
-
|
|
101
59
|
## Quickstart
|
|
102
60
|
|
|
103
61
|
Works cold: no existing ADRs required. No API key — the core loop is fully local
|
|
104
|
-
(one optional docs-analysis feature uses one; it's
|
|
105
|
-
|
|
106
|
-
Already have ADRs or supported flow specifications? After building the graph, run
|
|
107
|
-
`sidegraph-bootstrap --host claude-code` to preview, review, anchor, and prove one record
|
|
108
|
-
through production retrieval. The 10–15 minute path is an explicitly unmeasured launch target;
|
|
109
|
-
see the [Bootstrap guide](docs/getting-started/bootstrap.md) for the six supported profiles,
|
|
110
|
-
host matrix, recovery contract, and reproducible dogfood path.
|
|
62
|
+
(one optional docs-analysis feature uses one; it's marked below).
|
|
111
63
|
|
|
112
64
|
```bash
|
|
113
65
|
# 1. Install the graph engine and build a graph over your repo (code or markdown)
|
|
@@ -116,20 +68,16 @@ cd /path/to/your/repo && graphify update .
|
|
|
116
68
|
```
|
|
117
69
|
|
|
118
70
|
`[mcp]` is an **optional** extra on `graphifyy` (`uv tool install "graphifyy[mcp]"`) — it adds
|
|
119
|
-
Graphify's *own* MCP server, a deeper structure-query layer over the same graph.
|
|
120
|
-
|
|
121
|
-
install above is all it needs.
|
|
71
|
+
Graphify's *own* MCP server, a deeper structure-query layer over the same graph. Sidegraph
|
|
72
|
+
only ever reads `graph.json`, so the plain install above is all it needs.
|
|
122
73
|
|
|
123
74
|
```
|
|
124
75
|
# 2. Inside a Claude Code session in that repo: install the plugin — MCP server + all
|
|
125
|
-
# three hooks, wired automatically.
|
|
126
|
-
# publish needed.
|
|
76
|
+
# three hooks, wired automatically.
|
|
127
77
|
/plugin marketplace add SantyagoSeaman/sidegraph
|
|
128
78
|
/plugin install sidegraph@sidegraph
|
|
129
79
|
```
|
|
130
80
|
|
|
131
|
-
> **`@main` is a mutable ref.** These commands track the branch — fine for trying Sidegraph out, but pin a commit SHA (`…/sidegraph@<sha>`) for CI, a shared team setup, or a pilot you intend to measure. See [docs/reference/stability.md](docs/reference/stability.md).
|
|
132
|
-
|
|
133
81
|
```bash
|
|
134
82
|
# 3. Install the CLIs + MCP server, then bootstrap the store in your repo
|
|
135
83
|
# (creates .sidegraph/, prints setup instructions)
|
|
@@ -138,34 +86,25 @@ sidegraph-init
|
|
|
138
86
|
|
|
139
87
|
# Prefer the latest unreleased build straight from git instead of PyPI? Swap step 3 for:
|
|
140
88
|
# uvx --from git+https://github.com/SantyagoSeaman/sidegraph.git@main sidegraph-init
|
|
89
|
+
# `@main` is a mutable ref — it moves under you. Pin a tag or a SHA for CI.
|
|
141
90
|
```
|
|
142
91
|
|
|
143
92
|
4. **Name your domains** — turns the graph's communities into a described table of
|
|
144
93
|
contents. Tell your agent *"name my domains"* (or run `/sidegraph:name-domains`) and
|
|
145
|
-
pick one of the 2–3 ready-made sets it proposes
|
|
146
|
-
|
|
94
|
+
pick one of the 2–3 ready-made sets it proposes. CLI alternative for scripted/CI use:
|
|
95
|
+
`sidegraph-domains bootstrap` + `sidegraph-ratify` —
|
|
147
96
|
see [naming your domains](docs/guides/naming-your-domains.md).
|
|
148
97
|
|
|
149
98
|
Then record your first decision in a session — *"record a gotcha: … anchor it to
|
|
150
99
|
`<function or heading>` in `<file>`"* — and watch it come back at the top of the context
|
|
151
|
-
next time the agent works near that code.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
[
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
[`demo` branch](https://github.com/SantyagoSeaman/sidegraph/tree/demo) will carry Sidegraph's
|
|
160
|
-
own decision store — decisions and facts distilled from this project's design notes and
|
|
161
|
-
anchored to its real code graph. Once it ships, clone it (`git clone -b demo …`), run
|
|
162
|
-
`graphify update .`, and query the corpus to watch retrieval, supersession chains, and
|
|
163
|
-
mistakes-first ranking on a genuine project. The `public`/plugin branch stays lean — the store
|
|
164
|
-
ships only to `demo`, so installing the plugin never drags it along. **The `demo` branch ships
|
|
165
|
-
with a later release** — it does not exist yet, so the link above and the clone command do not
|
|
166
|
-
resolve today; see the
|
|
167
|
-
[Bootstrap guide's reproduce-the-dogfood-path section](docs/getting-started/bootstrap.md#reproduce-the-dogfood-path)
|
|
168
|
-
for the same note.
|
|
100
|
+
next time the agent works near that code.
|
|
101
|
+
|
|
102
|
+
Already have ADRs or design specs? `sidegraph-bootstrap --host claude-code` previews,
|
|
103
|
+
imports, anchors, and proves one record through retrieval — see the
|
|
104
|
+
[Bootstrap guide](docs/getting-started/bootstrap.md). Full setup (hooks, env vars, Codex,
|
|
105
|
+
and the source-checkout path for contributors):
|
|
106
|
+
[quickstart](docs/getting-started/quickstart.md) and
|
|
107
|
+
[installation](docs/getting-started/installation.md).
|
|
169
108
|
|
|
170
109
|
## Why
|
|
171
110
|
|
|
@@ -175,30 +114,18 @@ same problem, solved once. Settled questions stay settled — reopening one is a
|
|
|
175
114
|
supersede with a reason, not amnesia.
|
|
176
115
|
|
|
177
116
|
**For the project** — documentation that knows when it's stale: unlike a wiki, the memory
|
|
178
|
-
is anchored into the code and flags its own decay when the code moves on.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
**For the business** — opex becomes an asset: today 100% of an agent's reasoning
|
|
183
|
-
amortizes to zero the moment the session ends. With Sidegraph every agent session leaves
|
|
184
|
-
a residue — decision capital that *compounds with project age* while everything else
|
|
185
|
-
(human memory, doc accuracy) decays. And it's the one investment model progress can't
|
|
186
|
-
commoditize: better models make derivable knowledge cheaper, not the non-derivable kind.
|
|
117
|
+
is anchored into the code and flags its own decay when the code moves on. Before an agent
|
|
118
|
+
edits, retrieval puts the decisions and dead ends already recorded for that code in front of
|
|
119
|
+
it, at whatever speed the agent works.
|
|
187
120
|
|
|
188
121
|
**For the process** — a sidecar, not a reform: it sits beside whatever spec/ADR flow you
|
|
189
122
|
already run, capture is a byproduct of ordinary sessions, and the single ritual is a
|
|
190
|
-
ratification gate
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
One honest boundary, stated up front: this is not "cheaper agents in general." Memory
|
|
197
|
-
pays off where it replaces reading prose and where the answer isn't in the code at all;
|
|
198
|
-
on a large monorepo where two greps answer the question, it costs more than it saves.
|
|
199
|
-
What you buy is not speed — it's **owning your engineering judgment instead of renting it
|
|
200
|
-
back every session**. And writing decisions down is necessary but not sufficient: records
|
|
201
|
-
nothing surfaces at the moment of work simply go unread — delivery is the product.
|
|
123
|
+
ratification gate. Provenance on every record (who decided, when, on what evidence) is a
|
|
124
|
+
ready audit trail for the era of agent-made decisions.
|
|
125
|
+
|
|
126
|
+
One honest boundary: this is not "cheaper agents in general." Memory pays off where it
|
|
127
|
+
replaces reading prose and where the answer isn't in the code at all; on a large monorepo
|
|
128
|
+
where two greps answer the question, it costs more than it saves.
|
|
202
129
|
|
|
203
130
|
Three kinds of tools circle this problem, and each misses it:
|
|
204
131
|
|
|
@@ -210,8 +137,7 @@ Three kinds of tools circle this problem, and each misses it:
|
|
|
210
137
|
matters, with no link to the code it concerns.
|
|
211
138
|
|
|
212
139
|
None of them can answer: **"which decisions touch *this* function — and how did they
|
|
213
|
-
evolve?"** Sidegraph is built for exactly that question
|
|
214
|
-
real code graph, with temporal history.
|
|
140
|
+
evolve?"** Sidegraph is built for exactly that question.
|
|
215
141
|
|
|
216
142
|
| | CLAUDE.md / AGENTS.md | Session memory tools | ADR markdown | Code-graph engines | OKF bundle | **Sidegraph** |
|
|
217
143
|
|---|---|---|---|---|---|---|
|
|
@@ -224,13 +150,8 @@ real code graph, with temporal history.
|
|
|
224
150
|
| Health is CI-gateable | ✗ | ✗ | ✗ | ✗ | ✓ `okf validate` | ✓ `sidegraph-verify` + `sidegraph-doctor` exit codes |
|
|
225
151
|
|
|
226
152
|
[OKF](https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing/)
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
included, as an OKF v0.1 bundle any OKF consumer can read.
|
|
230
|
-
|
|
231
|
-
The memory that matters most is what was tried, abandoned, and **why** — the mistake
|
|
232
|
-
you'd otherwise pay for twice. Sidegraph keeps it attached to the code and retrievable
|
|
233
|
-
long after everyone forgot.
|
|
153
|
+
standardizes portable knowledge *bundles*, not decision memory; `sidegraph-export-okf`
|
|
154
|
+
projects the full store, history included, into an OKF v0.1 bundle any OKF consumer can read.
|
|
234
155
|
|
|
235
156
|
## How it works
|
|
236
157
|
|
|
@@ -247,26 +168,19 @@ long after everyone forgot.
|
|
|
247
168
|
blind Read/Grep ──▶ nudged back to get_task_context (once per session)
|
|
248
169
|
```
|
|
249
170
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
membership anchors to durable entities, not volatile community ids, so it **survives a fresh
|
|
264
|
-
clone and a graph rebuild** — the mind-model layer is repo-committed team memory, same as the
|
|
265
|
-
decisions. See [docs/concepts/mind-model.md](docs/concepts/mind-model.md).
|
|
266
|
-
|
|
267
|
-
That is the whole design in one line: **a decision log that stays alive — anchored
|
|
268
|
-
precisely to code entities, durably to named domains, delivered mistakes-first before
|
|
269
|
-
the agent's first grep, and merging like code.**
|
|
171
|
+
Two layers age differently: the **structure** layer (the code graph — entities,
|
|
172
|
+
dependencies, communities: *the what*) and the **decision** layer on top (*the why*). The
|
|
173
|
+
graph is disposable — the engine regenerates it from source at any moment. The memory must
|
|
174
|
+
never be — so it lives in a separate store that nothing regenerates, and re-anchors itself
|
|
175
|
+
as the code moves. The unit of memory is an **entity, never a line of code**: functions,
|
|
176
|
+
classes, modules, document headings. Line numbers shift with every edit; entities persist
|
|
177
|
+
through them.
|
|
178
|
+
|
|
179
|
+
On top of both sit named **domains**: each is a described area — title, WHY-IT-EXISTS
|
|
180
|
+
summary, optional subdomains — so the agent's first read of a session is a table of
|
|
181
|
+
contents it can answer from, not a bare community listing. A domain's membership anchors
|
|
182
|
+
to durable entities, not volatile community ids, so it survives a fresh clone and a graph
|
|
183
|
+
rebuild. See [docs/concepts/mind-model.md](docs/concepts/mind-model.md).
|
|
270
184
|
|
|
271
185
|
## What gets stored
|
|
272
186
|
|
|
@@ -281,11 +195,8 @@ the agent's first grep, and merging like code.**
|
|
|
281
195
|
Append-only is a feature: a reversed decision is closed and superseded, never deleted —
|
|
282
196
|
*"tried before, abandoned because…"* stays retrievable via `get_entity_history`.
|
|
283
197
|
|
|
284
|
-
Facts
|
|
285
|
-
|
|
286
|
-
call — one verdict, both records move. Retrieval renders a live fact as an inline
|
|
287
|
-
`evidence: <statement> [<source>]` line under the decision it supports, and a standalone one
|
|
288
|
-
in its own `## Known facts` block — never displacing a mistake line. Details:
|
|
198
|
+
Facts follow the same append-only and ratification rules as decisions; ratifying or
|
|
199
|
+
dropping a decision carries its still-pending facts along in the same verdict. Details:
|
|
289
200
|
[docs/concepts/data-model.md](docs/concepts/data-model.md) and
|
|
290
201
|
[docs/guides/capturing-decisions.md#facts-the-evidence-layer](docs/guides/capturing-decisions.md#facts-the-evidence-layer).
|
|
291
202
|
|
|
@@ -303,7 +214,7 @@ in its own `## Known facts` block — never displacing a mistake line. Details:
|
|
|
303
214
|
| `retrieve_decisions` / `list_facts` | List current decisions / current facts |
|
|
304
215
|
| `propose_decisions` / `propose_domains` / `add_domain` | Draft a decision (plus attached or standalone facts) or name a domain, from a session or by hand |
|
|
305
216
|
| `supersede_domain` | Lineage-correct rename/re-scope of a domain: closes the old, writes a `proposed` successor |
|
|
306
|
-
| `list_proposed` / `ratify` | The human gate (
|
|
217
|
+
| `list_proposed` / `ratify` | The human gate (see `SIDEGRAPH_RATIFY_POLICY` in the configuration reference): review pending decisions, facts, *and* domains, accept/drop (a decision's verdict cascades to its still-pending facts) |
|
|
307
218
|
| `sync_anchors` | Diagnostic/heal MCP counterpart to `sidegraph-sync` — re-anchor against the current graph and return the rebind report as data |
|
|
308
219
|
| `verify_store` | Read-only integrity lint of the store's canonical files — the MCP counterpart to `sidegraph-verify` |
|
|
309
220
|
| `add_anchors` | Append bindings to an existing decision or fact — in-place re-anchoring for the `heal-anchors` triage flow |
|
|
@@ -320,9 +231,8 @@ Reference: [docs/reference/](docs/reference/mcp-tools.md).
|
|
|
320
231
|
## Works on code and on docs
|
|
321
232
|
|
|
322
233
|
Anchor decisions to functions and classes — or to **headings in your architecture
|
|
323
|
-
markdown** (LLM-free graph build, non-git folders supported).
|
|
324
|
-
|
|
325
|
-
no LLM. See the [Bootstrap guide](docs/getting-started/bootstrap.md).
|
|
234
|
+
markdown** (LLM-free graph build, non-git folders supported). `sidegraph-bootstrap` parses
|
|
235
|
+
existing ADRs and design specs into anchored decisions deterministically, no LLM.
|
|
326
236
|
|
|
327
237
|
An optional **semantic pass** (`graphify extract`, one API key, cached per file) goes a
|
|
328
238
|
layer deeper on documentation: prose becomes `concept` nodes and thematic clusters, giving
|
|
@@ -336,8 +246,8 @@ retrieval a richer graph to anchor against. Walkthrough:
|
|
|
336
246
|
plus a local, gitignored index it can always rebuild. **Nothing leaves your machine** —
|
|
337
247
|
no network calls, no remote telemetry, no account. Sidegraph does keep local usage
|
|
338
248
|
diagnostics in that gitignored index (which stored memory was shown, and which files a
|
|
339
|
-
session touched afterwards) so you can
|
|
340
|
-
travel, and `SIDEGRAPH_TELEMETRY=off` disables them.
|
|
249
|
+
session touched afterwards) so you can see which memory was shown and which files
|
|
250
|
+
those sessions then touched; they never travel, and `SIDEGRAPH_TELEMETRY=off` disables them.
|
|
341
251
|
- **Secrets don't enter memory.** Proposed decisions and facts pass redaction before they
|
|
342
252
|
are stored. A ratification gate controls what the agent's drafts can persist: human for
|
|
343
253
|
`adr`/`constraint` decisions and domains always, and, if you answer yes to `sidegraph-init`'s
|
|
@@ -350,30 +260,17 @@ retrieval a richer graph to anchor against. Walkthrough:
|
|
|
350
260
|
|
|
351
261
|
Entity extraction and graph construction come from
|
|
352
262
|
[Graphify](https://github.com/safishamsi/graphify) (its LLM-free build covers both code
|
|
353
|
-
and markdown)
|
|
263
|
+
and markdown); Sidegraph never re-implements them or writes into the engine's output.
|
|
354
264
|
The engine is optional at runtime: without a graph, records anchor to file paths and
|
|
355
265
|
domains and retrieval still works, but symbol-level anchors, communities, and moved-code
|
|
356
|
-
resolution need it (see the [operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)).
|
|
357
|
-
and regenerated on every rebuild; everything
|
|
358
|
-
|
|
266
|
+
resolution need it (see the [operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)).
|
|
267
|
+
Everything the engine produces is derived and regenerated on every rebuild; everything
|
|
268
|
+
Sidegraph stores is deliberate, ratified, and permanent. **Own the memory, rent the graph.**
|
|
359
269
|
|
|
360
270
|
## Status
|
|
361
271
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
Published by a tag-triggered GitHub Actions workflow that gates on the full test suite
|
|
365
|
-
(trusted publishing, no stored token). Interfaces may still move before 1.0. The full loop — capture, ratification,
|
|
366
|
-
mistakes-first retrieval, refactor-surviving re-anchoring, semantic docs layer, the
|
|
367
|
-
mind-model layer (named domains, `SessionStart` table of contents, `drill_down`), and now the
|
|
368
|
-
facts layer (evidence attached to a decision or anchored standalone) — is exercised
|
|
369
|
-
end-to-end on real code and ADR corpora (a 4,700-node Python trading system and a 15-document
|
|
370
|
-
architecture corpus), with 2,462 tests as of this writing (a public checkout runs 2,240: the
|
|
371
|
-
seven release-mechanics test files that read `tools/` aren't shipped, since `tools/` itself
|
|
372
|
-
isn't shipped, and 3 internal-corpus calibration tests skip — they need a private design
|
|
373
|
-
corpus not included here). Exact counts drift as tests are added; the `tests` badge above
|
|
374
|
-
tracks the suite passing, not a frozen number.
|
|
375
|
-
Honest boundaries: not a code indexer, not general agent memory, not a graph engine —
|
|
376
|
-
decision memory over a rented graph, and nothing else.
|
|
272
|
+
Pre-1.0: interfaces may still move. Not a code indexer, not general agent memory, not a
|
|
273
|
+
graph engine — decision memory over a rented graph, and nothing else.
|
|
377
274
|
|
|
378
275
|
## Documentation
|
|
379
276
|
|