18 KiB
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:
- Запустить
claudeв$PROJECTS_DIR. - Авторизоваться (
claude login). - Установить плагины superpowers + claude-skills (через
bash <claude-skills>/scripts/install.shпосле клонирования claude-skills). - По очереди вызывать
/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/). Закрепить mappinggitea_repo → local_pathв L1 manifest (вероятно как полеtarget_dirотдельно отsource.url). - 2026-05-06 шаг 3: после
winget install jdx.misePATH обновлён только для НОВЫХ сессий. 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
После заполнения всех ✅ — пройти список и для каждого шага:
- Выкинуть всё что было ручной правкой / интерактивным выбором → перенести в
bootstrap.ps1как функцию с параметрами. - Шаги, отмеченные
❌/🔄, сделать первоочередными — там реальные gap'ы native experience. - PS-скрипт должен запускаться от user-scope (без admin), кроме шагов где winget сам поднимет UAC.
- Все интерактивные диалоги — через
Read-HostилиSelect-Object(ASCII-меню).