Admin /admin/assets/<siteId>/getList?path= крашился 500 NullReferenceException
в AssetsJsonViewModelBuilder.cs:22 (model.ParentPath на null) для 15 sites без
root AssetsFolder в Folders table (emspb.ru, pilorama98.ru, labtools.pro,
kupimknigi.spb.ru, sestech.ru, aquamax.spb.ru, artmone.pro, priemka-kvartiry.ru,
profund.spb.ru, ics-artmaterials.com, _voda-indigo.ru + 4 sites с NULL Domain).
Root создавался lazy при first upload — sites которые никогда не использовали
admin assets UI остались без root. Frontend (AssetsAppFunc.cs:66-86) делает
proper null-check → 404, только admin view-model builder упустил.
Fix: idempotent SQL seed (WHERE NOT EXISTS), 15 rows inserted. Inserted
FolderId/OwnerId captured в .tasks/...inserted-rows.txt для atomic revert.
Browser-verified user'ом на pilorama98/emspb.
Долгосрочный TODO: null-guard в AssetsJsonViewModelBuilder.Build (CMS code),
требует recompile DLL — отложено до восстановления build env (vds-kzntsv-bootstrap).
snapshot open issue #8 → resolved.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Port :8089/:4443 утечка в admin URLs закрыта. URL Rewrite 2.1 + apphost
allowedServerVariables (HTTPS/SERVER_PORT/SERVER_PORT_SECURE) + Web.config rule
на X-Forwarded-Proto=https → set SERVER_PORT=443/SERVER_PORT_SECURE=1/HTTPS=on
ДО того как ASP.NET читает их в Url.SiteRoot(). Лечит все 11 cms (общий site
snolla). Path B (traefik http entrypoint :80→:8090) abandoned — Docker Desktop
WSL2 NAT quirk на host.docker.internal:80 возвращает 17-byte 301 plain text
независимо от traefik internals. Quirk не reproducible на Linux Docker (synology).
Side regression: pre-existing customErrors mode="off" lowercase в Web.config
пробудился после ASP.NET full-reload (мой rewrite-block edit) — fixed (Off).
Outside scope, open: emspb.snolla.com /admin/assets/<guid>/getList → 500 NullRef
в AssetsJsonViewModelBuilder.cs:22 (model null от GetFolderByPath). User
подтвердил «только этот site». Зафиксировано в snapshot open issue #8.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rusonyx 160 NVMe заказан 2026-05-19 (6 vCPU / 8GB RAM / 160GB NVMe / Ubuntu 24.04, без ispmanager/CMS/VPS Backup, 1 IPv4). Ждём выделение IP.
OS resolved: Ubuntu 24.04 LTS (поддержка до апреля 2029, docker official APT flow, mainstream community для docker workload). Debian 12 отвергнут — не даёт material выгоды при 8GB RAM.
160 SSD → 160 NVMe — Rusonyx апгрейд storage по той же цене, IOPS выше.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
After NAS incident 2026-05-18 — план вынести инфраструктурные сервисы (gitea/verdaccio/seafile/registry/hermes) с kreknin Synology на облачный VDS Rusonyx 160 SSD (2500 ₽/мес, 6 vCPU / 8GB RAM / 160GB SSD).
Размеры с kreknin /volume1/docker/*: gitea 2.6G, verdaccio 8.5G (prune до ~3G), owncloud → replace with seafile ~30-40G, registry 99G (GC до ~5-15G), hermes 10G (Nous Research agent self-host, LLM external).
Tier-decision history записана в Decisions log: 160 → 80+addon → 160 final (user choice: operational simplicity over 6k₽/год экономии).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Status: done (false) -> paused (true). Миграция была сделана,
сломала prod (Docker port-loop), откатили. Артефакты на хосте
остались inert для следующей попытки.
- STATUS: 🟢 done -> 🟡 paused с детальным where-I-stopped
- iis-on-host-migration: Phase 9 rollback задокументирован, что
НЕ делать в следующей попытке (cross-ref на post-mortem)
- NEXT-SESSION-PROMPT: переписан для retry-сценария — обязательное
чтение post-mortem перед началом, recipe из 5 пунктов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
10/11 main domains now served by native host IIS via traefik
(C:\sites\MoreThenCms.Web on *:80). rimiz.ru -> 404 (CMS-side),
stostayer/stostayer.old technically deployed but timeout locally,
traefik for stayer kept on VM. Phase 4-5 open.
- STATUS: ready -> paused with detailed where-I-stopped
- iis-on-host-migration: completed steps + decisions log + status block
- NEXT-SESSION-PROMPT: rewritten with current state + 4 next-task options
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes nas-recovery (status done in STATUS.md), opens
iis-on-host-migration as the next active task: migrate IIS sites
from VirtualBox VM to native Windows host IIS to eliminate VBox
as a stability layer.
NEXT-SESSION-PROMPT.md is the kickoff brief for the next
conversation — context, what to read, guardrails.
Note: no push possible until gitea recovery (it was on the
dead synology; backup of /docker/gitea/ exists on kreknin
synology but not yet restored).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bootstrapped via project-bootstrap@1.11.0:
- .wiki/ (Karpathy LLM Wiki canon) via setup-wiki@1.0.0
- .tasks/ (canonical board) via setup-tasks@1.0.0
- CLAUDE.md with skill triggers
- README.md starter
- .gitignore: meta-isolation block for AI обвеска