Добавляет 10 opt-in pytest-проверок всех восьми сценариев: dry-run, apply/повтор, настоящий SQL rollback после UPDATE и INSERT, обновление без raw_data, поздние CSV-метаданные, сохранение после crawl и продолжение обработки второго сотрудника при конфликте HSE ID.
Локальный Compose использует PostgreSQL 16, две тестовые БД, синтетические credentials и restricted test role. Runtime не наследует production env, HTTP запрещён fixture, профили синтетические. Dockerfile-specific ignore исключает секреты и реальные CSV из build contexts.
Для владельца под root подготовлен отдельный compose.vps.yml: только готовые тестовые образы, отдельные internal network и named tmpfs volume, без опубликованных портов, host bind mounts и Docker socket. По 0.5 CPU/512 MiB RAM на контейнер, без дополнительного swap, 128 процессов, ограниченные tmpfs и логи. Pull/build запрещены при запуске; owner-run начинается с read-only диагностики ресурсов и образов. Адресная очистка только этого тестового проекта. Команды: docs/postgresql-import-verification.md и docs/postgresql-import-vps.md. Версия 0.10.4.
Проверено: 75 unit-тестов прошли, 10 PostgreSQL-тестов собраны и пропущены, git diff --check, JavaScript syntax, разбор VPS YAML и статические проверки изоляции/лимитов. Docker отсутствует: Docker build/Compose runtime и настоящая PostgreSQL-интеграция НЕ выполнялись. VPS-стенд не запускался; production, VPS и доступ к рабочей БД не менялись. Требуется независимое ревью.
Добавляет 10 opt-in pytest-проверок всех восьми сценариев: dry-run, apply/повтор, настоящий SQL rollback после UPDATE и INSERT, обновление без raw_data, поздние CSV-метаданные, сохранение после crawl и продолжение обработки второго сотрудника при конфликте HSE ID.
Локальный Compose использует PostgreSQL 16, две тестовые БД, синтетические credentials и restricted test role. Runtime не наследует production env, HTTP запрещён fixture, профили синтетические. Dockerfile-specific ignore исключает секреты и реальные CSV из build contexts.
Для владельца под root подготовлен отдельный compose.vps.yml: только готовые тестовые образы, отдельные internal network и named tmpfs volume, без опубликованных портов, host bind mounts и Docker socket. По 0.5 CPU/512 MiB RAM на контейнер, без дополнительного swap, 128 процессов, ограниченные tmpfs и логи. Pull/build запрещены при запуске; owner-run начинается с read-only диагностики ресурсов и образов. Адресная очистка только этого тестового проекта. Команды: docs/postgresql-import-verification.md и docs/postgresql-import-vps.md. Версия 0.10.4.
Проверено: 75 unit-тестов прошли, 10 PostgreSQL-тестов собраны и пропущены, git diff --check, JavaScript syntax, разбор VPS YAML и статические проверки изоляции/лимитов. Docker отсутствует: Docker build/Compose runtime и настоящая PostgreSQL-интеграция НЕ выполнялись. VPS-стенд не запускался; production, VPS и доступ к рабочей БД не менялись. Требуется независимое ревью.
Независимое review: APPROVED для head 8adaa4d6ea. Блокирующих замечаний не обнаружено.
Origin сверён с репозиторием admin/miem_workers. API подтвердил автора codex (id 6) и независимого reviewer agent (id 7). Перед публикацией head повторно проверен. Проверен полный diff всех 10 файлов относительно main e0f9ab7411, а также используемые модели, app.db, CLI импортера, поток crawler и fixtures.
Изоляция и очистка:
Отдельный Compose-проект miem-publication-integration, PostgreSQL 16, две синтетические БД miem_import_test и miem_crawl_test; tmpfs для данных, internal-сеть, нет опубликованных портов или постоянных DB volumes. init.sql монтируется read-only.
В документированном запуске runtime не наследует окружение production: Compose environment задан явно, нет env_file, host network, Docker socket или рабочих data mounts в runner. Build context ограничен отдельным Dockerfile.dockerignore; .env/ключи/credentials и реальные CSV/data не включены.
Команды используют очищенное окружение, --env-file /dev/null и явно локальный Docker Unix socket. Никакие команды SSH/VPS не нужны.
Fixture проверяет точный тестовый DATABASE_URL до setup, database() разрешает только два тестовых имени и проверяет current_database(). CLI запускается отдельным процессом с фиксированным postgres-test, синтетической ограниченной ролью и whitelist libpq-параметров; pgpass/service отключены.
HTTP запрещён fixture, профили и ссылки crawler синтетические. Внутренний кластер не имеет маршрута к production в описанном Compose-запуске.
drop_all выполняется через engine одной из разрешённых тестовых БД; нет DROP DATABASE, удаления реальных ролей или рабочих volumes. Документированная очистка — down только этого проекта; указано уничтожение синтетических tmpfs-данных и запрет system prune/production Compose.
Восемь сценариев действительно представлены десятью PostgreSQL-кейсами:
Dry-run сравнивает строки всех таблиц и last_value sequences до/после.
Apply проверяет реальную вставку, обновление и пропуск отсутствующего сотрудника.
Повтор apply проверяет ноль insert/update и неизменные строки/sequences.
Серверный CHECK Reject установлен в тестовой БД; действия идут UPDATE → INSERT Accepted → INSERT Reject. После ошибки сравниваются все строки с исходным состоянием, успешного отчёта нет, pending есть; продвижение sequence при rollback допускается.
Обновление одного year проверяет сохранность JSONB.
Поздние CSV-метаданные дополняются, конфликт сохраняет первое значение и отражается в JSON-отчёте; повтор не меняет БД.
Реальный CLI-импорт и два вызова crawler-синхронизации проверяют сохранение CSV-only статьи и присвоение HSE ID прежнему id без дубля и потери csv_enrichment.
Полный run_crawl с подставленными профилями проверяет rollback savepoint первого сотрудника и сохранение публикации второго; сверяются publication_id/source_hash/raw_data/authors/updated_at и CrawlError. Четыре комбинации покрывают оба порядка HSE ID и наличие исходной привязки.
В интеграционных сценариях нет подмены psycopg.connect, SQLAlchemy Session или SQLite: CLI соединяется с настоящим тестовым PostgreSQL под import_test, crawler работает с PostgreSQL Session. Проверяются column grants и отсутствие CREATE схемы, INSERT сотрудников, DELETE публикаций и UPDATE sequence. Парсинг сайта ВШЭ намеренно заменён синтетическими профилями.
Проверки reviewer: исходники актуального head загружены из Git в память, без правок рабочей копии. pytest собрал 10 случаев и показал именно «10 skipped» при выключенном opt-in; дополнительными запретами подтверждено отсутствие вызовов DB setup и subprocess. Проверены отказ при неверном DATABASE_URL и нетестовом имени БД до подключения. git diff --check прошёл.
Docker в reviewer-среде отсутствует: build, compose config и настоящие PostgreSQL-сценарии здесь НЕ выполнялись. Approval относится к коду и инструкции, а не подтверждает результат PostgreSQL-прогона. Обычный skipped-прогон корректно описан как skipped; документация требует фактические «10 passed» и exit code 0 для подтверждения интеграции. Заявленные 75 unit-тестов в этой сессии не перезапускались.
VPS/production не затронуты. Правок, push, создания PR и merge не выполнялось.
Независимое review: APPROVED для head 8adaa4d6eadc40329030ddda1179318e5a00d3e5. Блокирующих замечаний не обнаружено.
Origin сверён с репозиторием admin/miem_workers. API подтвердил автора codex (id 6) и независимого reviewer agent (id 7). Перед публикацией head повторно проверен. Проверен полный diff всех 10 файлов относительно main e0f9ab7411ffb4bf33a2673f6c053e5a27d077fb, а также используемые модели, app.db, CLI импортера, поток crawler и fixtures.
Изоляция и очистка:
- Отдельный Compose-проект miem-publication-integration, PostgreSQL 16, две синтетические БД miem_import_test и miem_crawl_test; tmpfs для данных, internal-сеть, нет опубликованных портов или постоянных DB volumes. init.sql монтируется read-only.
- В документированном запуске runtime не наследует окружение production: Compose environment задан явно, нет env_file, host network, Docker socket или рабочих data mounts в runner. Build context ограничен отдельным Dockerfile.dockerignore; .env/ключи/credentials и реальные CSV/data не включены.
- Команды используют очищенное окружение, --env-file /dev/null и явно локальный Docker Unix socket. Никакие команды SSH/VPS не нужны.
- Fixture проверяет точный тестовый DATABASE_URL до setup, database() разрешает только два тестовых имени и проверяет current_database(). CLI запускается отдельным процессом с фиксированным postgres-test, синтетической ограниченной ролью и whitelist libpq-параметров; pgpass/service отключены.
- HTTP запрещён fixture, профили и ссылки crawler синтетические. Внутренний кластер не имеет маршрута к production в описанном Compose-запуске.
- drop_all выполняется через engine одной из разрешённых тестовых БД; нет DROP DATABASE, удаления реальных ролей или рабочих volumes. Документированная очистка — down только этого проекта; указано уничтожение синтетических tmpfs-данных и запрет system prune/production Compose.
Восемь сценариев действительно представлены десятью PostgreSQL-кейсами:
1. Dry-run сравнивает строки всех таблиц и last_value sequences до/после.
2. Apply проверяет реальную вставку, обновление и пропуск отсутствующего сотрудника.
3. Повтор apply проверяет ноль insert/update и неизменные строки/sequences.
4. Серверный CHECK Reject установлен в тестовой БД; действия идут UPDATE → INSERT Accepted → INSERT Reject. После ошибки сравниваются все строки с исходным состоянием, успешного отчёта нет, pending есть; продвижение sequence при rollback допускается.
5. Обновление одного year проверяет сохранность JSONB.
6. Поздние CSV-метаданные дополняются, конфликт сохраняет первое значение и отражается в JSON-отчёте; повтор не меняет БД.
7. Реальный CLI-импорт и два вызова crawler-синхронизации проверяют сохранение CSV-only статьи и присвоение HSE ID прежнему id без дубля и потери csv_enrichment.
8. Полный run_crawl с подставленными профилями проверяет rollback savepoint первого сотрудника и сохранение публикации второго; сверяются publication_id/source_hash/raw_data/authors/updated_at и CrawlError. Четыре комбинации покрывают оба порядка HSE ID и наличие исходной привязки.
В интеграционных сценариях нет подмены psycopg.connect, SQLAlchemy Session или SQLite: CLI соединяется с настоящим тестовым PostgreSQL под import_test, crawler работает с PostgreSQL Session. Проверяются column grants и отсутствие CREATE схемы, INSERT сотрудников, DELETE публикаций и UPDATE sequence. Парсинг сайта ВШЭ намеренно заменён синтетическими профилями.
Проверки reviewer: исходники актуального head загружены из Git в память, без правок рабочей копии. pytest собрал 10 случаев и показал именно «10 skipped» при выключенном opt-in; дополнительными запретами подтверждено отсутствие вызовов DB setup и subprocess. Проверены отказ при неверном DATABASE_URL и нетестовом имени БД до подключения. git diff --check прошёл.
Docker в reviewer-среде отсутствует: build, compose config и настоящие PostgreSQL-сценарии здесь НЕ выполнялись. Approval относится к коду и инструкции, а не подтверждает результат PostgreSQL-прогона. Обычный skipped-прогон корректно описан как skipped; документация требует фактические «10 passed» и exit code 0 для подтверждения интеграции. Заявленные 75 unit-тестов в этой сессии не перезапускались.
VPS/production не затронуты. Правок, push, создания PR и merge не выполнялось.
Повторное независимое review: APPROVED для актуального head 4c609cc7ea. Блокирующих замечаний не обнаружено.
Origin повторно сверён с admin/miem_workers; через API подтверждены автор codex (id 6) и reviewer agent (id 7). Перед публикацией head повторно проверен. Проверены добавления после review #135 и их согласованность с полным составом PR относительно main e0f9ab74.
Новый VPS-вариант проверен по коду и инструкции:
Самостоятельный compose.vps.yml, отдельное имя проекта и internal-сеть, никаких опубликованных портов, внешних сетей, host bind mounts, env_file, Docker socket или production credentials в контейнерах.
Только заранее подготовленные тестовые образы; pull_policy: never и документированный up --no-build --pull never. Init.sql включён в PostgreSQL-образ; отдельный Dockerfile.postgres.dockerignore разрешает только Dockerfile/ignore/init.sql.
По 0.5 CPU, 512 MiB памяти и 128 процессов; memswap_limit равен mem_limit; логи ограничены. PostgreSQL shared_buffers=64MB/max_connections=12; named volume использует tmpfs size=256m.
Runner работает UID 65534, read-only rootfs, cap_drop ALL, no-new-privileges. Writable /tmp — ограниченный tmpfs; bytecode и pytest cache отключены, что согласуется с read-only rootfs.
Тестовые DATABASE_URL и libpq-параметры остаются фиксированными. PostgreSQL-тесты, их guards, восемь сценариев/десять случаев, CLI и crawler-код после предыдущего review не менялись.
Инструкция отделяет read-only диагностику от build/load/up. Требует оценки ресурсов и действующих cgroup limits, проверенного SHA/revision образов, checksum и проверки отсутствия чужих ресурсов с этим project name. Команды обращаются к локальному Unix socket с очищенным окружением и отдельным Docker config.
Адресный down --volumes использует только фиксированный тестовый проект/Compose; потеря синтетических данных явно описана. Нет --remove-orphans, prune, удаления рабочих volumes/образов или production Compose.
Проверки reviewer: VPS YAML разобран PyYAML; утверждения об изоляции, лимитах, tmpfs, logging и защите runner проверены программно. Синтаксис всех sh-блоков обеих инструкций проверен sh -n без выполнения команд. Python AST и git diff --check прошли. Версии согласованы на 0.10.4.
Предыдущая проверка неизменённых тестов показала именно 10 skipped без opt-in и без DB/subprocess. Пропущенные тесты по-прежнему не выдаются за passed. Docker здесь отсутствует: Compose schema/runtime, сборка образов, фактическое применение лимитов и настоящие PostgreSQL-сценарии НЕ проверены. Для подтверждения интеграции нужен отдельный согласованный запуск с 10 passed и exit code 0; этот approval оценивает код и инструкции.
Никакие команды из инструкции на VPS не выполнялись. VPS/production не затронуты; правок, push, создания PR и merge не выполнялось.
Повторное независимое review: APPROVED для актуального head 4c609cc7eacb34a0a8aa66ce27d23f09dc060fb8. Блокирующих замечаний не обнаружено.
Origin повторно сверён с admin/miem_workers; через API подтверждены автор codex (id 6) и reviewer agent (id 7). Перед публикацией head повторно проверен. Проверены добавления после review #135 и их согласованность с полным составом PR относительно main e0f9ab74.
Новый VPS-вариант проверен по коду и инструкции:
- Самостоятельный compose.vps.yml, отдельное имя проекта и internal-сеть, никаких опубликованных портов, внешних сетей, host bind mounts, env_file, Docker socket или production credentials в контейнерах.
- Только заранее подготовленные тестовые образы; pull_policy: never и документированный up --no-build --pull never. Init.sql включён в PostgreSQL-образ; отдельный Dockerfile.postgres.dockerignore разрешает только Dockerfile/ignore/init.sql.
- По 0.5 CPU, 512 MiB памяти и 128 процессов; memswap_limit равен mem_limit; логи ограничены. PostgreSQL shared_buffers=64MB/max_connections=12; named volume использует tmpfs size=256m.
- Runner работает UID 65534, read-only rootfs, cap_drop ALL, no-new-privileges. Writable /tmp — ограниченный tmpfs; bytecode и pytest cache отключены, что согласуется с read-only rootfs.
- Тестовые DATABASE_URL и libpq-параметры остаются фиксированными. PostgreSQL-тесты, их guards, восемь сценариев/десять случаев, CLI и crawler-код после предыдущего review не менялись.
- Инструкция отделяет read-only диагностику от build/load/up. Требует оценки ресурсов и действующих cgroup limits, проверенного SHA/revision образов, checksum и проверки отсутствия чужих ресурсов с этим project name. Команды обращаются к локальному Unix socket с очищенным окружением и отдельным Docker config.
- Адресный down --volumes использует только фиксированный тестовый проект/Compose; потеря синтетических данных явно описана. Нет --remove-orphans, prune, удаления рабочих volumes/образов или production Compose.
Проверки reviewer: VPS YAML разобран PyYAML; утверждения об изоляции, лимитах, tmpfs, logging и защите runner проверены программно. Синтаксис всех sh-блоков обеих инструкций проверен sh -n без выполнения команд. Python AST и git diff --check прошли. Версии согласованы на 0.10.4.
Предыдущая проверка неизменённых тестов показала именно 10 skipped без opt-in и без DB/subprocess. Пропущенные тесты по-прежнему не выдаются за passed. Docker здесь отсутствует: Compose schema/runtime, сборка образов, фактическое применение лимитов и настоящие PostgreSQL-сценарии НЕ проверены. Для подтверждения интеграции нужен отдельный согласованный запуск с 10 passed и exit code 0; этот approval оценивает код и инструкции.
Никакие команды из инструкции на VPS не выполнялись. VPS/production не затронуты; правок, push, создания PR и merge не выполнялось.
admin
merged commit c975e7418b into main2026-10-05 12:12:33 +00:00
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.
Добавляет 10 opt-in pytest-проверок всех восьми сценариев: dry-run, apply/повтор, настоящий SQL rollback после UPDATE и INSERT, обновление без raw_data, поздние CSV-метаданные, сохранение после crawl и продолжение обработки второго сотрудника при конфликте HSE ID.
Локальный Compose использует PostgreSQL 16, две тестовые БД, синтетические credentials и restricted test role. Runtime не наследует production env, HTTP запрещён fixture, профили синтетические. Dockerfile-specific ignore исключает секреты и реальные CSV из build contexts.
Для владельца под root подготовлен отдельный compose.vps.yml: только готовые тестовые образы, отдельные internal network и named tmpfs volume, без опубликованных портов, host bind mounts и Docker socket. По 0.5 CPU/512 MiB RAM на контейнер, без дополнительного swap, 128 процессов, ограниченные tmpfs и логи. Pull/build запрещены при запуске; owner-run начинается с read-only диагностики ресурсов и образов. Адресная очистка только этого тестового проекта. Команды: docs/postgresql-import-verification.md и docs/postgresql-import-vps.md. Версия 0.10.4.
Проверено: 75 unit-тестов прошли, 10 PostgreSQL-тестов собраны и пропущены, git diff --check, JavaScript syntax, разбор VPS YAML и статические проверки изоляции/лимитов. Docker отсутствует: Docker build/Compose runtime и настоящая PostgreSQL-интеграция НЕ выполнялись. VPS-стенд не запускался; production, VPS и доступ к рабочей БД не менялись. Требуется независимое ревью.
Независимое review: APPROVED для head
8adaa4d6ea. Блокирующих замечаний не обнаружено.Origin сверён с репозиторием admin/miem_workers. API подтвердил автора codex (id 6) и независимого reviewer agent (id 7). Перед публикацией head повторно проверен. Проверен полный diff всех 10 файлов относительно main
e0f9ab7411, а также используемые модели, app.db, CLI импортера, поток crawler и fixtures.Изоляция и очистка:
Восемь сценариев действительно представлены десятью PostgreSQL-кейсами:
В интеграционных сценариях нет подмены psycopg.connect, SQLAlchemy Session или SQLite: CLI соединяется с настоящим тестовым PostgreSQL под import_test, crawler работает с PostgreSQL Session. Проверяются column grants и отсутствие CREATE схемы, INSERT сотрудников, DELETE публикаций и UPDATE sequence. Парсинг сайта ВШЭ намеренно заменён синтетическими профилями.
Проверки reviewer: исходники актуального head загружены из Git в память, без правок рабочей копии. pytest собрал 10 случаев и показал именно «10 skipped» при выключенном opt-in; дополнительными запретами подтверждено отсутствие вызовов DB setup и subprocess. Проверены отказ при неверном DATABASE_URL и нетестовом имени БД до подключения. git diff --check прошёл.
Docker в reviewer-среде отсутствует: build, compose config и настоящие PostgreSQL-сценарии здесь НЕ выполнялись. Approval относится к коду и инструкции, а не подтверждает результат PostgreSQL-прогона. Обычный skipped-прогон корректно описан как skipped; документация требует фактические «10 passed» и exit code 0 для подтверждения интеграции. Заявленные 75 unit-тестов в этой сессии не перезапускались.
VPS/production не затронуты. Правок, push, создания PR и merge не выполнялось.
Повторное независимое review: APPROVED для актуального head
4c609cc7ea. Блокирующих замечаний не обнаружено.Origin повторно сверён с admin/miem_workers; через API подтверждены автор codex (id 6) и reviewer agent (id 7). Перед публикацией head повторно проверен. Проверены добавления после review #135 и их согласованность с полным составом PR относительно main
e0f9ab74.Новый VPS-вариант проверен по коду и инструкции:
Проверки reviewer: VPS YAML разобран PyYAML; утверждения об изоляции, лимитах, tmpfs, logging и защите runner проверены программно. Синтаксис всех sh-блоков обеих инструкций проверен sh -n без выполнения команд. Python AST и git diff --check прошли. Версии согласованы на 0.10.4.
Предыдущая проверка неизменённых тестов показала именно 10 skipped без opt-in и без DB/subprocess. Пропущенные тесты по-прежнему не выдаются за passed. Docker здесь отсутствует: Compose schema/runtime, сборка образов, фактическое применение лимитов и настоящие PostgreSQL-сценарии НЕ проверены. Для подтверждения интеграции нужен отдельный согласованный запуск с 10 passed и exit code 0; этот approval оценивает код и инструкции.
Никакие команды из инструкции на VPS не выполнялись. VPS/production не затронуты; правок, push, создания PR и merge не выполнялось.