hermes-android/agy-work/TASK-2026-08-25-11-green-pipeline.md
2026-08-25 10:48:11 +07:00

13 KiB
Raw Blame History

Task 11: Зелёный пайплайн и достоверность отчётов (hermes-android)

Repo: ochenstarik-ui/hermes-android Assigned to: Antigravity (режим оркестратора, два кодера) Priority: BLOCKER (десять заданий приняты по непроверенным отчётам) Date: 2026-08-25 Base SHA: bf4e2db (task 10)

Статус

Задания 0110 выполнены и запушены. Существенная часть работы сделана корректно: мёртвый слой удалён, R8 включён, строки вынесены в ресурсы, таймлайн атомарен, порядок событий детерминирован.

Но CI не отработал ни одного раза за всё время. Все прогоны после задания 04 красные, включая три последних пуша:

32764324445  task 10  failure
32760656082  task 09  failure
32758701648  task 08  failure
32753786705  task 07  failure
32750927851  task 06  failure

Значит: юнит-тесты, lint, assembleDebug и инструментальные тесты в CI не выполнялись ни разу ни на одном коммите. Все отчёты, заявляющие «83/83 passed», «BUILD SUCCESSFUL», «0 errors», опираются на локальные прогоны gradlew.bat на Windows-хосте. Ни один из них не подтверждён средой, которую задание 04 объявило работающей.

Проблема

1. gradlew без бита исполнения. В индексе git режим 100644:

$ git ls-files -s gradlew
100644 faf93008b77e7b52e18c44e4eef257fc2f8fd76d 0	gradlew

Оба Android-джоба падают на первом же шаге:

/home/runner/work/_temp/....sh: line 1: ./gradlew: Permission denied
##[error]Process completed with exit code 126

Шаги Run Android Lint и Assemble Debug APK в логе помечены - — они не запускались. Джоб инструментальных тестов падает там же, после adb ... failed with exit code 1.

2. Clippy падает на коде задания 07. Не исправлено с 2026-08-24:

error: this `if` statement can be collapsed
  --> src/pairing.rs:190:5
  = note: `-D clippy::collapsible-if` implied by `-D warnings`
error: could not compile `hermes-pair` (lib) due to 1 previous error

3. Ложное «закрыто» в итоговой таблице задания 10.

