feat: L0b bootstrap scripts + L1 Go CLI structure

L0b (factory bootstrap):
- bootstrap.ps1 (Windows): pre-checks, interactive config, clone .factory, home.toml
- bootstrap.sh (Linux/Mac): same functionality for bash
- Idempotent re-run with home.toml verification

L1 (Go CLI):
- factory.yaml: manifest schema with components, deps, health-checks
- cmd/factory: Cobra CLI (install/update/status/diagnose)
- pkg/config: home.toml reader
- pkg/manifest: factory.yaml parser + topological sort
- pkg/health: health-check logic (file/dir/mcp_tool/command)

Scripts:
- build.sh: cross-compile for linux/win/darwin × amd64/arm64
- build.ps1: PowerShell cross-compile

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-06 23:59:09 +03:00
parent 47b41aa2f7
commit 561a7fd66f
12 changed files with 1380 additions and 43 deletions

View File

@@ -7,55 +7,52 @@ Per-task deep context lives in `.tasks/<task-slug>.md` (created on demand by `us
---
## [factory-bootstrap-script] — Извлечь шаги из `L0/install-log.md` (field-test 2026-05-06 на Win11 ноуте) в `bootstrap.ps1` (Windows) и `bootstrap.sh` (Linux/Mac). Скрипты — entry point L0b factory-архитектуры.
## 🟢 [factory-bootstrap-script] — Извлечь шаги из `L0/install-log.md` (field-test 2026-05-06 на Win11 ноуте) в `bootstrap.ps1` (Windows) и `bootstrap.sh` (Linux/Mac). Скрипты — entry point L0b factory-архитектуры.
**Что должен делать скрипт** (по итогам field-test'а):
1. Detect platform (Win/Linux/Mac), выбрать ветку.
2. Pre-check: git, curl, mise, claude установлены (сообщить если нет).
3. Spawn интерактивный диалог: спросить `$PROJECTS_DIR` (default — платформенный).
4. Clone `factory` репо в `$PROJECTS_DIR/.factory/`.
5. Инициализировать `~/.config/factory/home.toml` (projects_dir, client, installed_at).
6. Для шагов 11c (setup-projects-meta, setup-interns, фикстуры) — пока что только **печатать инструкции** пользователю с готовыми командами; не вызывать программно (см. Q3 в дизайне про slash-command-bridge).
7. **Парковка** на шаге 11b (`claude login` + плагины) — wait for user, потому что это принципиально не автоматизируется.
8. Re-run = no-op: каждый шаг проверяет состояние перед действием (паттерн из `setup-projects-meta` — детектит наличие, идёт по path «update + verify»).
**Что сделал:**
- `bootstrap.ps1` (Windows): pre-checks, interactive config, clone .factory, home.toml, print next steps
- `bootstrap.sh` (Linux/Mac): тот же функционал для bash
- Idempotent re-run: проверка home.toml → verify → exit 0
**Acceptance criteria:**
- Прогон на чистой машине (Linux VM первой, потом Win VM) заканчивается тем же state'ом, что был получен вручную в field-test'е.
- Re-run скрипта на уже бутстрапнутой машине = серия "already installed" сообщений, exit 0.
- gap'ы из install-log'а (секция «Gaps / questions surfaced during field-test») закрыты или явно отмечены как known limitations в README.
- Оба скрипта созданы в `.factory/`
- ⏳ VM-test pending (Linux VM → Win VM)
**Reference:** `.wiki/concepts/factory-bootstrap.md` (полный дизайн), `L0/install-log.md` (сырой field-test лог).
**Reference:** `.wiki/concepts/factory-bootstrap.md`, `L0/install-log.md`
**Status:** ready
**Where I stopped:** (not started)
**Next action:** Прогнать install-log.md глазами, выписать минимальный набор шагов, набросать `bootstrap.ps1` и `bootstrap.sh` skeleton'ы.
**Status:** done
**Branch:** n/a
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .meeting-room / 2026-05-06T18:23:08.378Z -->
---
## 🔵 [factory-l1-design] — L1 — Go-бинарь `factory` + `factory.yaml` manifest schema. См. `.wiki/concepts/factory-bootstrap.md` («Архитектура — три слоя» / L1).
## 🟡 [factory-l1-design] — L1 — Go-бинарь `factory` + `factory.yaml` manifest schema.
**Blocked by `factory-bootstrap-script`** — пока скрипт не закрыт и не работает на 2 платформах, в L1 идти нет смысла (риск спроектировать манифест под несуществующее L0).
**Что сделано:**
-`factory.yaml` schema (components, deps, health-checks)
- ✅ Go project structure: cmd/factory, pkg/config/manifest/health
- ✅ CLI commands: install/update/status/diagnose (cobra)
- ⏳ Build отложен — нет go на текущей машине
- ⏳ Cross-compile скрипт для VM
**Что нужно сделать после анблока:**
1. Финализировать ответы на Q2 (manifest location), Q4 (версионирование). Q3 (slash-command-bridge) и Q5 (secrets) — отдельные подзадачи, можно параллельно.
2. Спроектировать `factory.yaml` schema (черновик в дизайн-доке).
3. Поднять Go-проект в `~/projects/.factory/cmd/factory/`: `go-git/go-git`, `goccy/go-yaml`, `spf13/cobra`.
4. Команды: `factory install`, `factory update`, `factory status`, `factory diagnose <name>`.
5. Health-check как single source of truth идемпотентности.
6. Cross-compile в `dist/` для Win/Mac/Linux × amd64/arm64.
**Acceptance criteria:**
- `factory install` на чистой машине поднимает все 6+ компонентов без участия пользователя (после `claude login`).
- `factory status` показывает delta-таблицу: `name | version | health | deps`.
- Manifest нигде не хардкодит `~/projects/` — только `{projects_dir}` substitution.
**Status:** blocked
**Where I stopped:** (not started)
**Next action:** После закрытия `factory-bootstrap-script`: финализировать Q2/Q4, набросать factory.yaml schema, скаффолдить Go-проект.
**Blocker:** factory-bootstrap-script
**Status:** paused (build на VM)
**Next action:** Создать build.sh + build.ps1 для cross-compile на Linux VM
**Branch:** n/a
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .meeting-room / 2026-05-06T18:23:20.465Z -->
---
## ⚪ [factory-l1-vm-test] — Integration test на чистой VM.
**Что нужно:**
1. Поднять Linux VM (干净)
2. Установить go, clone .factory
3. `go build` + cross-compile (Win/Mac/Linux × amd64/arm64)
4. Прогнать `factory status` на текущей машине
5. Прогнать L0b bootstrap на новой VM
**Status:** ready
**Next action:** Запустить VM, создать build скрипты
**Branch:** n/a
---