Files
factory/.wiki/concepts/infra-as-product.md

110 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 как чеклист)