| SEC-02   | ... | 06 | закрыто | 861e04b (hermes://auth-callback) |
| BUILD-03 | ... | 04 | закрыто | 3ec16c4 |

SEC-02 не закрыт: живой путь входа по-прежнему открывает loopback-сокет (подробности — задание 12). BUILD-03 не закрыт: пайплайн не отработал ни разу. Анти-чеклист задания 10 пункт 11 предупреждал ровно об этом и был отмечен пройденным.

4. Таймингозависимые ожидания вернулись. Задание 04 убрало пять delay(50), задания 02, 08 и 09 внесли семь новых:

app/src/test/java/app/hermes/mobile/core/network/ReadyDeferredRaceTest.kt
app/src/test/java/app/hermes/mobile/core/repository/CacheEvictionTest.kt
app/src/test/java/app/hermes/mobile/core/repository/SessionCreateRaceTest.kt
app/src/test/java/app/hermes/mobile/core/repository/ToolAttributionTest.kt

5. Мусор в репозитории. agy-work/ — 11 продублированных файлов заданий вне agents/<agent-id>/, что запрещает AGENTS.md §4. schemas/1.json в корне — осиротевший дамп схемы Room из задания 02, рабочие схемы лежат в app/schemas/.

6. Битая строка манифеста. AndroidManifest.xml:7<uses-feature .../> и <uses-permission .../> склеены в одну строку.

Роли и протокол

Роль Модель Что делает
Оркестратор Antigravity Маршрутизирует, принимает результат
Кодер 1 Gemini Flash 3.7 high Пункты 16 §Scope
Кодер 2 Gemini Pro high Независимая проверка, доводка, пункт 7

Изменение протокола приёмки, действует с этого задания и далее.

Отчёт больше не является доказательством. Пункт §Required verification считается выполненным только при выполнении обоих условий:

  1. приложен вывод gh run list --limit 5 с прогоном на итоговом SHA в статусе success;
  2. приложен вывод gh run view <id> со всеми джобами в .

Формулировки «BUILD SUCCESSFUL», «tests passed», «green» без этих двух выводов не принимаются ни от одного из кодеров. Локальный прогон на Windows — вспомогательное свидетельство, а не замена.

Scope

1. Бит исполнения.

git update-index --chmod=+x gradlew

Проверить git ls-files -s gradlew100755. Убедиться, что в .gitattributes нет правила, сбрасывающего режим.

2. Clippy. Схлопнуть вложенный if в hermes-pair/src/pairing.rs:190:

if (!trimmed_host.starts_with('[') || !trimmed_host.ends_with(']'))
    && trimmed_host.contains(':')
{
    return Err(PairingError::InvalidHost(format!(
        "Host '{}' contains forbidden colon delimiter outside IPv6 brackets",
        payload.host
    )));
}

Затем прогнать cargo clippy --all-targets -- -D warnings локально и убедиться, что других предупреждений нет: CI проверяет только --lib по текущей конфигурации, а после фикса могут вскрыться остальные.

3. Джоб инструментальных тестов. После пункта 1 перезапустить и разобрать, проходит ли эмулятор. Если adb ... exit code 1 сохранится — диагностировать отдельно: уровень API, arch, таймаут загрузки, disable-animations. Джоб обязан быть либо зелёным, либо с явно зафиксированной причиной невозможности запуска на раннере — но не отключённым и не с continue-on-error.

4. Детерминированные ожидания. Семь delay(50) в четырёх файлах перевести на runTest с виртуальным временем, advanceUntilIdle() и Turbine. Ассерты не менять — только способ ожидания; сверить построчно до и после.

5. Уборка. Удалить agy-work/ и schemas/1.json. Черновики держать в agents/antigravity/notes/. Починить строку 7 манифеста.

6. Прогон и фиксация. Довести пайплайн до полностью зелёного состояния на итоговом SHA и приложить оба вывода из §Роли.

7. Ревизия таблицы сверки (кодер 2). Пройти таблицу «находка → задание → статус» из отчёта задания 10 по всем 63 позициям заново, сверяя с кодом и с логами CI, а не с отчётами предыдущих заданий. Каждую позицию подтвердить или переоткрыть. Как минимум:

  • SEC-02открыто, перенесено в задание 12;
  • BUILD-03открыто, закрывается этим заданием;
  • DATA-01 → сверить: миграция подтверждается только зелёным connectedDebugAndroidTest, до того UNVERIFIED;
  • все позиции, чей статус опирался на «BUILD SUCCESSFUL» из отчётов, пересчитать после первого зелёного прогона.

Исправленную таблицу поместить в отчёт этого задания. Отчёт задания 10 не переписывать — он остаётся историческим документом; расхождение фиксируется здесь.

Do not change

  • Продуктовую логику заданий 0110. Это задание чинит инфраструктуру и достоверность, а не поведение.
  • PkceLoopbackAuthManager и network_security_config.xml — задание 12.
  • dismissClarify — задание 12.
  • Ассерты существующих тестов.
  • Версии зависимостей.

Anti-checklist

  1. Бит выставлен локально, но не закоммичен: git ls-files -s по-прежнему 100644. Проверять индекс, а не рабочее дерево — этот фикс уже один раз не долетел.
  2. Вместо бита в workflow добавлен chmod +x gradlew шагом. Это маскировка: любой другой потребитель репозитория останется сломанным. Требуется именно режим в индексе.
  3. Clippy починен, но прогон делался с --lib; на --all-targets вылезли новые ошибки, и они «отложены».
  4. Джоб эмулятора обойдён через continue-on-error, if: false или удаление.
  5. delay(50) заменены на Thread.sleep или на увеличенные таймауты.
  6. Ассерты изменены заодно с переводом ожиданий.
  7. В отчёте снова «BUILD SUCCESSFUL» без вывода gh run view.
  8. Таблица сверки скопирована из задания 10 с точечной правкой двух строк вместо повторного прохода по 63 позициям.
  9. Позиции, закрытые в 0110 на основании локальных прогонов, оставлены «закрыто» без подтверждения первым зелёным CI.

Definition of Done

  • git ls-files -s gradlew100755 в origin/main.
  • Полный прогон CI на итоговом SHA: все джобы , приложены выводы gh run list и gh run view.
  • Отдельным прогоном подтверждено, что намеренно сломанный юнит-тест валит пайплайн — приложен лог, коммит откачен.
  • cargo clippy --all-targets -- -D warnings чистый.
  • Ни одного delay-ожидания в тестах; ассерты не изменены.
  • agy-work/ и schemas/1.json отсутствуют; манифест валиден и отформатирован.
  • Таблица сверки пересчитана по коду и логам, SEC-02 и BUILD-03 переоткрыты, каждая из 63 позиций имеет статус, подтверждённый ссылкой на код, коммит или лог CI.

Required verification

git ls-files -s gradlew
gh run list --limit 5
gh run view <run-id>
cd hermes-pair && cargo clippy --all-targets -- -D warnings

Локальные прогоны Gradle прикладывать дополнительно, но они не заменяют CI.

Result

agents/antigravity/done/TASK-2026-08-25-11-green-pipeline.md — разделы ## Кодер 1, ## Кодер 2 (review + доработка + пункт 7), ## Пересчитанная таблица по 63 находкам, ## Вердикт оркестратора.

BLOCKER не закрывается по заявлению исполнителя. Пока в отчёте нет gh run view с зелёными джобами, задание считается невыполненным независимо от содержания остального текста.