---
name: ops_dashboard_config_audit_2026-07
description: "Ревизия ops_dashboard (2026-07-16) — 51 карточка, конфиг здоров; известный дефект next-server process_match (6 карточек, некритично); чищены зомби-процессы investpilot"
metadata: 
  node_type: memory
  type: project
  originSessionId: 6620ea3d-79ed-46e4-b5ea-65828f0cc0b8
---

Ревизия по запросу владельца («давненько ревизию не проводили»). Метод: `pgrep -f` живьём по каждому `process_match`, сверка `launchd_label` с `launchctl list`, обратная сверка (свои launchd-сервисы без карточки).

**Итог: конфиг здоров.** Все 51 карточка соответствуют реальным сервисам, все `process_match`/`launchd_label` валидны, дашборд сам жив. Переименования (Автеро/Делор) отражены верно, снятый chatgpt-web2api отсутствует (как и должно).

**Известный дефект (НЕ пофикшен, оставлен как есть по выбору владельца):** 6 карточек next.js-фронтендов (zemlya_web_frontend, tbr_frontend, codoceh_studio_frontend, avtero_frontend, mehant_frontend, zemlya_web_frontend_2) используют идентичный `process_match: "next-server"` — next.js не пишет порт в cmdline, поэтому `pgrep -f` не отличает их, PID/uptime в деталях карточки может показывать чужой процесс. НЕ критично для алертинга: у каждой карточки свой `health_check` (HTTP по своему порту) — при реальном падении статус всё равно даунгрейдится до `degraded` (см. `infer_service_status`/`service_snapshot` в `server.py`). Настоящий фикс требует правки движка `server.py` (матчинг по слушающему порту через `lsof`, а не по имени процесса) — владелец предпочёл не трогать сейчас (риск/выгода не оправданы).

**55 launchd-сервисов без карточки — это by design, не гэп.** Почти все — `local.zemlya-*` cron/sentinel-джобы (backup/sanity/refresh/tunnel), покрытые зонтиком `ha_cron_jobs` (мониторит exit-коды), плюс инфраструктурные (anydesk, xray-туннели, caffeinate) и companion-петли (investpilot-bootstrap/dataset/review, notion-web2api-refresh, cebers-post-*). Правило 8's «Грабли» уже это описывает — не заводить тайл без health_file_path для чистых cron-джоб.

**Найдено и убрано:** 2 зомби-процесса на investpilot (PID 78554/78607, 9 дней, зависший debug-скрипт `investpilot.bot.main` intraday-смоук из старой сессии) — убиты SIGTERM, боевой бот (PID 44539) не задет.

**auto_restart** — плоская структура `{enabled, threshold, cooldown_sec}`, не per-service (без багов). **notifications.bot_token** пустой в файле НАМЕРЕННО — резолвится из env (`_resolve_bot_token`, тег `[SEC-BOT-TOKEN-ENV-2026]` в server.py), не секрет-утечка.

Связано: [[ops_dashboard_tailscale_funnel]], [[ops_dashboard_session_cookie]].

**06.08.2026:** карточек 48 — сняты три карточки Механта при выводе проекта из эксплуатации, см. [[mehant_decommissioned_2026-08]].
