--- title: Factory — инфраструктура как продукт updated: '2026-06-11' source: .workshop/.brainstorm/infra-as-product.md (rounds 1-5) type: concept ingested_at: '2026-06-11T07:29:08.884Z' ingested_by: OpeItcLoc03@DESKTOP-NSEF0UK source_project: OpeItcLoc03/workshop --- ## Контекст Factory — дистрибутив инфраструктуры OpeItcLoc03 для внешних пользователей. Первый потребитель — Алексей (собственный Gitea). Цель: отделить разработку инфраструктуры от её эксплуатации через машинную границу. ## Рамка: «ОС для AI-native цеха» Наша инфраструктура — не набор утилит, а операционная система для AI-native цеха. Шесть слоёв: | Слой | Компонент | Статус | |---|---|---| | 1 Физический | VDS + NAS | 🟢 | | 2 Control plane | projects-meta-mcp | 🟢 (Gitea-coupled) | | 3 Знание | wiki-graph, wiki-pattern | 🟢 доказано, контрарианское | | 4 Рабочая сила | interns 🟢 · coworkers 🔵 | 🟡 | | 5 Оркестрация | agents-task-runner v0.6.1 | 🟢 spawn-баг починен | | 6 Методология | claude-skills (31 скил) | 🟢 | Дифференциатор — слой 3 (знание без RAG). Весь рынок болтает vector-DB; мы доказали что для курируемого корпуса linked-plaintext + graph-traversal бьёт RAG по recall и auditable. ## Factory v1 — архитектура дистрибутива **Один публичный репо** на git.kzntsv.site (позже GitHub). Не flip видимости `.common`, не много отдельных репо — один курированный артефакт. ### Состав репо ``` factory/ ├── bootstrap.ps1 ← L1 (Go-бинарь не нужен для v1) ├── factory.yaml ← манифест компонентов с версиями ├── lib/ │ ├── projects-meta-mcp/ ← источник (собирается bootstrap'ом) │ ├── wiki-graph/ │ └── interns-mcp/ └── skills/ ← минимальный набор setup-*/using-* ``` ### Конфигурация (два файла) - `factory.yaml` — ЧТО ставить (компоненты, версии). Шипит с репо. - `~/.config/factory/home.toml` — машинный конфиг (projects_dir, git_host). Генерится при установке. - `~/.config/factory/secrets.toml` — все API-ключи единым файлом. Git-кредентиалы в GCM. ### Модульная система Bootstrap спрашивает при установке какие модули включить: - **Ядро (всегда):** `.factory` (инструменты) + skills + `~/.claude.json` с MCP-серверами - **tasks** (опционально): projects-meta + per-project `.tasks/` - **wiki** (опционально): общая `.wiki/` + per-project `.wiki/` - **workshop** (опционально): boss-zone для дизайна - **admin** (опционально): ops-зона ### Файловая структура у пользователя после установки ``` projects\ ├── .factory\ ← tools (наш Gitea) ├── [.wiki\] ← опц.: общая вики (его Gitea, bootstrap создаёт) ├── [.workshop\] ← опц.: boss-zone ├── [.admin\] ← опц.: ops-зона └── my-project\ ├── [.tasks\] └── [.wiki\] ~/.config/factory/ ├── home.toml ← его git_host, projects_dir └── secrets.toml ← его PAT, API-ключи ~/.claude/skills/ ← скопировано из .factory/skills/ bootstrap'ом ~/.claude.json ← mcpServers → .factory/lib/* ``` `.wiki/` — данные пользователя (его Gitea, его remote). Bootstrap создаёт wiki-репо на его Gitea и клонирует локально. **Не** является частью `.factory/`. ## Dev/prod разделение - **Dev-машина:** работаем по живому в `.common`, принимаем боль, разрабатываем - **Prod-машина (ноут):** ставим из factory, получаем чистый стабильный опыт - Машинная граница = dev/prod граница — никакого двойного конфига на одной машине `main` ветка публичного `factory` = всегда releasable. Dev-работа в приватном `.common` на ветках; в `factory` попадает только протестированное. ## Версионирование и обновления Версия = git-тег factory-репо. Обновление: ``` git -C ~/.factory pull --ff-only pwsh ~/.factory/bootstrap.ps1 --update ``` Скрипт идемпотентен. `home.toml` и `secrets.toml` при `--update` не трогаются никогда. ## Checklist до первого пользователя (Алексей) 1. Создать публичный репо `factory` на git.kzntsv.site 2. Перенести MCP-серверы из `.common/lib/` в `factory/lib/` 3. Перенести минимальный набор скилов в `factory/skills/` 4. Написать `factory.yaml` 5. Дописать `bootstrap.ps1` (закрыть gaps из `L0/install-log.md`) 6. Параметризовать git_host 7. Протестировать на ноуте (field-test 2026-05-06 как чеклист)