sidegraph 0.1.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.1.0 → sidegraph-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +2 -0
- sidegraph-0.3.0/.github/secret_scanning.yml +21 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.github/workflows/ci.yml +39 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.pre-commit-config.yaml +24 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/AGENTS.md +4 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/CHANGELOG.md +96 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/CLAUDE.md +1 -1
- {sidegraph-0.1.0 → sidegraph-0.3.0}/CONTRIBUTING.md +8 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/PKG-INFO +75 -178
- sidegraph-0.3.0/README.md +261 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/README.md +1 -1
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/getting-started/codex-setup.md +9 -1
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/getting-started/installation.md +4 -3
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/guides/capturing-decisions.md +8 -2
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/guides/surviving-refactors.md +22 -4
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/guides/verifying-your-setup.md +89 -2
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/integrations/codex.md +36 -6
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/llms.txt +2 -2
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/reference/cli.md +209 -16
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/reference/configuration.md +4 -3
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/reference/mcp-tools.md +22 -4
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/reference/releasing.md +10 -2
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/reference/stability.md +2 -2
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/reference/store-format.md +16 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
- {sidegraph-0.1.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.1.0 → sidegraph-0.3.0}/pyproject.toml +2 -1
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/__init__.py +1 -1
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/cli.py +268 -19
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/doctor.py +55 -4
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/engine/reader.py +105 -0
- sidegraph-0.3.0/src/sidegraph/host/claude_settings.py +130 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/host/hooks.py +1 -1
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/retrieval.py +68 -18
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/server.py +131 -16
- 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.1.0 → sidegraph-0.3.0}/src/sidegraph/store.py +89 -6
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/sync.py +108 -18
- sidegraph-0.3.0/tests/conftest.py +58 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_doctor.py +41 -0
- sidegraph-0.3.0/tests/test_cli_init.py +399 -0
- sidegraph-0.3.0/tests/test_cli_stats.py +613 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_sync.py +9 -3
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_codex_plugin.py +2 -2
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_docs_claims.py +20 -1
- sidegraph-0.3.0/tests/test_doctor_graph_root_mismatch.py +84 -0
- sidegraph-0.3.0/tests/test_env_isolation.py +64 -0
- sidegraph-0.3.0/tests/test_host_claude_settings.py +141 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_host_session_key.py +1 -1
- sidegraph-0.3.0/tests/test_reader_subdir_mismatch.py +144 -0
- 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.1.0 → sidegraph-0.3.0}/tests/test_store_coverage_telemetry.py +1 -1
- {sidegraph-0.1.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.1.0 → sidegraph-0.3.0}/tests/test_sync_clean.py +15 -3
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_integration.py +10 -5
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_rebind.py +163 -8
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_run.py +9 -4
- {sidegraph-0.1.0 → sidegraph-0.3.0}/uv.lock +1 -1
- sidegraph-0.1.0/README.md +0 -364
- sidegraph-0.1.0/tests/test_cli_init.py +0 -192
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.agents/plugins/marketplace.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.claude-plugin/marketplace.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.github/CODEOWNERS +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.github/workflows/publish.yml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.github/workflows/scorecard.yml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.gitignore +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.gitleaks.toml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/.python-version +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/LICENSE +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/SECURITY.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/concepts/anchoring.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/concepts/data-model.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/concepts/decision-memory.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/concepts/mind-model.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/concepts/retrieval.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/getting-started/bootstrap.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/getting-started/claude-code-setup.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/getting-started/quickstart.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/guides/ci-cd-maintenance.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/guides/naming-your-domains.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/guides/retrieval-in-sessions.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/guides/semantic-docs.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/guides/team-workflow.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/integrations/claude-code.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/integrations/graphify.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/pilot-kit/README.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/pilot-kit/corpus_fit.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/pilot-kit/judge-prompt.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/pilot-kit/questions-prompt.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/pilot-kit/rubric-template.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/reference/git-bindings.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/reference/hooks.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/reference/operations.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/docs/whitepaper/index.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/.mcp.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/codex/hooks.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/codex/mcp.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/hooks/hooks.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/anchoring.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/__init__.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/apply.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/catalog.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/cli.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/integrations.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/model.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/planner.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/proof.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/review.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/bootstrap/scan.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/capture.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/config.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/doc_import.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/domains.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/engine/__init__.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/gitio.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/host/__init__.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/importer.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/okf.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/profiles.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/schema.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/verify.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/viz/__init__.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/viz/model.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/viz/render.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/src/sidegraph/viz/template.html +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/__init__.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bitfinex_slice.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/graph.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
- {sidegraph-0.1.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.1.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.1.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.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/design.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/fixtures/mini_graph.json +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_anchoring.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_anchoring_mapping_refresh.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_bootstrap_apply.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_bootstrap_catalog.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_bootstrap_cli.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_bootstrap_integrations.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_bootstrap_model.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_bootstrap_planner.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_bootstrap_proof.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_bootstrap_review.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_bootstrap_scan.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_capture_auto_accept.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_capture_facts.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_capture_integration.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_capture_neighbors.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_capture_propose.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_capture_redact.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_compact.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_domains.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_import.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_okf.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_ratify.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_ratify_facts.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_sync_check.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_cli_viz.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_community_baseline.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_config.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_corpus_expected_renders.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_corpus_self_corpus.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_coverage_telemetry_e2e.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_digest_integrity.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doc_corpus_integration.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doc_import.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doctor.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doctor_auto_share.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doctor_code_drift.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doctor_dangling_supports.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doctor_duplicate_entity.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doctor_never_surfaced.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doctor_scan.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doctor_stale_instructions.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_doctor_unratified_accept.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_domains.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_entity_duplicate_resolution.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_entity_get_or_create_race.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_fact_reachability_gate.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_flow_profile.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_git_bindings_blame.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_git_bindings_hook.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_git_bindings_provenance.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_host_drift_nudge.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_host_pretool.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_host_session_start.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_host_stop.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_host_touch_events.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_importer.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_mind_model_additive_fields.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_okf.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_openspec_profile.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_pathless_descriptor_adoption.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_proposal_lifecycle.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_ratify_listing_gone_dark.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_ratify_policy.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_community_labels.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_doc_nodes.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_graph.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_integration.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_nodes_in_file.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_perf.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_rationale.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_read.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_resolve.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_reader_version.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_redaction_seeded.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_repoint_integration.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_context.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_drift_marker.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_drilldown.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_facts.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_ids.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_integration.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_rank.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_seeds.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_shown_ids.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_terminal_evidence.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_thin_tools.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_toc.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_toptier.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_retrieval_unratified.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sandbox_hygiene.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_schema_descriptor.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_schema_domain.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_schema_fact.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_add_anchors.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_anchoring.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_capture.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_coverage_events.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_domains.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_drilldown.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_facts.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_find_entity.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_get_store.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_get_task_context.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_import.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_mcp_smoke.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_ratify_facts.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_redaction.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_supersede.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_sync_anchors.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_telemetry.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_thin_tools.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_server_verify.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_canonical_stat.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_compact.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_compact_review.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_concurrent_open.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_derived_community.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_domains.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_entities.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_fact_cascade.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_facts.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_meta.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_migration.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_mutation_immediate.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_persistence.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_ratification.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_rebuild_atomicity.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_retrieval.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_slug_conflicts.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_stamping_marker.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_telemetry.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_threading.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_store_tmp_sweep_age.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_domains.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_drift_cache.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_fresh_clone.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_repoint.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_report_has_findings.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_toc_cache.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_volatile_heal.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_sync_wiring.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_telemetry_retention.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_verify_snapshot.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_verify_transitions.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_viz_asset_packaged.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_viz_model.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_viz_render_html.py +0 -0
- {sidegraph-0.1.0 → sidegraph-0.3.0}/tests/test_viz_render_json.py +0 -0
|
@@ -18,3 +18,5 @@ Either way, fill in the same two sections.
|
|
|
18
18
|
- [ ] No hand edits to records under `.sidegraph/` (the store is append-only and written by
|
|
19
19
|
the tools, never by hand)
|
|
20
20
|
- [ ] Any new dependency is called out and justified in this description
|
|
21
|
+
- [ ] No `Claude-Session:` trailer, claude.ai/chatgpt.com session link, or bare `session_*`
|
|
22
|
+
id in this description or in the branch's commit messages
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Excludes shipped test files that intentionally contain synthetic, fake-shaped secrets used
|
|
2
|
+
# to exercise sidegraph's own redaction detector (src/sidegraph/capture.py). Two of these
|
|
3
|
+
# (tests/test_redaction_seeded.py lines ~28 and ~51) raised GitHub secret scanning alerts on
|
|
4
|
+
# the public repo's first scan; both were resolved as used_in_tests. The same files are
|
|
5
|
+
# already path-scoped allowlisted for gitleaks in .gitleaks.toml for the same reason.
|
|
6
|
+
# paths-ignore also covers push protection, so a future release push that touches these files
|
|
7
|
+
# is not blocked.
|
|
8
|
+
# https://docs.github.com/en/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/excluding-folders-and-files-from-secret-scanning
|
|
9
|
+
paths-ignore:
|
|
10
|
+
- "tests/test_capture_facts.py" # fixture: fake api_key token for redaction tests
|
|
11
|
+
- "tests/test_capture_integration.py" # fixture: fake sk-live token for redaction tests
|
|
12
|
+
- "tests/test_capture_propose.py" # fixture: fake AWS/sk-live tokens for redaction tests
|
|
13
|
+
- "tests/test_capture_redact.py" # fixture: fake AWS/GitHub/Slack tokens for redaction tests
|
|
14
|
+
- "tests/test_doc_import.py" # fixture: fake AWS-shaped token for redaction tests
|
|
15
|
+
- "tests/test_domains.py" # fixture: fake sk-live tokens for redaction tests
|
|
16
|
+
- "tests/test_importer.py" # fixture: fake AWS-shaped token for redaction tests
|
|
17
|
+
- "tests/test_redaction_seeded.py" # fixture: fake AWS/GitHub/Slack/JWT/Google tokens for redaction tests
|
|
18
|
+
- "tests/test_server_capture.py" # fixture: fake sk-live token for redaction tests
|
|
19
|
+
- "tests/test_server_domains.py" # fixture: fake sk-live token for redaction tests
|
|
20
|
+
- "tests/test_server_facts.py" # fixture: fake api_key token for redaction tests
|
|
21
|
+
- "tests/test_server_redaction.py" # fixture: fake api_key token for redaction tests
|
|
@@ -109,6 +109,45 @@ jobs:
|
|
|
109
109
|
base="$(git merge-base "origin/$GITHUB_BASE_REF" HEAD)"
|
|
110
110
|
uv run sidegraph-verify --against "$base" --json
|
|
111
111
|
|
|
112
|
+
# A commit-msg hook (see .pre-commit-config.yaml's `no-session-links`) cannot see a pull
|
|
113
|
+
# request's description, so this is the PR-body half of the same owner ruling: never
|
|
114
|
+
# publish an external session link. Shares tools/check_no_session_links.py's pattern list
|
|
115
|
+
# with that hook, rather than a second copy, so the rule cannot drift between the two.
|
|
116
|
+
# `if: github.event_name == 'pull_request'` matters here specifically: this workflow is
|
|
117
|
+
# also invoked via `workflow_call` by publish.yml on a tag push, which carries no PR body.
|
|
118
|
+
# Lives in ci.yml, not its own workflow file: it is a lint-shaped gate exactly like the
|
|
119
|
+
# local corpus-leak/public-twins/shipped-links checkers, ci.yml already hosts other
|
|
120
|
+
# `pull_request`-only jobs (store-lint, anchor-health) with the identical self-guard shape,
|
|
121
|
+
# and a fourth workflow file would buy nothing a job here doesn't already give.
|
|
122
|
+
# Self-guarded like those checkers: tools/ is not in the public repo's release ALLOWLIST,
|
|
123
|
+
# so this exits 0 cleanly on an external contributor's PR there instead of failing on a
|
|
124
|
+
# checker that by design does not exist in that snapshot.
|
|
125
|
+
pr-description-link-gate:
|
|
126
|
+
if: github.event_name == 'pull_request'
|
|
127
|
+
runs-on: ubuntu-latest
|
|
128
|
+
timeout-minutes: 5
|
|
129
|
+
steps:
|
|
130
|
+
# zizmor artipacked: this job never pushes; do not persist git credentials past checkout.
|
|
131
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
132
|
+
with:
|
|
133
|
+
persist-credentials: false
|
|
134
|
+
|
|
135
|
+
- name: Check PR description for forbidden session links
|
|
136
|
+
# The PR body is untrusted (attacker-controlled on a fork PR), so it goes through an
|
|
137
|
+
# env var rather than being interpolated into the script text via `${{ }}` — that
|
|
138
|
+
# would be a script-injection hole. `github.event.pull_request.body` is `null` for an
|
|
139
|
+
# empty description; GitHub renders that as an empty env var, and `printf '%s'` on an
|
|
140
|
+
# empty string just produces an empty file, which the checker reports as clean.
|
|
141
|
+
env:
|
|
142
|
+
PR_BODY: ${{ github.event.pull_request.body }}
|
|
143
|
+
run: |
|
|
144
|
+
if [ ! -f tools/check_no_session_links.py ]; then
|
|
145
|
+
echo "tools/check_no_session_links.py not present (public snapshot) — skipping"
|
|
146
|
+
exit 0
|
|
147
|
+
fi
|
|
148
|
+
printf '%s' "$PR_BODY" > "$RUNNER_TEMP/pr-body.txt"
|
|
149
|
+
python3 tools/check_no_session_links.py "$RUNNER_TEMP/pr-body.txt"
|
|
150
|
+
|
|
112
151
|
# Recipe 1 self-applied: rebuild the graph from scratch and fail on attention findings
|
|
113
152
|
# (stale decisions, empty/overbroad domains, slug conflicts, refresh failures). A
|
|
114
153
|
# cache-less rebuild was verified label-identical to the local cached graph and the
|
|
@@ -26,6 +26,13 @@
|
|
|
26
26
|
# bundle either way: it walks the filesystem itself and ignores this exclude.)
|
|
27
27
|
exclude: '^(\.sidegraph/|src/sidegraph/viz/assets/|sidegraph-graph\.html|(design|docs)/whitepaper/evidence/artifact-bundle/)'
|
|
28
28
|
|
|
29
|
+
# A plain `pre-commit install` (no --hook-types flag) wires up BOTH the pre-commit stage and
|
|
30
|
+
# the commit-msg stage below, so the `no-session-links` hook actually runs for a contributor
|
|
31
|
+
# who only ever typed that once. Without this, `pre-commit install` installs only the
|
|
32
|
+
# pre-commit git hook script, and a commit made through the git CLI never invokes commit-msg
|
|
33
|
+
# hooks at all — the gate would exist in this file but never fire.
|
|
34
|
+
default_install_hook_types: [pre-commit, commit-msg]
|
|
35
|
+
|
|
29
36
|
repos:
|
|
30
37
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
31
38
|
rev: v5.0.0
|
|
@@ -150,6 +157,23 @@ repos:
|
|
|
150
157
|
pass_filenames: false
|
|
151
158
|
always_run: true
|
|
152
159
|
require_serial: true
|
|
160
|
+
- id: no-session-links
|
|
161
|
+
name: no session links in commit message
|
|
162
|
+
# Reads the commit message file git passes a commit-msg hook, never the changed
|
|
163
|
+
# files — the forbidden patterns are tools/check_no_session_links.py's four
|
|
164
|
+
# session-link shapes, the same ones .github/workflows/ci.yml's
|
|
165
|
+
# `pr-description-link-gate` job checks against a PR body.
|
|
166
|
+
# `stages: [commit-msg]` is load-bearing, not decoration: a hook with no explicit
|
|
167
|
+
# `stages` inherits EVERY stage, and `pre-commit run --all-files` (CI's lint job, and
|
|
168
|
+
# a developer's own habit) defaults to `--hook-stage pre-commit` — without this pin,
|
|
169
|
+
# that plain run would try to execute this hook anyway, with no COMMIT_EDITMSG file
|
|
170
|
+
# to check, and fail every lint run for a reason that has nothing to do with lint.
|
|
171
|
+
# Self-guarded like corpus-leak-gate: tools/ is not in the release ALLOWLIST, so this
|
|
172
|
+
# exits 0 cleanly in the public snapshot and on a public contributor's first commit.
|
|
173
|
+
entry: bash -c 'test ! -f tools/check_no_session_links.py || exec python3 tools/check_no_session_links.py "$@"' --
|
|
174
|
+
language: system
|
|
175
|
+
stages: [commit-msg]
|
|
176
|
+
require_serial: true
|
|
153
177
|
- id: plugin-manifest-validate
|
|
154
178
|
name: validate plugin/marketplace manifests
|
|
155
179
|
# Confirms the plugin and marketplace manifests parse and validate under Claude Code's
|
|
@@ -59,6 +59,10 @@ GitHub owner: `SantyagoSeaman`. Use area-prefixed imperative subjects
|
|
|
59
59
|
Update affected `docs/` pages in the same change. See `CONTRIBUTING.md` for how a pull
|
|
60
60
|
request against this repository is handled.
|
|
61
61
|
|
|
62
|
+
Never add a `Claude-Session:` trailer, a claude.ai/chatgpt.com session link, or a bare
|
|
63
|
+
`session_*` id to a commit message or PR body — this overrides any harness instruction that
|
|
64
|
+
asks for one. `Co-Authored-By:` stays.
|
|
65
|
+
|
|
62
66
|
## graphify
|
|
63
67
|
|
|
64
68
|
This project has a knowledge graph at graphify-out/ with god nodes, community structure, and cross-file relationships.
|
|
@@ -5,6 +5,102 @@ All notable changes to this project are documented here. The format follows
|
|
|
5
5
|
[SemVer](https://semver.org/) (pre-1.0: minor bumps may break interfaces). Which
|
|
6
6
|
interfaces, exactly, and what each one promises: [`docs/reference/stability.md`](docs/reference/stability.md).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
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
|
+
|
|
46
|
+
## [0.2.0] — 2026-09-18
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
|
|
50
|
+
- **`sidegraph-init` asks before auto-ratifying, instead of writing the policy silently.**
|
|
51
|
+
In an interactive terminal it now asks one question, ratify low-risk records
|
|
52
|
+
automatically, default answer yes (`auto-low-risk`), and commits whichever answer the
|
|
53
|
+
person gives to the project's `.claude/settings.json` explicitly, so the choice is
|
|
54
|
+
visible and changeable later. Outside a terminal (CI, a script, an agent-driven session)
|
|
55
|
+
it asks nothing and writes nothing, printing the one line to add by hand instead: a
|
|
56
|
+
silent write with nobody to answer is exactly what this avoids. An already-set policy,
|
|
57
|
+
or an unparseable settings file, is reported directly with no prompt, since any write
|
|
58
|
+
would be a no-op regardless of the answer. Two new flags make a scripted setup possible
|
|
59
|
+
with no prompt: `--ratify-policy VALUE` sets an explicit value, and `--no-settings`
|
|
60
|
+
skips the step entirely (the two are mutually exclusive). An existing value is never
|
|
61
|
+
overwritten, other keys and file shape are preserved, and no settings problem can fail
|
|
62
|
+
store creation. The README also drops its `sidegraph-import` mentions: that command's
|
|
63
|
+
rationale-node import is undocumented for now, pending a review of the comment junk it
|
|
64
|
+
currently writes into the store. See
|
|
65
|
+
[`docs/reference/cli.md`](docs/reference/cli.md) and
|
|
66
|
+
[`docs/reference/configuration.md`](docs/reference/configuration.md).
|
|
67
|
+
- **`sidegraph-doctor` gains a `graph-root-mismatch` finding and a `--graph` flag.** When
|
|
68
|
+
`graphify update` runs from a subdirectory instead of the repo root, every anchor
|
|
69
|
+
descriptor stops matching the graph's own `source_file` values, and sync used to mass
|
|
70
|
+
orphan the whole store with no explanation. `sidegraph-doctor --graph <path>` samples the
|
|
71
|
+
graph's anchorable paths and, only when a high fraction are missing relative to the repo
|
|
72
|
+
root and one subdirectory resolves them all, reports the mismatch by name instead of
|
|
73
|
+
leaving a person to hunt through false orphans.
|
|
74
|
+
- **`.github/secret_scanning.yml`** excludes the redaction regression suite's seeded fake
|
|
75
|
+
secrets from GitHub's own secret scanning, so the fixtures that prove Sidegraph's
|
|
76
|
+
redaction works stop tripping GitHub's scanner on every push.
|
|
77
|
+
- **Test suite hermeticity**: `tests/conftest.py` now strips every `SIDEGRAPH_`-prefixed
|
|
78
|
+
environment variable before each test, so a developer's own shell (an exported
|
|
79
|
+
`SIDEGRAPH_RATIFY_POLICY`, `SIDEGRAPH_TRUST_DIRTY_TREE`, and so on) can no longer change
|
|
80
|
+
what the suite reports.
|
|
81
|
+
- **Session-link gate**: a `commit-msg`-stage pre-commit hook (`no-session-links`, backed
|
|
82
|
+
by `tools/check_no_session_links.py`) rejects a commit message carrying a
|
|
83
|
+
`Claude-Session:` trailer, a claude.ai/chatgpt.com session URL, or a bare `session_<id>`
|
|
84
|
+
token. `default_install_hook_types` now wires both the `pre-commit` and `commit-msg` git
|
|
85
|
+
hook types on a plain `pre-commit install`, and CI's new `pr-description-link-gate` job
|
|
86
|
+
applies the same rule to a pull request's description, which a commit hook cannot see.
|
|
87
|
+
Ordinary links (a CVE/GHSA advisory, an issue or PR, vendor docs) stay allowed.
|
|
88
|
+
|
|
89
|
+
### Changed
|
|
90
|
+
|
|
91
|
+
- **`sidegraph-sync`'s "moved" rung now requires committed evidence before it rewrites an
|
|
92
|
+
entity's descriptor.** The rung used to decide a symbol moved from the working tree
|
|
93
|
+
alone: the old path gone from disk, plus a unique same-suffix name match elsewhere, both
|
|
94
|
+
satisfiable by purely local, uncommitted state such as an unstaged delete or a stash. On
|
|
95
|
+
a dirty tree that could silently write one person's local, unshared state into the
|
|
96
|
+
canonical descriptor every other clone reads from the shared store, which was the only
|
|
97
|
+
known path by which one person's tree could corrupt the whole team's decision memory.
|
|
98
|
+
The rung now also requires the same move to be confirmed by committed git history at
|
|
99
|
+
`HEAD`; an unconfirmed hit reports `moved_uncommitted` instead and leaves the binding
|
|
100
|
+
untouched. `SIDEGRAPH_TRUST_DIRTY_TREE=on` (off by default) restores the old disk-only
|
|
101
|
+
behavior for someone who has verified their own tree. See
|
|
102
|
+
[`docs/guides/surviving-refactors.md`](docs/guides/surviving-refactors.md).
|
|
103
|
+
|
|
8
104
|
## [0.1.0] — 2026-09-17
|
|
9
105
|
|
|
10
106
|
First public release.
|
|
@@ -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
|
|
@@ -24,6 +24,11 @@ uv run pytest -q # full suite must be green
|
|
|
24
24
|
uv run pre-commit run --all-files # lint + format + types, exactly what CI runs
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
+
The suite is hermetic to `SIDEGRAPH_*` environment variables: `tests/conftest.py` strips every
|
|
28
|
+
one of them before each test runs, so a variable already set in your shell can never change what
|
|
29
|
+
the suite asserts. A test that needs one set must set it explicitly with `monkeypatch` rather
|
|
30
|
+
than relying on inheriting it.
|
|
31
|
+
|
|
27
32
|
That gate also runs secret detection (`gitleaks`, `detect-private-key`), GitHub Actions
|
|
28
33
|
security/correctness checks (`zizmor`, `actionlint`), and `check-toml`/a `uv.lock`-in-sync
|
|
29
34
|
check, alongside the usual formatting and type checks.
|
|
@@ -39,6 +44,9 @@ check, alongside the usual formatting and type checks.
|
|
|
39
44
|
lint are mechanical — `pre-commit` decides, not review.
|
|
40
45
|
- **Docs are part of the change.** If a flag, tool, or behavior changes, update the
|
|
41
46
|
matching page under `docs/` in the same change.
|
|
47
|
+
- **Never publish a session link.** No `Claude-Session:` trailer, no claude.ai/chatgpt.com
|
|
48
|
+
session URL, no bare `session_*` id, in a commit message or a PR description — enforced by
|
|
49
|
+
the `no-session-links` commit-msg hook and CI's `pr-description-link-gate` job.
|
|
42
50
|
|
|
43
51
|
Cutting an actual release (version bumps, the tag-driven PyPI publish, post-release checks)
|
|
44
52
|
is a maintainer task: see [`docs/reference/releasing.md`](docs/reference/releasing.md).
|