Engineering workflows for this repo.
- Read
AGENTS.mdandARCHITECTURE.md - Read the relevant feature doc in
docs/features/ - For non-trivial changes, create a plan in
docs/exec-plans/active/ - Implement the smallest coherent change
- Add or update tests
- Run:
pnpm lint && pnpm lint:api && pnpm test:api && pnpm check:structure - Update docs in the same PR (see AGENTS.md §8)
- Move plan to
docs/exec-plans/completed/after validation
- Add a failing test that reproduces the bug
- Confirm the test fails
- Implement the fix
- Rerun tests until green
- Update docs if behavior changed
- Read
ARCHITECTURE.md— respect layering rules - Ensure structural tests still pass:
pnpm check:structure - No behavior changes without updating feature docs
- Update only the canonical location (see AGENTS.md §8 doc update mapping)
- Never duplicate content — link instead
- Update
<!-- last_verified: YYYY-MM-DD -->header
- One coherent change per PR
- Run full lint + test suite before submitting
- Docs updated in the same PR as code changes
- Only change files relevant to the task — no drive-by improvements
- Unit: pure logic (service layer)
- Integration: HTTP handlers, B2 connectivity (
tests/) - Structural: layering rules, import boundaries (
tests/test_structure.py) - E2E: Playwright browser-driven smoke tests
- Backend:
services/api/tests/ - E2E: project root (Playwright)
- Quick (backend):
pnpm test:api - Structure:
pnpm check:structure - Frontend lint:
pnpm lint - Backend lint:
pnpm lint:api - Full suite:
pnpm lint && pnpm lint:api && pnpm test:api && pnpm check:structure - E2E:
pnpm test:e2e
- After behavior change: run relevant subset
- Before PR: run full suite
- Tailwind v4: config via CSS
@themeblocks, NOTtailwind.config.ts - Colors: OKLch format
- Dark mode:
next-themeswith@custom-variant dark (&:is(.dark *)) - Animations:
tw-animate-css(nottailwindcss-animate) - shadcn/ui components in
src/components/ui/are generated — never modify them