Files
factory/L0/install-log.md

18 KiB
Raw Blame History

field-test, host, os, director, goal
field-test host os director goal
new-laptop-2026-05-06 tbd (нового ноута имя — спросить) Windows 11 existing Windows machine (vitya@.meeting-room) пройти 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 из коробки. Проверка наличия и обновление каталогов.

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)

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 🔄

winget install --id jdx.mise -e --source winget --accept-package-agreements --accept-source-agreements

Активировать в профиле PS7 ($PROFILE у PS5 и PS7 разные!):

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

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

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):

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:

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.

$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

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

$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-меню).