Триггер — 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.
5.5 KiB
5.5 KiB
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-opsMCP (mcp__vds-ops__ops_docker_ps) — что running на VDSsynology-opsMCP — что running на NASgit 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.mdDomain conventions: «Перед любым hostname-mention свериться сprojects-wiki/concepts/infrastructure-inventory.md(canonical names + anti-aliases)» - Pointer в
~/projects/claude-skills/skillusing-vds-opsbody иusing-synology-opsbody: «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.vsgit., 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'ов.