Files
factory/L0/install-log.md

273 lines
18 KiB
Markdown
Raw 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.
---
field-test: new-laptop-2026-05-06
host: tbd (нового ноута имя — спросить)
os: Windows 11
director: existing Windows machine (vitya@.meeting-room)
goal: пройти full L0a + L0b на голой Win11 машине, фиксируя каждую команду; превратить итог в bootstrap.ps1
---
# L0 install log — Win11 field-test 2026-05-06
Каждый шаг: что задумано → команда → фактический результат → пометки (что сработало не так / что неочевидно).
Пометка `⏳` — запланировано, ещё не выполнено.
Пометка `✅` — выполнено, результат записан.
Пометка `❌` — выполнено, но упало; gap для L0a-скрипта.
Пометка `🔄` — выполнено, но потребовало ручной правки.
## L0a — System bootstrap
### Шаг 1 — Verify winget ✅
Win11 поставляется с winget из коробки. Проверка наличия и обновление каталогов.
```powershell
winget --version
winget source update
```
**Ожидание:** версия `v1.x` или новее, source update без ошибок.
**Факт (2026-05-06):**
- Версия: `v1.28.240`
- `source update` — три источника: `msstore` ✅, `winget` ✅, `winget-font` ✅ (третий нестандартный, видимо добавлен ранее — некритично).
- Сессия запущена в `cmd.exe`, не в PowerShell. **Gap для bootstrap.ps1**: на чистой Win11 стартовая консоль у юзера часто = `cmd`. Скрипт надо либо запускать строго через `iwr … | iex` уже из PS, либо первой строкой проверять `$PSVersionTable` и вежливо просить перейти в PS.
---
### Шаг 2 — Установить core dev tools (git, gh, PS7) ✅
```powershell
winget install --id Git.Git -e --source winget --accept-package-agreements --accept-source-agreements
winget install --id GitHub.cli -e --source winget --accept-package-agreements --accept-source-agreements
winget install --id Microsoft.PowerShell -e --source winget --accept-package-agreements --accept-source-agreements
```
После установки — **открыть новый PowerShell 7**, чтобы PATH перечитался. Дальше работаем уже в PS7 (`pwsh`).
**Ожидание:** `git --version`, `gh --version`, `pwsh --version` отвечают.
**Факт (2026-05-06):**
- Git 2.54.0 ✅ (Git Credential Manager входит в комплект)
- GitHub CLI 2.92.0 ✅ — **но для приватного gitea (`git.kzntsv.site`) не работает.** Оставлен на случай GitHub.com mirror'ов; настоящий нативный CLI для gitea — `tea` (см. опциональный шаг). Альтернатива — простой HTTPS + Git Credential Manager.
- PowerShell 7.6.1.0 ✅
- **Gap для bootstrap.ps1**: `gh` для приватного gitea бесполезен. На фабриках с private gitea вместо `GitHub.cli` ставить `gitea.tea` (или сделать оба опциональными). Решение принимать на основе `home.toml#git_host`.
---
### Шаг 3 — Установить mise 🔄
```powershell
winget install --id jdx.mise -e --source winget --accept-package-agreements --accept-source-agreements
```
Активировать в профиле PS7 (`$PROFILE` у PS5 и PS7 разные!):
```powershell
if (-not (Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
Add-Content -Path $PROFILE -Value 'mise activate pwsh | Out-String | Invoke-Expression'
# ⚠️ ОБЯЗАТЕЛЬНО закрыть pwsh и открыть заново — winget правит PATH, эффект только в новой сессии
. $PROFILE
mise doctor
```
**Ожидание:** `mise --version` отвечает, `mise doctor` без warning'ов.
**Факт (2026-05-06):**
- `winget install jdx.mise` нашёл в каталоге, поставил `2026.5.1 windows-x64`. Зависимость `Microsoft.VCRedist.2015+.x64` подтянулась автоматически.
- Winget предупредил: **"Переменная среды пути изменена; перезапустите оболочку"**, но также создал app-execution-alias `mise` (виден глобально). Поэтому `mise --version` сразу сработал.
- `. $PROFILE` (без перезапуска шелла) → `mise: The term 'mise' is not recognized` — alias работает только в свежей сессии.
- **Решение:** закрыть pwsh, открыть заново — alias подхватывается нормально.
- После рестарта `mise doctor` → ✅ "No problems found"; `MISE_SHELL=pwsh`, shims_on_path=no (нормально для PS — активация env-style, не shims).
- На ноуте обнаружен предустановленный VS Code (в PATH `~\AppData\Local\Programs\Microsoft VS Code\bin`). Конфиг дефолтного терминала на pwsh — отдельный опциональный шаг.
- **Gap для bootstrap.ps1**: после `winget install jdx.mise` обязательно перезапустить себя (re-exec) или сообщить пользователю и завершиться. Не пытаться сделать `. $PROFILE` в той же сессии.
---
### Шаг 4 — Установить runtime'ы через mise ✅
```powershell
mise use --global node@lts python@3.12 go@latest
node --version
python --version
go version
mise list
```
**Ожидание:** все три версии печатаются.
**Факт (2026-05-06):**
- `node@24.15.0` (LTS, npm 11.12.1), `python@3.12.13`, `go@1.26.2` — все три встали из mise mirror'ов.
- Конфиг записан в `C:\Users\vitya\.config\mise\config.toml`.
- ⚠️ Warning во время установки: `mise WARN gpg not found, skipping verification` — sha256 mise проверил, gpg-подпись — нет. На Win11 gpg не предустановлен.
- **Gap для bootstrap.ps1**: либо ставить gpg как зависимость (`winget install GnuPG.Gpg4win` или `GnuPG.GnuPG`), либо явно сообщать "verification skipped — install gpg if you need it" и идти дальше. Не блокер, но решение надо принять.
---
### Шаг 5 — Configure git identity ✅
```powershell
git config --global user.name "<имя>"
git config --global user.email "<почта>"
git config --global init.defaultBranch master
git config --global pull.ff only
git config --global core.autocrlf input
```
**Ожидание:** настройки видны через `git config --global --list`.
**Факт (2026-05-06):**
- `user.name="Victor Kuznetsov"`, `user.email="vitya.kuznetsov@gmail.com"`, `init.defaultBranch=master`, `pull.ff=only`, `core.autocrlf=input`
- Решено: gitea credentials через **PAT + Git Credential Manager (HTTPS)**, не SSH. Причина — Win11 ssh-agent капризный (службу `ssh-agent` надо включать вручную), а GCM встал с Git 2.54 из коробки.
- PAT создаётся пользователем в браузере на `git.kzntsv.site/user/settings/applications` (scopes: `read:repository`, `write:repository`, `read:user`). Будет запрошен GCM'ом при первом `git push`.
- **Gap для bootstrap.ps1**: PAT-creation шаг — не автоматизируется (требует браузера и MFA). Скрипт должен напечатать прямой URL и дождаться "press enter when token created", потом сохранить через `git credential approve` или просто положиться на GCM-prompt.
---
### Шаг 6 — Установить AI-клиент Claude Code 🔄
**Что было предложено (npm):**
```powershell
npm install -g @anthropic-ai/claude-code
claude --version
claude doctor
```
**Что выяснилось:** Claude Code, поставленный через npm-global под mise, попадает в `AppData\Local\mise\installs\node\24.15.0\node_modules\...`. `claude doctor` блокирует auto-updates с warning'ом "Insufficient permissions for auto-updates" (эвристика "не sudo — не можем"). Юзер получит протухшего клиента через пару недель.
**Решение** — переключиться на native installer:
```powershell
claude install # native install в ~\.local\bin\claude.exe
# native installer НЕ добавляет ~\.local\bin в PATH сам — нужен ручной фикс:
$nativePath = "$env:USERPROFILE\.local\bin"
$userPath = [Environment]::GetEnvironmentVariable("Path", "User")
if ($userPath -notlike "*$nativePath*") {
[Environment]::SetEnvironmentVariable("Path", "$nativePath;$userPath", "User")
}
$env:Path = "$nativePath;$env:Path"
npm uninstall -g @anthropic-ai/claude-code # убрать зомби-копию
claude --version
where.exe claude # должно быть одно вхождение
claude doctor # должно быть зелёное Update permissions
```
**Факт (2026-05-06):**
- npm install ✅ → Claude Code 2.1.131
- `claude doctor` после npm-install: ⚠ "Insufficient permissions for auto-updates", "Failed to fetch versions"
- `claude install` ✅ → native в `C:\Users\vitya\.local\bin\claude.exe`
- ⚠ Native installer НЕ положил `~\.local\bin` в PATH автоматически. Anthropic просит сделать это руками через GUI.
- Ручной фикс PATH через `[Environment]::SetEnvironmentVariable` — работает.
- `npm uninstall -g @anthropic-ai/claude-code` — убрал зомби.
- Финал: `where.exe claude` → одно вхождение `C:\Users\vitya\.local\bin\claude.exe`. `claude doctor` зелёный: `Currently running: native (2.1.131)`, `Auto-updates: enabled`, `Stable version: 2.1.119`, `Latest version: 2.1.131`. ✅
**Gaps для bootstrap.ps1 (критично):**
-**НЕ ставить через npm-global под mise.** Auto-updates ломаются.
-**Канонический путь** — официальный native installer от Anthropic: `irm https://claude.ai/install.ps1 | iex` (скрипт сам кладёт в `~\.local\bin` И, по идее, добавляет в PATH; в отличие от `claude install` из уже-стоящего клиента).
- ✅ Если по какой-то причине идём через `claude install` — после него ОБЯЗАТЕЛЬНО править PATH из скрипта (см. блок выше).
-Не забыть `npm uninstall -g @anthropic-ai/claude-code` если npm-копия была.
---
### Шаг 7 — Опциональные тулы (по диалогу) ⏳
С интерактивным выбором:
| Тула | winget id | Зачем |
|---|---|---|
| VS Code | `Microsoft.VisualStudioCode` | редактор |
| Cursor | `Anysphere.Cursor` | альтернативный AI-IDE |
| Ollama | `Ollama.Ollama` | локальные LLM (для interns-mcp endpoint local) |
| Docker Desktop | `Docker.DockerDesktop` | контейнеры (нужен для части проектов) |
| Windows Terminal | `Microsoft.WindowsTerminal` | многотабовый терминал |
**Факт:**
---
## L0b — Factory bootstrap
### Шаг 8 — Выбрать projects_dir ✅
Дефолт: `C:\Users\<user>\projects`.
```powershell
$PROJECTS_DIR = "C:\Users\vitya\projects"
New-Item -ItemType Directory -Force -Path $PROJECTS_DIR | Out-Null
Set-Location $PROJECTS_DIR
```
**Факт (2026-05-06):**
- `$PROJECTS_DIR = C:\Users\vitya\projects` ✅ (создан, cwd переключён).
- Параллельно: создан пустой репо `git.kzntsv.site/OpeItcLoc03/factory` (private, без README — чтобы `git push` не упёрся в merge).
- Локальный mapping: gitea-имя `factory` → локальная папка `.factory/`.
---
### Шаг 9 — Склонировать .factory ⏳
```powershell
git clone https://git.kzntsv.site/OpeItcLoc03/factory.git "$PROJECTS_DIR\.factory"
```
**Mapping**: gitea-имя репо = `factory` (без точки — gitea не любит точку в начале); локальная папка после клона = `.factory/` (с точкой, чтобы быть сиблингом `.common`/`.wiki`/etc). Это закреплённая конвенция для всех мета-репо.
**Замечание:** `factory` пока не в gitea (новый репо). До field-test'а нужно либо запушить с этой машины, либо bootstrap-ить через `--via-zip` (TBD).
**Факт:**
---
### Шаг 10 — Записать home.toml ⏳
```powershell
$cfg = "$env:USERPROFILE\.config\factory"
New-Item -ItemType Directory -Force -Path $cfg | Out-Null
@"
projects_dir = "$PROJECTS_DIR"
client = "claude-code"
installed_at = "$(Get-Date -Format 'yyyy-MM-ddTHH:mm:ssZ')"
"@ | Out-File -Encoding utf8 "$cfg\home.toml"
```
**Факт:**
---
### Шаг 11 — Запустить L1 (`factory install`) ⏳
L1 пока не существует (нет Go-бинаря). Вместо него — **manual run** через Claude Code:
1. Запустить `claude` в `$PROJECTS_DIR`.
2. Авторизоваться (`claude login`).
3. Установить плагины superpowers + claude-skills (через `bash <claude-skills>/scripts/install.sh` после клонирования claude-skills).
4. По очереди вызывать `/setup-projects-meta`, `/setup-interns`, `/setup-tasks`, `/setup-wiki`, `/setup-context7` — каждый со своим preview/confirm.
Этот шаг — самый "ручной", и именно он должен превратиться в L1 manifest после field-test'а.
**Факт:**
---
## Gaps / questions surfaced during field-test
(заполняется по ходу)
- **2026-05-06 шаг 1**: стартовая консоль на чистой Win11 — `cmd`, не PowerShell. bootstrap.ps1 должен или (а) запускаться явно через `powershell -c "iwr … | iex"`, или (б) при старте проверить `$PSVersionTable` и подсказать. На голой Win11 у нового сотрудника `cmd` будет дефолтом.
- **2026-05-06 шаг 2**: `gh` (GitHub CLI) не работает с приватным gitea — лишний пакет. Заменить в bootstrap.ps1 на `gitea.tea` либо сделать выбор по `home.toml#git_host`.
- **2026-05-06 шаг 3**: после `winget install Microsoft.PowerShell` юзер всё ещё может запустить **Windows PowerShell 5.1** вместо PS7 (две разные программы в Start menu, похожие иконки). bootstrap.ps1 должен или явно вызвать `pwsh.exe`, или громко проверить `$PSVersionTable.PSVersion.Major -ge 7` и переоткрыть себя в pwsh. Профили (`$PROFILE`) у 5.1 и 7 разные — путаница приведёт к "mise активирован, но не работает".
- **2026-05-06 conv**: в gitea репо называются БЕЗ точки (`factory`, не `.factory`). Локальная папка — С точкой (`.factory/`). Закрепить mapping `gitea_repo → local_path` в L1 manifest (вероятно как поле `target_dir` отдельно от `source.url`).
- **2026-05-06 шаг 3**: после `winget install jdx.mise` PATH обновлён только для НОВЫХ сессий. App-execution-alias делает `mise --version` рабочим сразу, но команды из `mise activate pwsh` (которые туда не попадают) — нет. bootstrap.ps1 должен после установки mise самозавершиться с инструкцией "открой новую pwsh и запусти `bootstrap.ps1 --resume`" — НЕ пытаться `. $PROFILE` в той же сессии.
- **2026-05-06 VS Code**: на чистой машине VS Code по дефолту цепляет Windows PowerShell 5.1, а не PS7 — даже если PS7 установлен. Нужно явно прописать в `settings.json`: `"terminal.integrated.defaultProfile.windows": "PowerShell"` + профиль с `path: "pwsh.exe"`. Кандидат на L0a опциональный шаг "configure VS Code" (если установлен).
## Diff plan: log → bootstrap.ps1
После заполнения всех ✅ — пройти список и для каждого шага:
1. Выкинуть всё что было ручной правкой / интерактивным выбором → перенести в `bootstrap.ps1` как функцию с параметрами.
2. Шаги, отмеченные `❌`/`🔄`, сделать первоочередными — там реальные gap'ы native experience.
3. PS-скрипт должен запускаться от user-scope (без admin), кроме шагов где winget сам поднимет UAC.
4. Все интерактивные диалоги — через `Read-Host` или `Select-Object` (ASCII-меню).