A. kb-autosync.sh переписан: pull → regenerate index → commit → push.
После каждого push с Mac индекс objects-map.json и _index.md
обновляются автоматически на code-server (LXC 132).
B. kb-objects-map.py + kb-objects-audit.py добавлены в воскресный
weekly cron на LXC 132 — health-check автогенерируется раз в неделю.
C. Чистка битых wiki-ссылок (score 84 → 9):
- notes/govru-diagnosis → projects/niikn/govru-quickfix-playbook (2)
- claude-memory/podkop → 2026-04-17-peredelki-podkop-stability-fix
- [[../snippets/clients/]] → snippets/clients/ (текстом, 2)
- [[feedback_*]] (user memory) → backtick-cited (2)
- [[../znamenskoye/]] → [[../znamenskoye/README]] (4)
Скрипт kb-objects-audit.py улучшен: regex теперь требует [[...]] с
двойной скобкой (не одной), исключает audit/ и CLAUDE.md (placeholder
и autogen).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Аудит перед запуском в прод. Найдены и исправлены critical и medium issues:
Critical (fixed):
- File permissions 644 → 600/640 для id_ed25519, БД, config.yaml
- Нет logrotate (диск 2GB зальётся) → /etc/logrotate.d/rustdesk
- Нет авто-бэкапа → daily cron 03:00 в /root/rustdesk-backups/
Medium (fixed):
- Brute-force на /api/admin/login → NPM rate-limit 5r/m
Medium (deferred):
- NC share без пароля (NC сейчас down — отдельный task)
- Security headers не наследуются в location / (NPM template limitation)
Документация:
- decisions/2026-04-30-rustdesk-pre-prod-audit.md — полный отчёт
- projects/dttb/rustdesk-runbook.md — операционный runbook (recovery,
troubleshooting, onboarding, updates)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
NPM stack пересоздан с публикацией портов 21115-21119. Compose-файл теперь
лежит на host /data/compose/2/docker-compose.yml (Portainer хранил только
в своём volume — теперь синхронизированы). Custom stream.conf с TLS
termination для 21118/21119 в /data/compose/2/data/nginx/custom/.
wss://remot.dttb.ru:21118/ws/id и /ws/relay отвечают 101 Switching Protocols.
WebClient доходит до hbbr с relay request, но peer должен быть online +
залогинен в API чтобы соединение установилось.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
При попытке завести web-client (wss://remot.dttb.ru:21118) выяснилось что
docker port для NPM публикует только 80/81/443. Streams 21115-21119
работают только внутри docker-сети — desktop-клиенты ходят на 10.0.0.244
напрямую через LAN/NetBird. Web-client требует rebuild NPM compose с ports.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Админка lejianwen-api 2.7 при клике на peer открывает /webclient2/#/<id>,
но api отдаёт Flutter WebClient на /webclient/. Без rewrite получаем 404.
Добавлен return 301 в advanced_config NPM Proxy Host 14 — hash остаётся
в браузере, peer-id корректно подхватывается Flutter-app.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>