# Development ## Prerequisites - Go 1.26.2 (pinned in `mise.toml`) - `mise` (https://mise.jdx.dev) — run `mise install` to install toolchain ## Build ```bash go build ./... go build -o mygo . ``` ## Test ```bash go test ./... go test -v -run TestName ./internal/... ``` ## Lint & Format ```bash go vet ./... go fmt ./... ``` ## Repository Review Use the repository-scoped `$mygo-api-repo-review` skill for evidence-based architecture, design, security, resilience, data-consistency, performance, and implementation audits. Reviews are read-only unless fixes are requested separately. Select one review mode: - `diff` compares the current workspace, including relevant untracked files, with `HEAD`. - `main` compares the current workspace with the merge base of `HEAD` and the local `main` branch without fetching remote refs. - `full` reviews the current repository as a whole. Optionally limit any mode to a target path, Go package, or logical component. For example: ```text Use $mygo-api-repo-review in main mode with target internal/storage. ``` ## Dependencies ```bash go mod tidy # after adding/removing imports ``` ## Config Server config is loaded via viper from `config.yaml` (defaults in `internal/config/load.go`). ```yaml server: host: 0.0.0.0 port: 10086 database: driver: sqlite3 sqlite: path: data/mygo.db storage: driver: local local: path: data/files jwt: secret: dev-secret-do-not-use-in-production access_ttl: 15m refresh_ttl: 168h ``` Environment variables use `MYGO_` prefix with underscore separators: `MYGO_SERVER_PORT=8080`, `MYGO_JWT_SECRET=...` The default JWT secret is a development placeholder. At startup, MyGO replaces it with an ephemeral runtime secret; set a stable `jwt.secret` or `MYGO_JWT_SECRET` when tokens must survive restarts or when running multiple instances.