учёт: закрыта задача drop-dead-dotenv-loader, заведена drop-dead-entrypoint-script
This commit is contained in:
+1
-1
@@ -44,7 +44,6 @@
|
||||
## Очередь
|
||||
|
||||
- [🧹 Поднимать сервис для локальной работы одной командой](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: подкоманда возврата записи в работу не проверена ничем, а тест на неё пришлось бы писать, повторяя её тело руками.
|
||||
- [🧹 Механизировать правило «internal/config не знает транспорта»](items/archrule-config-knows-no-transport.md) — правило записано конвенцией, а сканера у него нет; проект его уже нарушает — go test ./internal/config линкует всю поверхность HTTP, и будущая надобность конфига в транспорте даст цикл импорта на уровне проверок
|
||||
- [✨ Сделать экран загрузки записи и её состояния](items/upload-and-status-screen.md) — Первое, ради чего приложение открывают: отдать файл и увидеть, что с ним происходит.
|
||||
@@ -113,4 +112,5 @@
|
||||
- [🔬 Пределы длительности, приходящей из метаданных](items/duration-bounds-from-metadata.md) — Длительность приходит от ffprobe числом и не проверяется ничем: приведение к целому переполняется, а испорченная гистограмма чинится только перезапуском.
|
||||
- [🧹 Проверять уязвимости в зависимостях приложения](items/npm-deps-vulnerability-scan.md) — Зависимости приложения пришли задачей spa-skeleton, а сканера у них нет: govulncheck смотрит только модули Go. Ни проверки, ни объявленного исключения — непроверенная поверхность, о которой никто не решал
|
||||
- [🧹 Разобрать мелочи входа по доверенному заголовку](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 ГБ — открытое противоречие с границей домена, которое владелец решил не разбирать сейчас.
|
||||
|
||||
@@ -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