From 7d6d8759a5b960329fe0822291328b4e8efa9482 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 14 Sep 2026 12:39:06 +0300 Subject: [PATCH 1/4] refactor: remove obsolete endpoint references --- CHANGELOG.md | 4 ++++ README.md | 2 +- app/version.py | 6 +++--- pyproject.toml | 2 +- tests/test_api.py | 6 +----- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d4b5c1..fd9e3e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.8.3 + +- Удалены устаревшие пояснение о недоступном endpoint и проверка его отсутствия. + ## 0.8.2 - Добавлен production CD workflow с backup PostgreSQL и проверкой healthcheck после обновления. diff --git a/README.md b/README.md index 2dfee27..5f7c54f 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ docker compose up -d --build --remove-orphans - API и админка: `http://localhost:8000` - PostgreSQL: `postgres:5432` внутри сети Compose; порт на хост не опубликован. -Compose запускает `api`, `worker` и `postgres`. API привязан к localhost; для внешнего доступа нужен настроенный reverse proxy. MCP удалён, endpoint `/mcp` отсутствует; REST API данных требует сессию администратора. +Compose запускает `api`, `worker` и `postgres`. API привязан к localhost; для внешнего доступа нужен настроенный reverse proxy. REST API данных требует сессию администратора. Таблицы создаются приложением при старте. При обновлении существующей базы приложение также добавляет недостающие runtime-колонки, например `crawl_runs.skipped_count`. SQL-миграции для ручного применения лежат в `migrations/`. diff --git a/app/version.py b/app/version.py index 9024ee5..5bdb0d1 100644 --- a/app/version.py +++ b/app/version.py @@ -1,3 +1,3 @@ -APP_VERSION = "0.8.2" -FRONTEND_VERSION = "0.8.2" -BACKEND_VERSION = "0.8.2" +APP_VERSION = "0.8.3" +FRONTEND_VERSION = "0.8.3" +BACKEND_VERSION = "0.8.3" diff --git a/pyproject.toml b/pyproject.toml index 82d6487..a364ca8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "miem-workers" -version = "0.8.2" +version = "0.8.3" description = "MIEM employees parser, admin API, and web admin" requires-python = ">=3.11" dependencies = [ diff --git a/tests/test_api.py b/tests/test_api.py index bc24263..4708e06 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -18,11 +18,7 @@ def test_health_returns_versions(): response = TestClient(app).get("/api/health") assert response.status_code == 200 - assert response.json()["backend_version"] == "0.8.2" - - -def test_mcp_endpoint_is_removed(): - assert TestClient(app).get("/mcp").status_code == 404 + assert response.json()["backend_version"] == "0.8.3" def test_api_employees_and_stats_require_admin_session(): -- 2.49.1 From 83e726efe56c34961cb73c2ed4d62a918c75b0c9 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 14 Sep 2026 12:41:04 +0300 Subject: [PATCH 2/4] docs: align service version in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5f7c54f..185bec9 100644 --- a/README.md +++ b/README.md @@ -135,4 +135,4 @@ node --check app/static/admin.js Тесты с данными используют временную SQLite; отдельные API smoke-тесты запускают приложение с его текущей конфигурацией. Браузерная проверка: `pip install playwright`, `python -m playwright install chromium`, затем `python tests/browser_admin.py`. Она проверяет реальный рендеринг страниц, клавиатуру, диалог, фильтры и восстановление прогресса после ошибки. Скриншоты сохраняются во временную папку; путь выводится в конце. -Версия сервиса: `0.8.2`. Админка всегда показывает версии backend и frontend в footer. +Версия сервиса: `0.8.3`. Админка всегда показывает версии backend и frontend в footer. -- 2.49.1 From ceca2017cbcc0213f84eacab9f94e86792c2cd96 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 14 Sep 2026 12:48:47 +0300 Subject: [PATCH 3/4] fix: wire dismissal safety settings --- .env.example | 2 ++ README.md | 2 +- app/config.py | 2 ++ app/version.py | 6 +++--- pyproject.toml | 2 +- tests/test_api.py | 2 +- tests/test_config.py | 7 +++++++ 7 files changed, 17 insertions(+), 6 deletions(-) diff --git a/.env.example b/.env.example index 0e31c4d..89e4dd5 100644 --- a/.env.example +++ b/.env.example @@ -10,6 +10,8 @@ CRAWL_LIMIT= REQUEST_TIMEOUT=30 REQUEST_DELAY_SECONDS=1 PARSER_USE_PLAYWRIGHT=false +DISMISSAL_CONFIRMATION_RUNS=3 +MAX_AUTO_DISMISSALS_PER_RUN=25 ADMIN_USERNAME=admin ADMIN_PASSWORD=change-me diff --git a/README.md b/README.md index 185bec9..7f6c51f 100644 --- a/README.md +++ b/README.md @@ -135,4 +135,4 @@ node --check app/static/admin.js Тесты с данными используют временную SQLite; отдельные API smoke-тесты запускают приложение с его текущей конфигурацией. Браузерная проверка: `pip install playwright`, `python -m playwright install chromium`, затем `python tests/browser_admin.py`. Она проверяет реальный рендеринг страниц, клавиатуру, диалог, фильтры и восстановление прогресса после ошибки. Скриншоты сохраняются во временную папку; путь выводится в конце. -Версия сервиса: `0.8.3`. Админка всегда показывает версии backend и frontend в footer. +Версия сервиса: `0.8.4`. Админка всегда показывает версии backend и frontend в footer. diff --git a/app/config.py b/app/config.py index e04dd42..104e5bc 100644 --- a/app/config.py +++ b/app/config.py @@ -13,6 +13,8 @@ class Settings(BaseSettings): request_timeout: int = 30 request_delay_seconds: float = 1.0 parser_use_playwright: bool = False + dismissal_confirmation_runs: int = Field(default=3, ge=1) + max_auto_dismissals_per_run: int = Field(default=25, ge=1) admin_username: str = "admin" admin_password: str = "admin" diff --git a/app/version.py b/app/version.py index 5bdb0d1..6b6757f 100644 --- a/app/version.py +++ b/app/version.py @@ -1,3 +1,3 @@ -APP_VERSION = "0.8.3" -FRONTEND_VERSION = "0.8.3" -BACKEND_VERSION = "0.8.3" +APP_VERSION = "0.8.4" +FRONTEND_VERSION = "0.8.4" +BACKEND_VERSION = "0.8.4" diff --git a/pyproject.toml b/pyproject.toml index a364ca8..90feafa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "miem-workers" -version = "0.8.3" +version = "0.8.4" description = "MIEM employees parser, admin API, and web admin" requires-python = ">=3.11" dependencies = [ diff --git a/tests/test_api.py b/tests/test_api.py index 4708e06..6e5d1b9 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -18,7 +18,7 @@ def test_health_returns_versions(): response = TestClient(app).get("/api/health") assert response.status_code == 200 - assert response.json()["backend_version"] == "0.8.3" + assert response.json()["backend_version"] == "0.8.4" def test_api_employees_and_stats_require_admin_session(): diff --git a/tests/test_config.py b/tests/test_config.py index 9d9aeb6..4b2a485 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -11,3 +11,10 @@ def test_numeric_crawl_limit_is_parsed(): settings = Settings(crawl_limit="25") assert settings.crawl_limit == 25 + + +def test_dismissal_safety_settings_have_conservative_defaults(): + settings = Settings() + + assert settings.dismissal_confirmation_runs == 3 + assert settings.max_auto_dismissals_per_run == 25 -- 2.49.1 From baad49b976026def78dd062d57a266227a26a0a9 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 14 Sep 2026 12:53:01 +0300 Subject: [PATCH 4/4] docs: record dismissal config fix --- CHANGELOG.md | 4 ++++ tests/test_config.py | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd9e3e7..e1a093e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.8.4 + +- Подключены к конфигурации ограничения массового автоматического увольнения, используемые плановым обходом. + ## 0.8.3 - Удалены устаревшие пояснение о недоступном endpoint и проверка его отсутствия. diff --git a/tests/test_config.py b/tests/test_config.py index 4b2a485..9ca5073 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -13,8 +13,10 @@ def test_numeric_crawl_limit_is_parsed(): assert settings.crawl_limit == 25 -def test_dismissal_safety_settings_have_conservative_defaults(): - settings = Settings() +def test_dismissal_safety_settings_have_conservative_defaults(monkeypatch): + monkeypatch.delenv("DISMISSAL_CONFIRMATION_RUNS", raising=False) + monkeypatch.delenv("MAX_AUTO_DISMISSALS_PER_RUN", raising=False) + settings = Settings(_env_file=None) assert settings.dismissal_confirmation_runs == 3 assert settings.max_auto_dismissals_per_run == 25 -- 2.49.1