dev-env-setuplisted
Install: claude install-skill mickzijdel/dev-hooks
# dev-env-setup
Bring a repo up to **an opinionated dev-environment standard** and keep it there. It covers
both Python and Rails (Ruby) project types.
## The standard (v25)
A repo is **compliant at v25** when it has all of:
- **`mise.toml`** — tools pinned (`hk`, `pkl`, stack tool, `gitleaks`, `zizmor`, `actionlint`,
`node` for jscpd), `[settings] lockfile = true` and `minimum_release_age = "4d"`, and the
`[env]` version stamp `DEV_ENV_VERSION = "25"`.
- **`mise.lock`** (committed) — reproducible, checksum-verified tool installs. See "Lockfile &
supply-chain verification".
- **`.jscpd.json`** — duplication config (`minTokens 70`, `threshold 0`, path excludes under
`ignore` — never `ignorePattern`, inert in jscpd v5).
- **`scripts/run-jscpd.sh`** (added in v14) — the shared jscpd runner holding the
version-cooldown policy; both the hk step and CI's audit job call it (CI with `--require`)
so the two gates can't drift. Copied verbatim from the template (repo formatters may re-indent it; never hand-edit the logic).
- **`scripts/check_version_sync.sh`** (added in v23) — the shared version-pin agreement gate:
every file naming a toolchain or service version (`mise.toml`, the `.<lang>-version` files, the
Dockerfile `ARG`s, `package.json`'s `packageManager`, and the compose/deploy/CI `image:` tags)
must name the same one. Both the hk `versions` step and CI's `versions` job run it. It checks
only the files that exist and prints what it skipped, reports rather