diff --git a/.wiki/concepts/infra-as-product.md b/.wiki/concepts/infra-as-product.md new file mode 100644 index 0000000..b577863 --- /dev/null +++ b/.wiki/concepts/infra-as-product.md @@ -0,0 +1,109 @@ +--- +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 как чеклист)