Thanks for considering contributing to Powernode! This document covers how to get involved — filing issues, submitting changes, and the conventions we follow.
This project adheres to the Contributor Covenant Code of Conduct. By participating, you're expected to uphold this code. Report unacceptable behavior by opening a private GitHub Security Advisory on this repository (Settings → Security → Report a vulnerability — works for conduct issues too) or via GitHub Discussions for non-sensitive matters.
- Read
CLAUDE.md— it covers the architecture, conventions, MCP-first workflow, and platform organization. The file is named for the AI assistant we use during development, but the conventions apply to all contributors. - Follow setup in
README.mdfor installing dependencies and running the platform locally. - Set up extension frontend symlinks (one-time, after
cd frontend && npm install):This creates./scripts/setup-extension-frontend-symlinks.sh
extensions/<ext>/frontend/node_modulessymlinks to the parent'sfrontend/node_modulesso extension Jest tests can resolve dependencies. The symlinks are gitignored; the script is idempotent. - Run the test suite to confirm your environment works:
cd server && bundle exec rspec --format progress cd frontend && CI=true npm test
server/— Rails 8 API backendfrontend/— React 19 / TypeScript frontendworker/— Standalone Sidekiq worker (HTTP-only API to server, never imports server code)extensions/— Optional feature extensions:business(billing/SaaS),marketing(campaigns/landing pages),system(fleet/edge),supply-chain(SBOM/attestations)docs/— Architecture, feature, and platform documentationscripts/— Build, validation, and utility scripts
Use the appropriate template:
- Bug reports — for things that are broken (use the bug report template)
- Feature requests — for proposals (new capability, integration, or workflow)
- Deployment / self-hosting help — for setup and core-mode questions (use the deployment help template)
- Security issues — DO NOT file as public issues. Open a private GitHub Security Advisory with details; see SECURITY.md for our response targets and coordinated-disclosure process.
When filing a bug or feature request, identify the affected stability tier (see docs/STABILITY.md) — it helps us route and prioritize.
Please search existing issues first to avoid duplicates.
- Fork the repo and create a feature branch from
develop:git checkout -b feature/your-change-name develop
- Branch strategy: PRs target
develop. The release flow isdevelop → release/x.y.z → master. - Make focused changes: one PR = one logical change. Smaller PRs review faster and ship sooner.
- Follow the conventions documented in
CLAUDE.md. Highlights:- Frontend permissions:
currentUser?.permissions?.includes('name')— NEVER check roles - Theme classes only:
bg-theme-*,text-theme-*— no hardcoded colors - API responses:
render_success()/render_error()— never barerender - Ruby pragma:
# frozen_string_literal: trueon every.rbfile - Frontend logging:
import { logger } from '@/shared/utils/logger'— noconsole.login production code - TypeScript: no
anytypes — proper types required
- Frontend permissions:
- Add tests for new behavior:
- Backend:
spec/(RSpec) — see existing patterns inspec/factories/,spec/support/ - Frontend:
*.test.tsx(Jest) — see existing component tests - E2E:
e2e/(Playwright) — seee2e/pages/for page objects
- Backend:
- Run validation before pushing:
Or for a quicker subset:
./scripts/validate.sh
./scripts/validate.sh --skip-tests - Commit messages:
type(scope): subject— e.g.,feat(marketing): add waitlist signup endpoint. See recentgit log --onelinefor style. - No AI-assistant attribution in commit messages (no "Co-Authored-By: Claude", etc.) — keep them clean.
- Bug fixes (especially with regression tests)
- Documentation improvements
- New extensions (see
extensions/for shape —system,marketing,business) - Integration adapters: Claude Agent SDK, LangGraph, Mastra, OpenAI Agents SDK, AutoGen, Vercel AI SDK
- Performance improvements with measurements
- Test coverage in under-tested areas (the
extensions/private/business/spec/directory in particular) - Accessibility improvements with
data-testidand ARIA labels
- Cosmetic refactors without functional change
- Style-only PRs that fight existing patterns
- Breaking changes without prior issue discussion
- Auto-generated content (typo-fix bots, dependency-update spam unrelated to security)
- License changes (we're staying MIT — see
LICENSE)
- Read
CLAUDE.mdfor the full MCP-first workflow if you're using AI assistance - Run
cd frontend && npx tsc --noEmitafter TypeScript changes - Run
cd server && bundle exec rspec spec/path/to/relevant_spec.rbfor targeted backend specs - Never run the full RSpec suite — only changed-file specs (the suite is large and slow)
- Use
./scripts/validate.shas a pre-push checklist
Local services run via systemd. After installing:
sudo scripts/systemd/powernode-installer.sh install
sudo systemctl start powernode.targetThen journalctl -u powernode-backend@default -f to tail logs.
Never use manual commands (rails server, sidekiq, npm start) for production workflows — they bypass the health-check infrastructure.
- GitHub Issues — best for bugs and feature requests
- GitHub Discussions — best for design questions, ideas, "is this approach right?"
- GitHub Security Advisories — for private questions or security reports
Powernode's docs follow a few clear rules. See docs/contributing/doc-conventions.md for the full reference.
- Auto-generated docs live in
docs/reference/auto/and carry an<!-- AUTO-GENERATED -->header. Never edit them — they are regenerated from platform data. - Active docs end with a
_Last verified: YYYY-MM-DD_footer. - Diagrams use Mermaid fenced code blocks, not ASCII or SVG.
- Links are relative and resolve on disk (see
docs/.verify/check-links.shonce wired in Wave 4). - Counts (number of tools, tables, etc.) link to the live source (
docs/reference/auto/mcp-tools.md) — never inline.
Contributions to the public repositories are made under the MIT License — inbound = outbound, the GitHub default. You keep full ownership of your work, and no separate contributor agreement is required. Powernode follows an open-core model: the platform and its public extensions (system, supply-chain, marketing) are MIT-licensed and always will be, while the separate commercial business extension is maintained privately by Node Alchemy LLC and does not accept external contributions.
Thanks for being part of Powernode!