diff --git a/.wiki/concepts/admin-infra-project.md b/.wiki/concepts/admin-infra-project.md new file mode 100644 index 0000000..d1291d8 --- /dev/null +++ b/.wiki/concepts/admin-infra-project.md @@ -0,0 +1,203 @@ +--- +date: '2026-05-21' +source: .workshop/.brainstorm/admin-infra-project.md +status: promoted +type: design +title: admin-infra-project +ingested_at: '2026-05-21T10:21:27.239Z' +ingested_by: OpeItcLoc03@DESKTOP-NSEF0UK +source_project: OpeItcLoc03/workshop +--- +## Summary + +Design + execution plan for the `OpeItcLoc03/admin` infrastructure project — extracted from `MoreThenCms` catch-all that accumulated admin/recovery content during the 2026-05-18 SMR-cascade incident when git was unavailable. This document is the canonical design context for the migration tasks in `.tasks/STATUS.md`. + +## Context + +**Incident:** 2026-05-18 WD40EFAX SMR-cascade in RAID 5 → dead Synology DSM. Git was hosted on the dead NAS. Several days gitless; client production rebuilt ad-hoc. + +**Current state (as of 2026-05-21):** +- Git restored on VDS Rusonyx — `git.kzntsv.site` (gitea 1.25.5). See `concepts/vds-kzntsv` (after migration). +- Client production temporary scheme: OpenWRT NAT → traefik on Windows host → IIS on host (attempt-2 migration closed 2026-05-21 36h soak). +- All 8/8 client sites green via public HTTPS chain. +- Known open issue: `maljarka.tandemmebel.ru` 502 in HTTPS-mode — CMS-side, stays in `MoreThenCms`. + +**Why admin:** `MoreThenCms` became a catch-all because git was down during the incident — admin/infra content (recovery, VDS bootstrap, traefik quirks, fault-tolerance roadmap placeholder) ended up mixed with CMS-domain content. Decoupling now. + +## Identity + +- **Gitea:** `OpeItcLoc03/admin` +- **Local:** `~/projects/.admin/` +- **Default branch:** `master` +- **Discipline overrides:** master-only, commit-freely, push-by-permission (per `.workshop` pattern) +- **CLAUDE.md profile:** `use superpowers`, `use project wiki`, `use task management system`, `check across all projects`, `pull remote before work`, `follow project discipline`, `delegate to interns when allowed`, `recommend, don't menu`, `we're on Windows`, `talk like a caveman`. **Dropped vs MoreThenCms:** `follow tdd-criteria` (admin work is mostly non-TDD-shape: scripts, runbooks, configs; tdd-criteria carve-outs already cover this). + +## Scope / mission + +`admin` — single home for the full infra agenda: + +1. **Current ops / incidents** — vds-ops, backup runs, traefik-quirks +2. **Migration work** — IIS-on-host, DB-park, LE certs for DBs, DNS-01 for acme +3. **Fault-tolerance roadmap** — placeholder `future-resilient-architecture-goals` expands here into a real plan (RTO/RPO, 3-2-1, multi-host, monitoring, runbooks) +4. **Coordination of infra repos** — `vds-ops-mcp`, `synology-ops-mcp`, `agenda`, `projects-meta-mcp`, `projects-wiki`, `claude-skills` stay as their own repos; admin tracks tasks/decisions about them + +**Out of scope:** CMS-domain (stays in `MoreThenCms`), business projects (books, pilonuxt, etc.), workshop boss-zone. + +## Content inventory — what migrates from MoreThenCms + +### Stays in MoreThenCms (CMS-domain) + +**Tasks:** +- `cms-admin-assets-root-folders-seed`, `cms-port-leak-fix`, `traefik-maljarka-502-bug` (CMS-side diagnosis), `cms-maljarka-https-mode-bug-fix` (open follow-up) + +**Wiki concepts:** +- `cms-admin-assets-root-folder-seed`, `cms-server-port-leak-fix`, `cms-config-rewrite-pattern`, `cms-maljarka-https-mode-crash`, `webconfig-password-xml-escape` + +### Migrates to admin (infra) + +**Tasks (7):** +- `vds-kzntsv-bootstrap`, `vds-gc-cron`, `vds-backup-rsync-kreknin`, `vds-ntfy-push` +- `nas-recovery`, `iis-on-host-migration`, `iis-traefik-dead-routes-cleanup` + +**Wiki entities (all 6):** +- `dead-synology-diskstation`, `kreknin-synology`, `windows-recovery-host`, `snolla-recovery-vm`, `openwrt-router`, `vds-kzntsv` + +**Wiki concepts (18):** +- `wd40efax-smr-cascade`, `hyper-backup-structure-and-recovery`, `vbox-windows-stability-tuning` +- `mssql-container-data-restore` +- `traefik-on-windows-docker-desktop`, `traefik-tcp-passthrough-vs-starttls`, `traefik-file-watch-wsl2-broken` +- `docker-host-loopback-detect`, `compose-bcrypt-escape-trap` +- `portainer-2.21-admin-password-regression`, `db-tls-self-signed-via-traefik-raw-tcp` +- `rusonyx-vps-onboarding-quirks`, `registry-gc-mount-and-modify-flag`, `verdaccio-prune-semantics` +- `recovery-architecture-snapshot`, `future-resilient-architecture-goals`, `iis-migration-2026-05-19-postmortem` + +**Wiki sources (all 3):** +- `nas-recovery-session-2026-05-18`, `iis-host-migration-2026-05-19`, `vds-kzntsv-bootstrap-2026-05-20` + +### Grey-zone (resolved) + +- `iis-on-host-migration` task + `iis-host-migration-2026-05-19` source → **admin** (hosting-platform migration; CMS-side bugs surfaced by it stay in MoreThenCms). +- `recovery-architecture-snapshot` → **admin** (full request flow including admin layer; MoreThenCms doesn't need its own — uses breadcrumb to admin). + +## Migration mechanics — git subtree split for per-file history + +**Goal:** preserve per-file git history for admin-domain files. CMS-only files appear in admin's git history as imported-then-deleted (acceptable noise, explained in cleanup commit message). + +**Recipe (executed in dedicated session — see task list):** + +1. **Pre-step (DONE 2026-05-21):** `OpeItcLoc03/admin` repo created on Gitea (master, auto-init). Local clone `~/projects/.admin/`. Bootstrap commit added `CLAUDE.md`, `.gitignore` (with `!.wiki/` `!.tasks/` to override global ignore), `.tasks/STATUS.md` (header only), `.wiki/` skeleton (`CLAUDE.md`, `index.md`, `log.md`, `overview.md`, `raw/README.md`, empty `entities/`, `concepts/`, `packages/`, `sources/`). + +2. **Subtree-split in MoreThenCms** — 4 history-extraction branches: + + ```powershell + cd ~/projects/MoreThenCms + git subtree split --prefix=.wiki/entities -b split-wiki-entities + git subtree split --prefix=.wiki/sources -b split-wiki-sources + git subtree split --prefix=.wiki/concepts -b split-wiki-concepts + git subtree split --prefix=.tasks -b split-tasks + ``` + +3. **Subtree-add into admin** — clean targets work straight, populated targets need merge approach. + + `.wiki/entities/` and `.wiki/sources/` are empty (only `.gitkeep`) — `git subtree add` works after removing `.gitkeep`: + + ```powershell + cd ~/projects/.admin + git remote add morecms ~/projects/MoreThenCms + git fetch morecms + git rm .wiki/entities/.gitkeep .wiki/sources/.gitkeep + git commit -m "prep: clear gitkeep before subtree import" + git subtree add --prefix=.wiki/entities morecms/split-wiki-entities + git subtree add --prefix=.wiki/sources morecms/split-wiki-sources + ``` + + `.wiki/concepts/` already contains `admin-infra-project.md` (this doc, ingested at promote time) and `.gitkeep`. `.tasks/` already contains `STATUS.md`. `git subtree add` requires an empty prefix → fails. Use one of: + + - **(preferred) `git read-tree --prefix=