Always use progressive, atomic commits (see CONTRIBUTING.md):
- One logical change per commit.
- Every commit must leave the project green and cherry-pickable — install/build/test (and CI) should pass if that commit alone is applied on the default branch.
- Do not mix unrelated work or land half-finished changes that break the pipeline mid-series.
- Prefer a sequence of small commits over one large commit.
- Commit messages in English, using Conventional Commits (
feat,fix,docs,chore,refactor,test,ci, …).
- Always squash merge PRs:
gh pr merge <N> --squash. - Do not use
--mergeor--rebaseunless a maintainer explicitly asks for an exception. - Prefer an English Conventional Commits subject for the squash commit message.
- Before merge: assign
cursoragentwhen assignable, otherwisejimmyandrade, and ensure at least one meaningful label. Never merge without both.
- Create and edit GitHub issues in English (title and body). Do not open new issues in Portuguese.
- Prefer Conventional Commit-style titles when helpful (
ci: …,docs: …,feat: …).
When implementing a GitHub issue, always:
- Read the full issue (scope checklists, acceptance criteria, notes) before coding.
- After implementation finishes, update the issue body:
- Mark completed items with
- [x]. - Leave unfinished items unchecked and note what is still pending.
- Mirror the same for acceptance criteria.
- Mark completed items with
- Comment with a short summary of what shipped and follow-ups (English).
- Close only when acceptance criteria are satisfied; otherwise leave open (or reopen) with remaining items clear.
Whenever you encounter an error while installing, building, developing, testing, or deploying this project:
- Check
TROUBLESHOOTING.mdfor an existing entry first. - If the error is new, add a section to
TROUBLESHOOTING.mdfollowing the same format as the existing entries:- A short heading describing the failure
- When/how it appears (command + terminal excerpt)
- Numbered recovery steps that worked (or the best known workaround)
- Prefer documenting durable fixes over one-off environment hacks, but record workarounds when that is all that unblocks the task.
- Do this in the same session you hit the error — do not wait to be asked.
- For dependency-only PRs (especially Renovate), regenerate
package-lock.jsonwith Node 18 andnpm install --legacy-peer-depswhen Renovate reports an artifact update problem. - Keep GitHub Actions Node CI on Node 18 (not 10/12) for this stack; use
npm ci --legacy-peer-deps. - Dependency bumps with no application source changes usually do not need new unit tests; still run the full existing suite before merge.
We maintain / have access to muy/muy. Whenever a bug or limitation in muy forces a local workaround or fix in this repo:
- Ship the consumer-side fix here if needed (with tests).
- Always open an upstream issue + PR on
muy/muythat fixes the root cause (even when the local workaround already unblocks us). - Cross-link the multei/web and muy issues/PRs.
- Follow existing
muypatterns underpackages/muy/lib/(e.g. useclsxfor optionalclassNamevalues).