From 8ddcf0dd27025308bf332a53d545c9ab1499df58 Mon Sep 17 00:00:00 2001 From: vitya Date: Wed, 6 May 2026 15:52:43 +0300 Subject: [PATCH] Brainstorm Q8: greenfield-mode (fresh-enterprise bootstrap) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Surfaced 2026-05-06 during factory-bootstrap field-test on Win11 laptop. Decision: factory MUST support installing a fresh empty enterprise (no existing gitea content) — not just cloning the existing one. Three of five setup-* skills already cover greenfield (setup-wiki, setup-tasks, project-bootstrap). Two need init-mode (projects-meta, interns). Six root meta-repos have no templates anywhere — must add templates/enterprise// skeletons. Anti-rec: do NOT bootstrap the git-host itself — that's L0a infra, not L1 (factory). Implementation deferred to post-v0; not blocking clone-mode v0. Co-Authored-By: Claude Opus 4.7 (1M context) --- .brainstorm/factory-bootstrap.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.brainstorm/factory-bootstrap.md b/.brainstorm/factory-bootstrap.md index 1d12c45..7a15a0b 100644 --- a/.brainstorm/factory-bootstrap.md +++ b/.brainstorm/factory-bootstrap.md @@ -153,6 +153,27 @@ problem: > - **Q5 — secrets**: где хранятся токены (gitea, ollama, anthropic) в multi-machine setup? Сейчас ad-hoc в `.common/secrets/` и `~/.config/projects-mcp/auth.toml`. factory должен это унифицировать. - **Q7 — access control / discoverability** (deferred to v2): иерархия видимости компонентов фабрики (`public` / `internal` / `secret`) с фильтром при `factory install`. В v0 — все компоненты `public`, secrets живут только в `.common/secrets/` с `.gitignore`. Не блокирует v0. +- **Q8 — fresh-enterprise bootstrap (greenfield-mode дистрибутива)**: должен ли `factory` уметь поднимать **пустое предприятие** — не клонировать существующие гитеа-репы (clone-mode), а **скаффолдить шесть мета-репо из встроенных templates**? + - **Use case:** новый юзер хочет повторить эту ERP-архитектуру у себя — у него есть свой gitea/github namespace, но нет ни `.common/`, ни `.meeting-room/`, ни `.organization/`, ни `.templates/`, ни `claude-skills`-форка, ни `projects-meta-mcp` source-tree. Должен иметь возможность сделать `factory init my-enterprise --git-host https://my-gitea.example.com/myorg` — фабрика создаёт пустые репы, пушит скелеты, потом идёт обычный `factory install`. + - **Status:** ✅ нужно поддерживать. Решение принято на field-test'е 2026-05-06; реализация отложена в production-фазу. + - **Что уже покрыто greenfield'ом** (повторно использовать как есть): `setup-wiki` (пустая Karpathy-вики), `setup-tasks` (пустой STATUS.md с легендой), `project-bootstrap` (CLAUDE.md/.gitignore/README в любой папке). + - **Что не покрыто** (нужны новые скаффолды): + 1. **Корневые мета-репо** — `.common/`, `.meeting-room/`, `.organization/`, `.templates/` сам, claude-skills-fork. У них нет templates ни в одном из существующих скилов. Сейчас они выросли органически, готовые лежат в `git.kzntsv.site/OpeItcLoc03/`. Для нового предприятия их надо родить. + 2. `setup-projects-meta` и `setup-interns` ждут готовый source-tree в gitea — нужен **`init`-mode** (форкать из template-репа `factory/templates/...` либо inline-scaffold). + - **Архитектурное предложение** — добавить в `factory.yaml` per-component `clone-or-init`-источник: + ```yaml + components: + - name: dot-common + source: + type: clone-or-init + url: "{gitea}/common" # сперва пробуем clone + template: "{factory}/templates/enterprise/common" # fallback — scaffold + init+push + ``` + И команда `factory init --git-host ` — создаёт пустые репы в namespace юзера, пушит scaffolded skeletons, далее обычный `factory install`. + - **Anti-recommendation:** **не** пытаться bootstrap'ить сам git-host (gitea/forgejo/github). Factory ожидает, что писательский git-сервер уже существует и юзер имеет туда write-access. Подъём гитеа — это L0a infra-задача (winget/docker-compose), не L1 (factory). + - **Цена:** +1 папка `templates/enterprise//` (6 скелетов: `common`, `meeting-room`, `organization`, `templates`, `projects-meta-mcp-skeleton`, `interns-mcp-skeleton`) + per-component поле `source.template:` в manifest. Оценка: ~неделя на скелеты + ~3 дня на `clone-or-init` логику в Go-биноре. + - **Зависимости:** не блокирует v0 (clone-mode достаточно для текущего fleet'а из 1 юзера + новой машины). Реализуется параллельно после v0 production-deploy. + ## v0 plan — live bootstrap нового ноута как field-test Stop-condition этого подхода: **не сидеть в чистом дизайне до победного — у пользователя есть свежая машина, на ней проверяем дизайн руками**.