Skip to content

Contributing ​

In Falcone is developed test-first against real backends, with spec-driven changes. This page summarizes the workflow encoded in the repository tooling.

Local development ​

Bring up the real backends with docker-compose and run the suites against them:

bash
cd tests/env && docker compose up -d      # Postgres, FerretDB + DocumentDB, Keycloak, Redpanda, SeaweedFS, OpenBao, APISIX

This compose stack is for development and test backends. The supported platform installation paths are kind Quickstart, Kubernetes Install, and OpenShift Install.

Test suites ​

CommandWhat it runs
npm run test:unitUnit tests
npm run test:adaptersAdapter (plan-builder) tests
npm run test:contractsAPI/OpenAPI contract tests
npm run test:e2e:console / :deployment / :observability / :workflowsE2E families
npm run test:e2e:realtimeRealtime (needs the FerretDB + DocumentDB document store with wal_level=logical for the logical-replication slot)
npm run test:e2e:restoreTenant backup/restore workflows
npm run test:resilienceResilience tests

The black-box contract suite is the gate before declaring work done; realtime and RLS behaviours are only meaningfully testable against the real compose stack (RLS does not apply to superusers, so it can't be exercised in-memory).

Linting & validation ​

bash
npm run lint        # validate:repo + lint:md + validate:openapi

validate:repo runs a battery of structural/contract validators (domain model, public API, gateway policy, deployment chart/topology, authorization model, and the observability-* schema checks). CI runs lint plus the unit/adapter/contract suites in its quality job.

Spec-driven changes ​

Every bug fix or feature starts from a written spec delta, following propose → apply → verify → archive.

Work test-first: a failing black-box test reproduces a bug (or covers a scenario) before the fix; never edit tests just to make them pass.

TIP

Generated change proposals can drift from the code — verify route paths against public-route-catalog.json and event-schema reuse before implementing a backlog change.

Conventions ​

  • Repo-facing artifacts (specs, issues, tests, comments) are in English.
  • Tenant isolation is the cardinal concern: every data path must be tenant-scoped, and tenancy-sensitive changes should include cross-tenant probes.
  • Keep CI green; don't expose secrets (even provider-shaped fixtures get push-rejected).

Documentation ​

This site is a VitePress project under docs-site/. Preview locally:

bash
cd docs-site
pnpm install
pnpm dev          # local preview
pnpm build        # production build (what CI publishes)

It is published to GitHub Pages by .github/workflows/deploy-docs.yml on every push to main that touches docs-site/.

Released under the MIT License.