- OFF_SPEC_CEILING (45) caps OFF_SPEC_CALLS; the contract test fails if it grows. - Vendor the qqq-esb extension document (extensions/esb.json, 1.0.0): the five ESB calls are now spec'd and leave the off-spec list. - CODEOWNERS on src/lib/api/openapi/; CONTRIBUTING documents the merge order (extension, then vendored document, then UI). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.4 KiB
Contributing
Branching: trunk-based on main
main is the only long-lived branch. There is no develop, release/* or hotfix/* branch.
- Branch from the current
main(feature/...,fix/...,docs/...,chore/...). - Keep the branch current by merging
maininto it; do not rebase or force-push a branch that is under review. - Open a pull request into
main. Every commit must be signed. - A pull request merges when the required checks pass and the code owner approves. Head branches are deleted automatically after the merge.
Required checks
| Check | Source |
|---|---|
Typecheck, lint, unit tests and coverage |
.github/workflows/ci.yml |
Mocked e2e (Playwright, chromium) |
.github/workflows/ci.yml |
Bundle budget (static export) |
.github/workflows/ci.yml |
Storybook build |
.github/workflows/ci.yml |
ci/circleci: qqq-orb/node_app_test_only |
.circleci/config.yml |
The real-backend acceptance matrix (.github/workflows/acceptance.yml) runs on every pull request
and on main. Treat a red row as a release blocker and investigate it; never re-run it until it passes.
Releases
A release is a signed v<version> tag on main (for example v1.0.0-RC.14), where package.json
and pom.xml carry that version. The tag publishes the dashboard jar to Maven Central (CircleCI
publish_dashboard_jar) and the dashboard container image (.github/workflows/dashboard-image.yml).
Release notes live in docs/releases/.
Dependencies
Dependabot opens grouped weekly updates for npm, GitHub Actions and Maven (.github/dependabot.yml),
plus security updates as they are published.
UI API calls (merge order)
Next calls the backend only through operations described in the vendored UI API documents:
src/lib/api/openapi/qqq-v1.json, plus one JSON file per extension in extensions/.
ui-api-contract.test.ts fails on any other call.
A feature that needs new backend calls lands in this order:
- The qbit or module ships the operations as a UI API extension, with spec classes and its
committed
openapi/qqq-v1/<name>.yaml. - That document is vendored here, as
extensions/<name>.jsonor a re-vendoredqqq-v1.json. - The UI PR that calls them.
OFF_SPEC_CALLS in ui-api-calls.ts is a shrinking list of calls that predate the extension point.
OFF_SPEC_CEILING caps it: lower the ceiling as entries move onto specs, and never raise it.