учёт: закрыта задача drop-dead-dotenv-loader, заведена drop-dead-entrypoint-script
This commit is contained in:
+1
-1
@@ -44,7 +44,6 @@
|
|||||||
## Очередь
|
## Очередь
|
||||||
|
|
||||||
- [🧹 Поднимать сервис для локальной работы одной командой](items/dev-run-task.md) — Локальная проверка требует ручной чистки каталога данных и остановки процесса, а владельца панели заводят по одноразовой ссылке из журнала.
|
- [🧹 Поднимать сервис для локальной работы одной командой](items/dev-run-task.md) — Локальная проверка требует ручной чистки каталога данных и остановки процесса, а владельца панели заводят по одноразовой ссылке из журнала.
|
||||||
- [🧹 Снять мёртвый godotenv.Load() вместе с зависимостью](items/drop-dead-dotenv-loader.md) — сервис на каждом старте печатает предупреждение, приглашающее завести .env, читать который некому: это вторая точка, где может завестись секрет, и путь к нарушению критического инварианта сервис подсказывает сам
|
|
||||||
- [🧹 Вынести тело подкоманды resume из main-пакета и покрыть тестом](items/devtools-resume-testable.md) — go test ./cmd/... отвечает no test files: подкоманда возврата записи в работу не проверена ничем, а тест на неё пришлось бы писать, повторяя её тело руками.
|
- [🧹 Вынести тело подкоманды resume из main-пакета и покрыть тестом](items/devtools-resume-testable.md) — go test ./cmd/... отвечает no test files: подкоманда возврата записи в работу не проверена ничем, а тест на неё пришлось бы писать, повторяя её тело руками.
|
||||||
- [🧹 Механизировать правило «internal/config не знает транспорта»](items/archrule-config-knows-no-transport.md) — правило записано конвенцией, а сканера у него нет; проект его уже нарушает — go test ./internal/config линкует всю поверхность HTTP, и будущая надобность конфига в транспорте даст цикл импорта на уровне проверок
|
- [🧹 Механизировать правило «internal/config не знает транспорта»](items/archrule-config-knows-no-transport.md) — правило записано конвенцией, а сканера у него нет; проект его уже нарушает — go test ./internal/config линкует всю поверхность HTTP, и будущая надобность конфига в транспорте даст цикл импорта на уровне проверок
|
||||||
- [✨ Сделать экран загрузки записи и её состояния](items/upload-and-status-screen.md) — Первое, ради чего приложение открывают: отдать файл и увидеть, что с ним происходит.
|
- [✨ Сделать экран загрузки записи и её состояния](items/upload-and-status-screen.md) — Первое, ради чего приложение открывают: отдать файл и увидеть, что с ним происходит.
|
||||||
@@ -113,4 +112,5 @@
|
|||||||
- [🔬 Пределы длительности, приходящей из метаданных](items/duration-bounds-from-metadata.md) — Длительность приходит от ffprobe числом и не проверяется ничем: приведение к целому переполняется, а испорченная гистограмма чинится только перезапуском.
|
- [🔬 Пределы длительности, приходящей из метаданных](items/duration-bounds-from-metadata.md) — Длительность приходит от ffprobe числом и не проверяется ничем: приведение к целому переполняется, а испорченная гистограмма чинится только перезапуском.
|
||||||
- [🧹 Проверять уязвимости в зависимостях приложения](items/npm-deps-vulnerability-scan.md) — Зависимости приложения пришли задачей spa-skeleton, а сканера у них нет: govulncheck смотрит только модули Go. Ни проверки, ни объявленного исключения — непроверенная поверхность, о которой никто не решал
|
- [🧹 Проверять уязвимости в зависимостях приложения](items/npm-deps-vulnerability-scan.md) — Зависимости приложения пришли задачей spa-skeleton, а сканера у них нет: govulncheck смотрит только модули Go. Ни проверки, ни объявленного исключения — непроверенная поверхность, о которой никто не решал
|
||||||
- [🧹 Разобрать мелочи входа по доверенному заголовку](items/test-headers-login-nits.md) — три пункта ниже потолка триажа остались от одной задачи: функция строки старта не вызвана ни одним тестом, форма записи необязательного поля конфига стала неотличима от обязательного, два комментария описывают снятую подкоманду и не то число звеньев цепочки
|
- [🧹 Разобрать мелочи входа по доверенному заголовку](items/test-headers-login-nits.md) — три пункта ниже потолка триажа остались от одной задачи: функция строки старта не вызвана ни одним тестом, форма записи необязательного поля конфига стала неотличима от обязательного, два комментария описывают снятую подкоманду и не то число звеньев цепочки
|
||||||
|
- [🧹 Снять мёртвый docker/entrypoint.sh вместе с его следами в образе](items/drop-dead-entrypoint-script.md) — Скрипт копируется в образ, линтуется шагом гейта и переназначает uid/gid из окружения, но не выполняется ни разу: ENTRYPOINT закомментирован без записанной причины, а переназначение спорит с решением от 2026-08-22 о числовом USER 1000:1000
|
||||||
- [🔬 Квота по общему размеру загруженного на пользователя](items/per-user-size-quota.md) — Паспорт и security.md запрещают отказы по квоте пользователю, а заметка владельца просит квоту по умолчанию 5 ГБ — открытое противоречие с границей домена, которое владелец решил не разбирать сейчас.
|
- [🔬 Квота по общему размеру загруженного на пользователя](items/per-user-size-quota.md) — Паспорт и security.md запрещают отказы по квоте пользователю, а заметка владельца просит квоту по умолчанию 5 ГБ — открытое противоречие с границей домена, которое владелец решил не разбирать сейчас.
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
# 🧹 Снять мёртвый godotenv.Load() вместе с зависимостью
|
|
||||||
|
|
||||||
- **Тип:** chore
|
|
||||||
- **Категория:** Очередь — Чистка старта сервиса идёт вместе с задачей о локальном запуске: обе трогают одну точку входа
|
|
||||||
- **Зачем:** сервис на каждом старте печатает предупреждение, приглашающее завести .env, читать который некому: это вторая точка, где может завестись секрет, и путь к нарушению критического инварианта сервис подсказывает сам
|
|
||||||
- **Теги:** review-2026-08-23
|
|
||||||
|
|
||||||
Настройки сервис берёт из файла конфига целиком, а переменных окружения не
|
|
||||||
читает нигде. Вызов `godotenv.Load()` остался от прежней раскладки и на каждом
|
|
||||||
старте печатает предупреждение, приглашающее завести `.env`, — то есть завести
|
|
||||||
вторую точку, где может осесть секрет.
|
|
||||||
|
|
||||||
Нашёл прогон ревью `config-test-headers-login` 2026-08-23.
|
|
||||||
|
|
||||||
## Затрагивает
|
|
||||||
|
|
||||||
- `cmd/transcriber/main.go` — вызов `godotenv.Load()` и его импорт;
|
|
||||||
- `go.mod` — зависимость `github.com/joho/godotenv`;
|
|
||||||
- `.dockerignore` — строка `.env`.
|
|
||||||
|
|
||||||
## Критерии приёмки
|
|
||||||
|
|
||||||
- Переменных окружения не читает никто. **Оракул:**
|
|
||||||
`grep -rn "os.Getenv\|os.LookupEnv" --include=*.go internal/ cmd/ | grep -v _test`
|
|
||||||
→ пусто.
|
|
||||||
- Зависимости в `go.mod` нет. **Оракул:** `grep godotenv go.mod go.sum` → пусто,
|
|
||||||
`go build ./...` зелёный.
|
|
||||||
- Предупреждения на старте нет. **Оракул:** прогон бинарника сегодня печатает
|
|
||||||
`level=WARN msg="Warning: .env file not found, using system environment variables"`;
|
|
||||||
после правки такой строки в выводе старта нет.
|
|
||||||
|
|
||||||
## Рамки
|
|
||||||
|
|
||||||
Если переменные окружения кому-то понадобятся, у них заводится свой читатель, и
|
|
||||||
это другая задача. Строку `.env` в `.gitignore` уже добавило слияние прежней
|
|
||||||
задачи — она
|
|
||||||
остаётся.
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# 🧹 Снять мёртвый docker/entrypoint.sh вместе с его следами в образе
|
||||||
|
|
||||||
|
- **Тип:** chore
|
||||||
|
- **Категория:** Очередь
|
||||||
|
- **Зачем:** Скрипт копируется в образ, линтуется шагом гейта и переназначает uid/gid из окружения, но не выполняется ни разу: ENTRYPOINT закомментирован без записанной причины, а переназначение спорит с решением от 2026-08-22 о числовом USER 1000:1000
|
||||||
|
- **Теги:** review-2026-08-23
|
||||||
|
|
||||||
|
`Dockerfile` копирует `docker/entrypoint.sh` в образ и делает его исполняемым, а
|
||||||
|
строку `ENTRYPOINT` держит закомментированной — работу делает `CMD`. Скрипт
|
||||||
|
поэтому не выполняется ни разу, но платится за него трижды: слоем образа, шагом
|
||||||
|
`shell` гейта, который линтует его поимённо, и строкой `ENV USER=transcriber`,
|
||||||
|
заведённой ради него.
|
||||||
|
|
||||||
|
Сам скрипт — перенос из чужого проекта: в его сообщении об ошибке названа Gitea.
|
||||||
|
Он переназначает uid и gid из переменных `USER`, `USER_UID`, `USER_GID`,
|
||||||
|
а этого проект уже не делает: решением от 2026-08-22 пользователь в образе
|
||||||
|
назван числом, `USER 1000:1000`, и причина записана строками рядом.
|
||||||
|
|
||||||
|
Нашёл прогон ревью `drop-dead-dotenv-loader` 2026-08-23, урожаем.
|
||||||
|
|
||||||
|
## Затрагивает
|
||||||
|
|
||||||
|
- `docker/entrypoint.sh` — сам файл;
|
||||||
|
- `Dockerfile` — `COPY docker/entrypoint.sh`, `RUN chmod 755`, закомментированная
|
||||||
|
строка `ENTRYPOINT` и `ENV USER=transcriber`;
|
||||||
|
- `Taskfile.yml`, шаг `shell` — скрипт назван в аргументах `shellcheck` поимённо.
|
||||||
|
|
||||||
|
## Критерии приёмки
|
||||||
|
|
||||||
|
- Скрипта нет ни в дереве, ни в образе. **Оракул:**
|
||||||
|
`grep -rn "entrypoint" Dockerfile Taskfile.yml` → пусто, файла
|
||||||
|
`docker/entrypoint.sh` нет.
|
||||||
|
- Шаг `shell` гейта зелёный и не ссылается на пропавший файл. **Оракул:**
|
||||||
|
`task shell` → код 0; сегодня та же команда линтует два скрипта, после правки —
|
||||||
|
один.
|
||||||
|
- Образ собирается и поднимается. **Оракул:** `task image` собирается, а
|
||||||
|
поднятый контейнер отвечает на `/metrics` и пишет файлы в смонтированный
|
||||||
|
каталог от владельца `1000:1000`.
|
||||||
|
|
||||||
|
## Рамки
|
||||||
|
|
||||||
|
Числового `USER 1000:1000` не касаться: он поставлен решением владельца
|
||||||
|
2026-08-22 и закрывает `DL3066`. Возврат `ENTRYPOINT` в строй — не эта задача:
|
||||||
|
если выяснится, что переназначение uid и gid из окружения всё-таки нужно, это
|
||||||
|
отдельное решение с ценой, и принимают его разведкой, а не чисткой.
|
||||||
Reference in New Issue
Block a user