Files
admin/.tasks/infra-inventory.md
vitya d87b4f445e tasks: + [infra-inventory] — single source of truth, кончать гадать hostnames [infra-inventory]
Триггер — incident 2026-05-22 в .workshop-сессии: агент ляпнул
gitea.kzntsv.site (canonical = git.kzntsv.site), плюс перепутал
client-IP в traefik access-логах с destination-IP, и построил
неверный root-cause для board-viewer 404.

User: "никакого gitea.kzntsv.site нет, есть только git.kzntsv.site,
нужна инвентаризация чтобы и боссы и агенты и разрабы знали железо".

Таска: единая страница в projects-wiki/concepts/infrastructure-inventory.md
с canonical hostnames, IP-картой, anti-aliases, pointers в bootstrap-concept'ы
каждой машины. Pointer из .admin/.wiki/CLAUDE.md.
2026-05-22 17:07:57 +03:00

5.5 KiB
Raw Blame History

infra-inventory

Goal

Полная инвентаризация инфраструктуры kzntsv: какие машины существуют, где они физически, какие IP, какие домены/субдомены на них смотрят, какие стеки/сервисы крутятся. Результат — единая страница в global wiki (projects-wiki/concepts/infrastructure-inventory.md), доступная всем (босс в .workshop, агенты в любом проекте, разрабы). Без этой карты любой агент / разраб угадывает hostname по software name (последний инцидент: ляпнул gitea.kzntsv.site вместо git.kzntsv.site, перепутал source/destination IP в access-логах, построил неверную причину 404).

Acceptance criteria

  • Единая страница projects-wiki/concepts/infrastructure-inventory.md ингествованная через mcp__projects-meta__knowledge_ingest
  • Содержит таблицу: машина | физ. расположение / провайдер | public IP | internal IP (если применимо) | назначение | что крутится
  • Содержит таблицу: subdomain | IP | на какой машине | что обслуживает | TLS-resolver (если traefik)
  • Явно зафиксированы canonical hostnames для каждого сервиса: git.kzntsv.site (Gitea, НЕ gitea.kzntsv.site), registry.kzntsv.site, traefik.vds.kzntsv.site, mssql.kzntsv.site, board.kzntsv.site, owncloud-host, и т.д.
  • Раздел «aliases / wildcard» — что апекс и wildcard указывают, что туда не надо роутить production-traffic
  • Раздел «not on this host» — anti-aliases (gitea.kzntsv.site не существует, использовать git.kzntsv.site; и аналоги если есть)
  • Pointers — для каждого хоста ссылка на соответствующую .wiki/concepts/<host>-bootstrap.md если есть, на ops-MCP endpoint если есть (opsmcp.vds.kzntsv.site, opsmcp.kzntsv.site для NAS)

Источники

  • mcp__projects-meta__knowledge_search по существующим bootstrap-concept'ам (vds-kzntsv-bootstrap, vds-ntfy-push, owncloud-vds-deploy, etc. — в .admin/.tasks/ уже куча)
  • vds-ops MCP (mcp__vds-ops__ops_docker_ps) — что running на VDS
  • synology-ops MCP — что running на NAS
  • git remote -v на любом локальном clone → canonical Gitea hostname
  • Public DNS probes (nslookup) для всех known subdomain
  • ~/.config/projects-mcp/auth.toml — Gitea base URL (canonical)
  • Existing concept в .admin/.wiki/concepts/ если есть (проверить перед написанием с нуля)

Pending

  • Inventory машин (как минимум: VDS Rusonyx, NAS Synology, dev-машина DESKTOP-NSEF0UK; возможно есть ещё)
  • Inventory subdomain'ов через nslookup / list of known hostnames в проектах (rg -tjsonl "kzntsv.site" по ~/projects/)
  • Cross-check каждого hostname с реальным docker stack через ops-MCP
  • Anti-aliases (hostnames которые «звучат правильно» но не существуют — gitea., может другие — git-registry., nas., etc.)
  • Ingest в global wiki через mcp__projects-meta__knowledge_ingest({target_project: "OpeItcLoc03/projects-wiki", pagePath: "concepts/infrastructure-inventory.md", ...})
  • Pointer в .admin/.wiki/CLAUDE.md Domain conventions: «Перед любым hostname-mention свериться с projects-wiki/concepts/infrastructure-inventory.md (canonical names + anti-aliases)»
  • Pointer в ~/projects/claude-skills/ skill using-vds-ops body и using-synology-ops body: «Canonical hostnames — см. infrastructure-inventory» (когда тот skeleton получит body)

Acceptance — visible

  • Любой агент в любом проекте на вопрос «какой hostname у Gitea?» сначала глянет в инвентаризацию, а не ляпнет gitea.kzntsv.site по аналогии с software name
  • Босс в .workshop/ при дизайне нового стека (например, новый сервис на VDS) сразу видит занятые subdomain'ы и не предлагает конфликтующие

Decisions log

  • 2026-05-22: таска создана из incident'а текущей сессии (агент перепутал gitea. vs git., source vs destination IP в traefik access-логах, построил неверный root-cause 404 для board-viewer deploy). User: «никакого gitea.kzntsv.site нет, есть только git.kzntsv.site». Single source of truth → global wiki.

Notes

  • Это не оперативная таска (не блокирует deploy). Но без неё каждый новый агент/сессия рискует повторить ту же ошибку. Приоритет — высокий по latency: чем дольше нет inventory, тем больше circular incident'ов.