Повторяющиеся ошибки: декомпозиция по Ганту
Дата: 2026-02-12
Источник: recurring-errors-priority-2026-02-11.md
Цель: Связные подзадачи с зависимостями для диаграммы Ганта в Redmine (tasks.cdto.group).
1. Иерархия и зависимости (сводка)
- P1 (OOM) выполняется первым; последняя подзадача P1 предшествует первой подзадаче P2.
- P2 (Apport) — после завершения P1; последняя подзадача P2 предшествует началу P3.
- P3 — две ветки (Cockpit и GDM), могут идти параллельно после P2.
Тип связи в Redmine для Ганта: precedes (задача A предшествует задаче B → B не может начаться до завершения A).
2. Дерево подзадач и связи
P1: OOM — лимиты для snapd и LXD (критично)
| Код | Подзадача | Часы | Начало | Окончание | Зависит от |
|---|---|---|---|---|---|
| P1.1 | Проверить наличие и применить scripts/install-resource-limits.sh | 0.5 | 2026-02-11 | 2026-02-11 | — |
| P1.2 | Задать MemoryMax/MemoryHigh для snapd.service | 0.5 | 2026-02-11 | 2026-02-11 | P1.1 |
| P1.3 | Задать лимиты для snap.lxd.daemon.service | 0.5 | 2026-02-11 | 2026-02-11 | P1.2 |
| P1.4 | При необходимости: systemd-oomd (пороги, ManagedOOM для user.slice) | 0.5 | 2026-02-11 | 2026-02-11 | P1.3 |
Связи по Ганту: P1.1 → P1.2 → P1.3 → P1.4 → (далее P2.1)
P2: Убрать диалог Apport «Обнаружена ошибка в системной программе»
| Код | Подзадача | Часы | Начало | Окончание | Зависит от |
|---|---|---|---|---|---|
| P2.1 | Удалить старые краш-файлы: sudo rm /var/crash/*.crash (или выборочно) | 0.5 | 2026-02-12 | 2026-02-12 | P1.4 |
| P2.2 | При необходимости: отключить Apport (enabled=0 в /etc/default/apport, перезапуск apport) | 0.5 | 2026-02-12 | 2026-02-12 | P2.1 |
Связи по Ганту: P1.4 → P2.1 → P2.2 → (далее P3.1 и P3.4)
P3a: Падения cockpit-pcp / pmrep и Cockpit session
| Код | Подзадача | Часы | Начало | Окончание | Зависит от |
|---|---|---|---|---|---|
| P3.1 | Обновить пакеты cockpit-pcp и pcp | 0.5 | 2026-02-13 | 2026-02-13 | P2.2 |
| P3.2 | Удалить файлы cockpit-pcp, pmrep из /var/crash/ | 0.25 | 2026-02-13 | 2026-02-13 | P3.1 |
| P3.3 | Мониторить логи; при повторении — обновить Cockpit, проверить PAM/systemd | 0.5 | 2026-02-13 | 2026-02-13 | P3.2 |
Связи по Ганту: P2.2 → P3.1 → P3.2 → P3.3
P3b: GDM / gnome-keyring при входе
| Код | Подзадача | Часы | Начало | Окончание | Зависит от |
|---|---|---|---|---|---|
| P3.4 | Проверить настройки PAM и сессий по docs/troubleshooting/gdm-gnome-keyring-errors.md | 0.5 | 2026-02-14 | 2026-02-14 | P2.2 |
| P3.5 | При необходимости обновить пакеты gdm3 и gnome-keyring | 0.5 | 2026-02-14 | 2026-02-14 | P3.4 |
Связи по Ганту: P2.2 → P3.4 → P3.5
3. Граф зависимостей (для Ганта)
P1.1 ──► P1.2 ──► P1.3 ──► P1.4 ──┬──► P2.1 ──► P2.2 ──┬──► P3.1 ──► P3.2 ──► P3.3
│ │
│ └──► P3.4 ──► P3.5
4. Таблица связей «precedes» (Redmine)
Для диаграммы Ганта в Redmine создаются связи типа precedes: «задача A предшествует задаче B».
| Задача A (precedes) | Задача B (follows) |
|---|---|
| P1.1 | P1.2 |
| P1.2 | P1.3 |
| P1.3 | P1.4 |
| P1.4 | P2.1 |
| P2.1 | P2.2 |
| P2.2 | P3.1 |
| P2.2 | P3.4 |
| P3.1 | P3.2 |
| P3.2 | P3.3 |
| P3.4 | P3.5 |
5. Регистрация в Redmine
После создания проекта «Повторяющиеся ошибки» (например, скриптом redmine-register-dialog-tasks.py) подзадачи и связи создаются скриптом:
# Контейнер Redmine должен быть запущен
lxc start redmine
# Режим «что будет сделано»
./scripts/redmine-recurring-errors-gantt.py --dry-run
# Создать подзадачи и связи precedes для Ганта
./scripts/redmine-recurring-errors-gantt.py
Требуется REDMINE_API_KEY. Проект и родительские задачи (P1, P2, P3 cockpit, P3 GDM) должны быть созданы первым запуском redmine-register-dialog-tasks.py. Скрипт Ганта ищет их в проекте по темам и при создании подзадач выставляет parent_issue_id, затем создаёт связи «precedes». Если подзадачи были созданы без родителя, привязать вручную: ./scripts/redmine-update-issue.py ISSUE_ID --parent-id PARENT_ID.
Диаграмма Ганта: https://tasks.cdto.group/projects/recurring-errors-2026-02-11 (вкладка «Диаграмма Ганта»).
5.1 Отражение динамики в трекере
При выполнении задач обновляйте статус и добавляйте заметки в Redmine:
# Перевести задачу в работу (заменить ISSUE_ID на номер, например 20)
./scripts/redmine-update-issue.py ISSUE_ID --status "в работе"
# Закрыть задачу с заметкой
./scripts/redmine-update-issue.py ISSUE_ID --status "решена" --notes "Краткое описание выполненного."
Доступные статусы: новая, в работе, решена, закрыта, нужен отклик, отклонена. Список: при ошибке скрипт выведет доступные имена.
6. Связанные документы
- recurring-errors-priority-2026-02-11.md — приоритеты и действия
- optimization-and-resilience-plan.md — лимиты snapd/LXD
- redmine-project-creation.md — API Redmine
Декомпозиция подготовлена для проекта «Повторяющиеся ошибки» в Redmine (tasks.cdto.group).