Баг 5 из перевода cars-system 07.10 и имя образа. Не сливать без решения человека.
.env и $env/static/public
.dockerignore резал .env — сборка не видела PUBLIC_*, и всё, что импортирует $env/static/public, падало на vite build (проверено: со старым .dockerignoredocker build падает, с новым — проходит). Но и просто пустить .env в контекст нельзя: у адаптера bun Dockerfile был одностадийный, COPY . . унёс бы .env в итоговый образ.
Теперь:
.dockerignore пропускает .env (.env.* — локальные переопределения — по-прежнему нет);
Dockerfile для bun — в три стадии, как уже был у static: deps → builder (тут .env) → runtime с build/ и bun install --production.
Проверено docker build на отрендеренном проекте (bun, root): PUBLIC_GREETING из .env вшит в чанки, .env в итоговом образе нет, контейнер отвечает 200.
В layout part контекст сборки — frontend/, значит $env/static/* читаются из frontend/.env, а не из корневого .env. Единый корневой .env (вариант A) не трогал.
Линтер: biome или eslint
Шаблон умел только biome/ultracite; cars-system живёт на eslint + prettier. Новый вопрос linter (по умолчанию biome — существующие проекты при copier update не меняются):
biome — как было;
eslint — конфиг sv create (eslint 10, typescript-eslint, eslint-plugin-svelte, prettier с плагинами svelte и tailwind), .prettierignore не трогает файлы copier/infra. Скрипты fix/lint те же по имени — Makefile и хук Claude не меняются.
prettier-plugin-tailwindcss и biome сортируют классы по-разному, а исходники шаблона написаны под biome — поэтому eslint-проект один раз прогоняет bun run fix сразу после генерации (задача copier, если install_deps). Проверено в контейнере oven/bun: оба варианта после генерации проходят bun run lint и svelte-check с нулём ошибок.
Имя образа
<slug с дефисами>/frontend, как в backend-python (см. тот PR).
Вопрос: убирать ли make pre-deploy / post-deploy и штампы refs/deploy/*
Прод флота теперь деплоит infra/komodo (git-режим Komodo: слой compose.fleet.yml, deploy.sh, sops в каталоге стека, теги образов по хэшу). Эти цели на проде больше не нужны, и именно в них жили баги 1–2. Но их ещё зовут стеки на files_on_host (сверено по fleet/**/stack.toml 08.10):
make pre-deploy + make post-deploy: hubmi, ai-lawyer, factory-record;
только make pre-deploy: superteam, lodge;
stealth-server / stealth-solutions их не используют.
Если цели убрать из шаблона, copier update в этих репах удалит их из Makefile, и следующий деплой стека упадёт на make: *** No rule to make target 'pre-deploy'.
Рекомендация: в этом PR цели оставить (баги в них починены, README говорит, что они для чекаута, развёрнутого руками). Убрать отдельным PR во всех шаблонах сразу (backend-python, frontend-svelte, blank, корневой Makefile infra), когда последний из этих пяти стеков переедет в git-режим. ai-lawyer, factory-record, lodge уже подготовлены (stack.toml.next), hubmi и superteam ждут решения по репам в Gitea.
Баг 5 из перевода cars-system 07.10 и имя образа. **Не сливать без решения человека.**
## `.env` и `$env/static/public`
`.dockerignore` резал `.env` — сборка не видела `PUBLIC_*`, и всё, что импортирует `$env/static/public`, падало на `vite build` (проверено: со старым `.dockerignore` `docker build` падает, с новым — проходит). Но и просто пустить `.env` в контекст нельзя: у адаптера bun Dockerfile был одностадийный, `COPY . .` унёс бы `.env` в итоговый образ.
Теперь:
- `.dockerignore` пропускает `.env` (`.env.*` — локальные переопределения — по-прежнему нет);
- Dockerfile для bun — в три стадии, как уже был у static: `deps` → `builder` (тут `.env`) → `runtime` с `build/` и `bun install --production`.
Проверено `docker build` на отрендеренном проекте (bun, root): `PUBLIC_GREETING` из `.env` вшит в чанки, `.env` в итоговом образе нет, контейнер отвечает 200.
В layout `part` контекст сборки — `frontend/`, значит `$env/static/*` читаются из `frontend/.env`, а не из корневого `.env`. Единый корневой `.env` (вариант A) не трогал.
## Линтер: biome или eslint
Шаблон умел только biome/ultracite; cars-system живёт на eslint + prettier. Новый вопрос `linter` (по умолчанию `biome` — существующие проекты при `copier update` не меняются):
- `biome` — как было;
- `eslint` — конфиг `sv create` (eslint 10, typescript-eslint, eslint-plugin-svelte, prettier с плагинами svelte и tailwind), `.prettierignore` не трогает файлы copier/infra. Скрипты `fix`/`lint` те же по имени — Makefile и хук Claude не меняются.
prettier-plugin-tailwindcss и biome сортируют классы по-разному, а исходники шаблона написаны под biome — поэтому eslint-проект один раз прогоняет `bun run fix` сразу после генерации (задача copier, если `install_deps`). Проверено в контейнере `oven/bun`: оба варианта после генерации проходят `bun run lint` и `svelte-check` с нулём ошибок.
## Имя образа
`<slug с дефисами>/frontend`, как в `backend-python` (см. тот PR).
## Вопрос: убирать ли `make pre-deploy` / `post-deploy` и штампы `refs/deploy/*`
Прод флота теперь деплоит `infra/komodo` (git-режим Komodo: слой `compose.fleet.yml`, `deploy.sh`, sops в каталоге стека, теги образов по хэшу). Эти цели на проде больше не нужны, и именно в них жили баги 1–2. Но их ещё зовут стеки на `files_on_host` (сверено по `fleet/**/stack.toml` 08.10):
- `make pre-deploy` + `make post-deploy`: **hubmi**, **ai-lawyer**, **factory-record**;
- только `make pre-deploy`: **superteam**, **lodge**;
- stealth-server / stealth-solutions их не используют.
Если цели убрать из шаблона, `copier update` в этих репах удалит их из Makefile, и следующий деплой стека упадёт на `make: *** No rule to make target 'pre-deploy'`.
**Рекомендация:** в этом PR цели оставить (баги в них починены, README говорит, что они для чекаута, развёрнутого руками). Убрать отдельным PR во всех шаблонах сразу (`backend-python`, `frontend-svelte`, `blank`, корневой Makefile `infra`), когда последний из этих пяти стеков переедет в git-режим. ai-lawyer, factory-record, lodge уже подготовлены (`stack.toml.next`), hubmi и superteam ждут решения по репам в Gitea.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Баг 5 из перевода cars-system 07.10 и имя образа. Не сливать без решения человека.
.envи$env/static/public.dockerignoreрезал.env— сборка не виделаPUBLIC_*, и всё, что импортирует$env/static/public, падало наvite build(проверено: со старым.dockerignoredocker buildпадает, с новым — проходит). Но и просто пустить.envв контекст нельзя: у адаптера bun Dockerfile был одностадийный,COPY . .унёс бы.envв итоговый образ.Теперь:
.dockerignoreпропускает.env(.env.*— локальные переопределения — по-прежнему нет);deps→builder(тут.env) →runtimeсbuild/иbun install --production.Проверено
docker buildна отрендеренном проекте (bun, root):PUBLIC_GREETINGиз.envвшит в чанки,.envв итоговом образе нет, контейнер отвечает 200.В layout
partконтекст сборки —frontend/, значит$env/static/*читаются изfrontend/.env, а не из корневого.env. Единый корневой.env(вариант A) не трогал.Линтер: biome или eslint
Шаблон умел только biome/ultracite; cars-system живёт на eslint + prettier. Новый вопрос
linter(по умолчаниюbiome— существующие проекты приcopier updateне меняются):biome— как было;eslint— конфигsv create(eslint 10, typescript-eslint, eslint-plugin-svelte, prettier с плагинами svelte и tailwind),.prettierignoreне трогает файлы copier/infra. Скриптыfix/lintте же по имени — Makefile и хук Claude не меняются.prettier-plugin-tailwindcss и biome сортируют классы по-разному, а исходники шаблона написаны под biome — поэтому eslint-проект один раз прогоняет
bun run fixсразу после генерации (задача copier, еслиinstall_deps). Проверено в контейнереoven/bun: оба варианта после генерации проходятbun run lintиsvelte-checkс нулём ошибок.Имя образа
<slug с дефисами>/frontend, как вbackend-python(см. тот PR).Вопрос: убирать ли
make pre-deploy/post-deployи штампыrefs/deploy/*Прод флота теперь деплоит
infra/komodo(git-режим Komodo: слойcompose.fleet.yml,deploy.sh, sops в каталоге стека, теги образов по хэшу). Эти цели на проде больше не нужны, и именно в них жили баги 1–2. Но их ещё зовут стеки наfiles_on_host(сверено поfleet/**/stack.toml08.10):make pre-deploy+make post-deploy: hubmi, ai-lawyer, factory-record;make pre-deploy: superteam, lodge;Если цели убрать из шаблона,
copier updateв этих репах удалит их из Makefile, и следующий деплой стека упадёт наmake: *** No rule to make target 'pre-deploy'.Рекомендация: в этом PR цели оставить (баги в них починены, README говорит, что они для чекаута, развёрнутого руками). Убрать отдельным PR во всех шаблонах сразу (
backend-python,frontend-svelte,blank, корневой Makefileinfra), когда последний из этих пяти стеков переедет в git-режим. ai-lawyer, factory-record, lodge уже подготовлены (stack.toml.next), hubmi и superteam ждут решения по репам в Gitea.🤖 Generated with Claude Code