Держи. Постановка готова: 13 шагов, решения приняты
Постановка. Цель: появляется утилита dupes <ПАПКА>. Она находит в папке одинаковые файлы (сначала по размеру, потом по хешу содержимого), выводит их группами и говорит, сколько места освободится. Ошибки объясняет по-русски. В проекте появляется проверка make check, и Cyberzavod её запускает.
Что проверено в репозитории. Локальный CLI Cyberzavod той же версии, что записана в настройках, подходит вместо npx. Синхронизация перезаписывает в настройках только версию и стек (определятся Rust и cargo), заново собирает CLAUDE.md с блоком проверок и файлы агентов и скиллов; правила проекта в AGENTS.md она не трогает, поэтому раздел «Команды» правится вручную. Хук начала сессии уже вызывает cargo fetch, менять его не нужно. Хук остановки запускает проверки с лимитом 180 секунд, чистая сборка занимает около 15. Сессия идёт от root, поэтому закрытые права доступа здесь не действуют; для проверки есть setpriv и пользователь nobody. Справку clap можно полностью перевести на русский, а тексты ошибок разбора нужно переводить самим по виду ошибки.
План. Завести Cargo.toml (версия 0.0.0, зависимости clap, walkdir, blake3; для тестов tempfile, assert_cmd, predicates), Makefile с целью check, добавить каталог сборки в игнорируемые. Код разбить на модули: пропущенные пути и причины; обход папки без clap и вывода; поиск дубликатов (группировка по размеру, потоковый хеш blake3, сортировка); тексты отчёта и форматирование размеров; разбор аргументов clap с русскими сообщениями; тонкий main. Затем интеграционные тесты, правка AGENTS.md, прописать make check и пути src и tests в настройках проекта и запустить синхронизацию. Коммиты по Conventional Commits, на каждом проверка зелёная.
Критерии готовности: make check проходит без предупреждений clippy; проверка синхронизации ничего не выводит; дубликаты находятся в том числе в подпапках и с кириллицей в имени; файлы одного размера с разным содержимым, пустые файлы и симлинки в группы не попадают; группы идут по убыванию освобождаемого места, вывод повторяется побайтно; понятные ошибки для несуществующего пути, файла вместо папки и закрытой папки с кодом 1; закрытые файлы внутри папки дают предупреждение и код 0; без аргументов — подсказка и код 2; справка полностью по-русски. Код поиска не импортирует clap и ничего не печатает.
Тесты модульные рядом с кодом и интеграционные в каталоге тестов, только во временных каталогах. Тесты на права под root пропускают себя с пояснением, а перед завершением права проверяются вручную под пользователем nobody.
Вне задачи: --similar, --trash, --json, --version, README и версия 0.1.0; жёсткие ссылки покажутся как дубликаты (известное ограничение); предварительный хеш, прогресс, фильтры по маскам.
Принятые решения. Хеш blake3, обход walkdir. Симлинки внутри не учитываются, но если симлинк сама указанная папка, её содержимое проверяется. Пустые файлы игнорируются. Нечитаемое внутри папки не прерывает работу: предупреждение и код 0. Коды возврата: 0 — проверка выполнена, 1 — папку проверить нельзя, 2 — неверные аргументы. Размеры двоичные (Б, КБ, МБ, ГБ, ТБ) с запятой. Отчёт в stdout, ошибки и предупреждения в stderr. Только бинарный крейт, без абстракций на будущее. Правило про временные каталоги в тестах записывается в AGENTS.md. Вопросов нет.