| kind | operations |
|---|
Run the day-to-day checks, database tasks and local services while the stack is up.
- A running local stack from the Quickstart.
-
Type-check, lint and format per workspace (swap
@opsiforce/backendfor@opsiforce/frontend). Opsiforce uses the OXC toolchain, oxlint and oxfmt, configured in.oxlintrc.jsonand.oxfmtrc.json:yarn workspace @opsiforce/backend run ts # tsc type-check yarn workspace @opsiforce/backend run lint # one pass: safe autofixes, errors fail, warnings advisory yarn workspace @opsiforce/backend run format # oxfmt rewrite (append --check for a dry run) yarn workspace @opsiforce/backend run check # lint && ts, the pre-commit gate yarn workspace @opsiforce/backend run test # Vitest; needs Docker
The backend lint runs type-aware rules plus the
node,importandpromiseplugins; the frontend runsjsx-a11yplus Solid and solid-query rules fromfrontend/oxlint.config.ts. The vendoredfrontend/opencode/tree is excluded. The test suite is described in Testing. -
Database tasks, always with a meaningful
--namefor a migration (add-session-id-to-projects, notupdate):yarn workspace @opsiforce/backend run db:generate --name <meaningful-name> yarn workspace @opsiforce/backend run db:migrate yarn workspace @opsiforce/backend run db:studio # Drizzle Studio on localhost:4983
-
Call the backend directly through the Tilt port-forward, for example
curl http://localhost:3010/api/healthor/api/projects. -
Reach local services at these addresses:
Service URL / Port Opsiforce app (via Traefik) https://opsiforce.localtest.meApp / VS Code / DB per environment https://{env}.{apps,code,db}.opsiforce.localtest.meBifrost dashboard · Tilt UI https://{bifrost,tilt}.opsiforce.localtest.meBackend (Tilt port-forward) · Node debug localhost:3010·:9229Frontend (Vite HMR) localhost:8084PostgreSQL · Redis · Keycloak localhost:5435·6382·8086Drizzle Studio · Mailgun mock localhost:4983·8089 -
Local environment notes:
backend/local-envs.shandfrontend/local-envs.shhold local bootstrap variables;OPENAI_API_KEYandANTHROPIC_API_KEYare optional locally, and without them the Bifrost provider secrets are created empty; local dev builds the agent image into minikube withAGENT_CONTAINER_IMAGE_PULL_POLICY=Neverwhile production usesAlways.
yarn workspace @opsiforce/backend run checkand the frontend equivalent pass.curl http://localhost:3010/api/healthanswers.