Glint is Shipfox's visual regression platform. The repository architecture and delivery plan
live in docs/system-design.md.
The approved MVP providers, runtime, local substitutes, cost envelope, and safety limits are in
docs/decisions and
docs/deployment/reference-topology.md.
Install mise, then prepare and verify a fresh checkout:
mise install
mise run bootstrap
mise run verifyThe individual build, check, type, type:emit, test, and depcruise tasks are also
available through mise run <task>. Package scripts remain independently runnable through
pnpm as packages land.
See CONTRIBUTING.md for the required pull-request checks, the migration database gate, and worker-image validation.
One command builds the four composition roots, starts PostgreSQL and Garage, creates the private local bucket, runs migrations once, and runs the API, worker, and web together in the foreground:
mise run local:startNo cloud credentials are required. The local defaults are web 3000, API 3001, worker health
3002, PostgreSQL 5432, and Garage S3 3900. In Conductor, the command uses CONDUCTOR_PORT
through CONDUCTOR_PORT+4, so multiple workspaces can run concurrently. Garage's internal RPC and
admin ports receive ephemeral host bindings. The
API and worker construct PostgreSQL, S3-compatible object-store, in-memory queue, configuration,
and observability adapters at their entrypoints. No domain behavior lives in an app.
Because E0 has no job producers or consumers, the local queue intentionally stays in-process. Add
a shared local backend with the first cross-process job and an end-to-end delivery test.
Use the lifecycle commands to exercise or clean up the environment:
mise run local:test # migrations plus API, worker, and web health/readiness
mise run local:stop # stop dependency containers, preserving their volumes
mise run local:reset # stop containers and delete local volumesStop the foreground apps with Ctrl-C or Conductor's Stop button, then use local:stop when the
dependency containers are no longer needed. Override individual ports with GLINT_WEB_PORT,
GLINT_API_PORT, GLINT_WORKER_PORT, GLINT_POSTGRES_PORT, and GLINT_GARAGE_S3_PORT when
needed.
The root compose.yml also remains usable for dependency-only development. With PostgreSQL
running, mise run database:test exercises the real transaction, migration, outbox, accounts
persistence, and RLS contracts.
Start a real package from one of the eight shapes in templates/packages. The templates encode package type and runtime metadata, root-only development/default exports, internal #* aliases, and a package-local depcruise task. They are excluded from the workspace so future features are not scaffolded before they own behavior.
mise run depcruise checks both the workspace manifest graph and every package-local source graph. The shared policy rejects the ten forbidden dependency directions documented in the system design, deep imports that bypass package exports, and cycles. mise run verify also runs the architecture fixture tests.