Contributing to Strixonomy¶
Thank you for contributing. This repository contains:
- Strixonomy engine — Rust semantic workspace under
crates/(strixonomyfaçade,strixonomy-*implementation,strixonomyCLI,strixonomy-lsp) - Strixonomy IDE — VS Code extension under
extension/ - User guides — install, SQL, and LSP API under
docs/
AI / agent contributors: start with AGENTS.md on GitHub (SHIPPED-first; do not implement from docs/design/ targets).
Naming: Product identity.
Env vars: prefer STRIXONOMY_LSP_BIN (legacy ONTOCORE_LSP_BIN may still be dual-read — v0.27 migration).
Docs-only contributors (~15 minutes)¶
No Rust or Node required for documentation-only PRs. Expect under one hour end-to-end including review prep:
- Edit pages under
docs/(this site). Update rootREADME.mdorextension/README.mdwhen install or marketplace text changes. RootCONTRIBUTING.mdis a pointer — edit this page instead. - Run
./scripts/check-doc-versions.sh. - Optional preview:
pip install -r docs/requirements.txt && ./scripts/serve-docs.sh - Open a focused PR.
Public install pins must match docs/TAGGED_RELEASE — not the unreleased workspace version in Cargo.toml.
Platform content: edit vision.md, roadmap.md, and architecture.md here. Root VISION.md / ROADMAP.md / ARCHITECTURE.md / CONTRIBUTING.md are short pointers to these pages.
Canonical documentation paths¶
| Topic | GitHub (root) | Read the Docs (docs/) |
|---|---|---|
| Vision | VISION.md | vision.md |
| Architecture | ARCHITECTURE.md | architecture.md |
| Platform roadmap | ROADMAP.md | roadmap.md |
| Engineering specs | — | design/README.md |
| Platform planning (v0.14+) | — | platform/OVERVIEW.md |
| Product ADRs | — | adr/README.md |
| Engineering ADRs | — | design/adr/README.md |
| Documentation map | — | documentation-index.md |
Root VISION.md, ARCHITECTURE.md, ROADMAP.md, and CONTRIBUTING.md are pointers to the docs/ copies. Prefer editing this docs/ copy. Release pin truth is a single file: TAGGED_RELEASE — run ./scripts/check-doc-versions.sh to catch drift.
Contributor process (this page): Edit docs/contributing.md first for Read the Docs. Root CONTRIBUTING.md is a short pointer to this page — do not maintain a second full guide at the root.
- Specs — product and architecture docs under
docs/design/(DEPENDENCY_MATRIX.md for external crates)
The root Cargo package strixonomy is unpublished and hosts workspace integration tests (tests/).
New contributors: start with Architecture tour (~15 min) and internals.md for role-based paths (Rust, extension, docs, LSP).
First PR paths¶
Smoke PR (~15 minutes docs-only; Rust smoke is longer on a cold machine) — docs-only or small Rust fix:
- Install Rust 1.88+ (Node 20 only if you touch
extension/). git clone https://github.com/eddiethedean/strixonomy.git && cd strixonomy- Docs-only: edit docs and run
./scripts/check-doc-versions.sh. - Small Rust fix:
cargo test -p strixonomy-core --lib(or your touched crate). Cold first compile of Strixonomy dependencies is often 15–30+ minutes — not part of the “docs ~15 min” path. Warm cache is much faster; see testing matrix. cargo fmt --all --checkwhen you touch Rust; always run./scripts/check-doc-versions.shfor docs changes.- Open a focused PR with a short description.
Full contributor setup (~60+ minutes warm cache; 2–4+ hours cold) — extension, LSP, or release-impacting changes:
- Complete smoke steps above.
cargo test --workspaceandcargo build -p strixonomy-lsp --bins.- Extension:
cd extension && npm ci && STRIXONOMY_LSP_BIN=../target/debug/strixonomy-lsp npm test. - Webview:
cd extension/webview-ui && npm ci && npm test. - Before opening a PR:
./scripts/run-ci-local.sh(30–60+ minutes; matches GitHub Actions).
See Testing matrix for which commands to run by change type.
Plugin contributors (v0.14+)¶
| Task | Start here |
|---|---|
| Author a workspace plugin (manifest, validator, exporter) | guides/plugins.md — canonical author guide |
| Reference implementation | crates/strixonomy-plugin-naming/, examples/plugin-workspace/ |
| Historical trait-based design (do not implement from) | PLUGIN_SPEC.md on GitHub (excluded from public docs) |
| Wire LSP / CLI integration | lsp-api.md, crates/strixonomy-lsp/ |
Run ./scripts/run-ci-local.sh before PRs that touch plugin host, reference plugins, or extension capability registry.
Before opening a PR¶
Use the testing matrix for the minimum commands for your change type. Do not run the full Rust/extension suite for docs-only PRs.
Docs-only checklist:
./scripts/check-doc-versions.sh
# optional: pip install -r docs/requirements.txt && ./scripts/build-docs.sh
Engine / extension checklist (most code changes):
cargo fmt --all --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspace
cargo build -p strixonomy-lsp --bins
cd extension/webview-ui && npm ci && npm test
cd extension && STRIXONOMY_LSP_BIN=../target/debug/strixonomy-lsp npm ci && npm run compile && npm test
./scripts/check-doc-versions.sh
Full CI parity (release branches or broad changes): ./scripts/run-ci-local.sh (~30+ minutes). This matches GitHub Actions (rustfmt, clippy, tests, extension e2e, mkdocs, packaging).
Open an issue or discussion before large features. Follow existing commit message style in git log.
Good first issues¶
Look for GitHub labels good first issue and docs. Starter tasks:
- Docs clarity / broken links / version pin nits under
docs/(run./scripts/check-doc-versions.sh) - Copy fixes in first-success or
extension/README.md - Small unit-test additions next to existing tests in a single
strixonomy-*crate (cargo test -p strixonomy-core --lib)
Open a focused PR with a short description of what confused you.
Prerequisites¶
- Rust 1.88+ (see
rust-versioninCargo.toml) - Node.js 20 (extension CI)
npm(extension build)cargo-audit—cargo install cargo-auditif you run./scripts/run-ci-local.shlocally (CI runscargo audit; not required for every PR smoke check)
Optional dependencies¶
- Java 11+ and ROBOT on
PATH— optional; needed only for manualstrixonomy robot/ ROBOT interop development (not required forcargo test --workspace) - Python 3.12 — for MkDocs doc site (
pip install -r docs/requirements.txt)
Canonical contributor guide (this page): Edit
docs/contributing.md. RootCONTRIBUTING.mdis a short pointer — keep the pointer accurate, not a second full guide.
Build and test¶
Rust (full workspace)¶
cargo build --workspace
cargo test --workspace
cargo fmt --all
cargo clippy --workspace --all-targets --all-features -- -D warnings
Build the language server binary:
cargo build -p strixonomy-lsp --bins
Run CLI smoke commands against fixtures:
cargo run -- query fixtures "SELECT * FROM classes"
cargo run -- validate fixtures
cargo run -- uses the workspace default member strixonomy-cli (binary name: strixonomy).
Extension¶
cd extension
npm ci
npm run compile
npm test
Webview UI (React panels)¶
cd extension/webview-ui
npm ci
npm test
Extension tests expect a built strixonomy-lsp binary. From the repo root:
cargo build -p strixonomy-lsp --bins
cd extension
export STRIXONOMY_LSP_BIN="$(pwd)/../target/debug/strixonomy-lsp"
npm test
F5 / Run Extension: Open the extension/ folder in VS Code, build LSP (cargo build -p strixonomy-lsp --bins), optionally set strixonomy.lspPath to your debug binary, then launch Run Extension.
LSP integration smoke test (workspace crate):
cargo test -p strixonomy --test lsp_smoke
cargo test -p strixonomy --test lsp_reasoner
VS Code E2E matrix (separate workflow): see .github/workflows/extension-vscode-e2e.yml. Run locally:
cargo build -p strixonomy-lsp --bins
cd extension && npm ci && npm run compile && npm run test:vscode
See Debugging guide for LSP, extension host, and webview workflows.
Full extension packaging (bundles LSP for current platform):
./scripts/package-extension.sh
Golden and fixture snapshots¶
Some tests compare output to committed snapshots. To update (env var names retain the legacy ONTOINDEX_* prefix):
# SQL/query golden snapshots (tests/golden/snapshots/)
ONTOINDEX_UPDATE_GOLDEN=1 cargo test golden_classes
# Extension catalog fixture snapshot
ONTOINDEX_UPDATE_FIXTURE_SNAPSHOT=1 cargo test -p strixonomy --test fixture_snapshot
Review the diffs before committing.
Examples¶
cargo run -p strixonomy --example index_and_query
cargo run -p strixonomy --example strixonomy_workspace
cargo run -p strixonomy --example workspace_operations
cargo run -p strixonomy --example semantic_diff
See Examples index for all runnable assets.
Documentation site (MkDocs / Read the Docs)¶
pip install -r docs/requirements.txt # Python 3.12 in CI
./scripts/serve-docs.sh
./scripts/build-docs.sh # CI-equivalent; must pass with no warnings
./scripts/check-doc-versions.sh # README / RTD / extension version sync
# ENABLE_GIT_REVISION_DATE=true ./scripts/build-docs.sh # optional: RTD-like stamps (slow)
Local/CI builds skip git-revision-date-localized for speed; Read the Docs still publishes page stamps. Open http://127.0.0.1:8000. Configuration: mkdocs.yml on GitHub, .readthedocs.yaml on GitHub.
Full local CI (recommended before PR)¶
Script index: scripts/README.md on GitHub.
Mirrors .github/workflows/ci.yml on GitHub plus VS Code e2e for your platform:
./scripts/run-ci-local.sh
This runs rustfmt, ./scripts/check-doc-versions.sh, clippy, workspace tests, MSRV (1.88), CLI smoke, release build, LSP smoke tests, webview-ui tests, extension build/tests, cargo audit, crate packaging dry-run, mkdocs strict build, and VS Code extension e2e. Expect 30+ minutes on a cold build. Not required for docs-only PRs — see the testing matrix.
Pull requests¶
- Fork and branch from
main. - Keep changes focused; match existing style and naming.
- Run the scoped checks from the testing matrix (docs-only PRs do not need
cargo test --workspace). - Update docs when behavior or public API changes (
README.md,docs/,CHANGELOG.mdas appropriate). On release, follow the checklist in releasing.md. Keep root/docs/mirrors in sync where the mirror policy applies. - For spec changes, label whether they describe implemented vs planned behavior (see lsp-api.md as a model).
Documentation conventions¶
| Audience | Where to write |
|---|---|
| New users (install, SQL, LSP) | docs/ |
| Product vision / platform roadmap | docs/vision.md / docs/roadmap.md (root files are pointers) |
| Product & platform ADRs | docs/adr/ |
| Engineering ADRs (crate/design decisions) | docs/design/adr/ (do not add a top-level adrs/ folder) |
| Engineering specs / dependency matrix | docs/design/ |
| Extension settings and commands | extension/README.md |
Mirror policy: Root VISION.md, ARCHITECTURE.md, ROADMAP.md, and CONTRIBUTING.md are pointers to docs/ (edit the docs copies). SECURITY.md is canonical at the repo root; docs/security.md is a stub. CHANGELOG.md remains mirrored to docs/changelog.md (summaries). Run ./scripts/check-doc-versions.sh before PRs.
Adding dependencies¶
Before adding a Rust crate dependency:
- Check DEPENDENCY_MATRIX.md — prefer listed crates over new alternatives.
- Follow ADR-0016 —
strixonomy-*crates are facades, not reimplementations. - Update DEPENDENCY_MATRIX and LICENSES.md if the crate is new or uses a non-MIT/Apache license.
- Pin in workspace
[workspace.dependencies]in rootCargo.toml.
Code of conduct¶
See CODE_OF_CONDUCT.md.
Security¶
Report vulnerabilities per SECURITY.md — please do not open public issues for security reports.