Workflow
Basic change flow
The checks you need depend on the change, but the basic approach is to verify a small scope first and widen it at the end.
Diagram source
flowchart TD
Change["Change the code"]
Focus["Target package test / typecheck"]
Related["Check related integrations / site"]
Check["pnpm check"]
Build["pnpm build"]
Change --> Focus
Focus --> Related
Related --> Check
Check --> Build
For example, if you change a plugin, run that plugin's tests first:
pnpm --filter <plugin-package> test
If that passes, run type checking or check the reference app as needed, and finally run the repository-wide checks. You do not need to run the heaviest command from scratch on every change.
Where to make the change
When adding a feature, first pick the package that matches the responsibility.
Diagram source
flowchart TD
Q{"What are you changing?"}
Q -->|"Shared content / contract"| Core["packages/core"]
Q -->|"CLI command"| CLI["packages/cli"]
Q -->|"Reusable feature"| Plugin["packages/plugins/*"]
Q -->|"HonoX / Vite connection"| Integration["packages/integrations/honox"]
Q -->|"Appearance / CSS"| Theme["packages/themes/*"]
Q -->|"Route / island / site UI"| App["website"]
Q -->|"Site generation"| Scaffold["create-riebeckite / scaffold"]
If you are unsure, use the responsibility boundaries in Architecture as the standard.
Before adding a new public API or a new Core behavior, use the Design Decision Guidelines in Design Philosophy.
Decide what to record
Before opening a pull request, answer these questions:
- Is an ADR needed? Yes for a public contract change, an architecture boundary change, an intentional exception to a principle, a security or publication exception, or a release policy change. See Architecture Decision Records.
- Is a change entry needed? Yes when someone who installs a Riebeckite package can observe the change. Add it under
changes/unreleased/and runpnpm changelog. - Is it a breaking change? If users must change code or configuration, set
breaking: trueand write migration steps. Before 1.0, a minor release may carry the change; after 1.0 it needs a major release. - Is a migration guide needed? Yes when the migration is longer than a few steps. Link it from the entry and the release notes.
- Does it conflict with Design Philosophy? If it is an intentional exception, record the ADR. If it is accidental, change the implementation.
Do not add an ADR or change entry for an ordinary internal fix. CI validates the format of entries and generated files, not whether a change needed one.
Package boundaries
When changing the framework, keep the dependency direction between packages intact. The rough dependency relationship is:
Diagram source
flowchart BT
App["Application"]
Integration["Integration"]
Plugin["Plugin"]
Theme["Theme"]
CLI["CLI"]
Core["Core"]
App --> Integration
Integration --> Core
Plugin --> Core
Theme --> Core
CLI --> Core
CLI --> Integration
In particular, do not create a reverse dependency from Core to the outside. For example, Core must not depend on concrete implementations such as:
website
packages/plugins/*
HonoX
Vite
Put framework-independent contracts in Core, and have integrations and plugins use those contracts.