Files
factory/L0/install-log.md
vitya 1e65232cce L0 11b complete: plugins installed; surface 2 gaps
- Mark step 11b : superpowers + context7 installed via /plugin install
- Gap: /plugin marketplace add claude-plugins-official is NOT needed
  (marketplace pre-registered per github.com/anthropics/claude-plugins-official)
- Gap: $PROJECTS_DIR (PS session var) does not survive shell restart;
  bootstrap.ps1 should re-read projects_dir from ~/.config/factory/home.toml
  in every new session (home.toml is already SoT)
- Update Resume table: 11b , 11c starting

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 15:01:19 +03:00

28 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

Pre-step (на директорской машине): создать репо git.kzntsv.site/OpeItcLoc03/factory (private, без README), git init -b master в локальной .factory/, commit, git push -u origin master. Сделано 2026-05-06, root-commit 7e0c158, 3 файла + папка L0.

На новом ноуте:

git clone https://git.kzntsv.site/OpeItcLoc03/factory.git "$PROJECTS_DIR\.factory"

Mapping: gitea-имя репо = factory (без точки — gitea не любит точку в начале); локальная папка после клона = .factory/ (с точкой, чтобы быть сиблингом .common/.wiki/etc). Это закреплённая конвенция для всех мета-репо.

Факт (2026-05-06):

  • git clone прошёл без интерактивного запроса PAT — Windows Credential Vault уже знал git.kzntsv.site (либо через OAuth, либо PAT был сохранён GCM при предыдущей сессии). Удобно для этого ноута, но gap для свежей машины нового сотрудника.
  • git log --oneline7e0c158 Initial commit: factory skeleton + L0 install log (field-test 2026-05-06)
  • git remote -v → origin корректный.
  • 3 файла + L0/

Gap для bootstrap.ps1: на голой машине нового сотрудника GCM ещё не знает gitea. Скрипт должен явно открыть https://git.kzntsv.site/user/settings/applications в браузере, попросить пользователя сгенерить PAT (scopes: read:repository + write:repository + read:user) и нажать Enter. Дальше первый git clone всплывёт с GCM-prompt — пользователь введёт username + PAT, GCM сохранит в Credential Vault. Все последующие clone/push молчаливые.


Шаг 10 — Записать home.toml 🔄

⚠ TOML strings с Windows-путями (backslashes) — должны быть literal strings (одинарные кавычки), иначе backslash интерпретируется как escape.

Первая попытка — через here-string @" ... "@ — провалилась: после copy-paste закрывающий "@ оказался с leading whitespace, PowerShell не закрыл here-string и завис в >> continuation prompt.

Рабочая версия — без here-string, через array + Set-Content (устойчиво к copy-paste):

$cfg = "$env:USERPROFILE\.config\factory"
New-Item -ItemType Directory -Force -Path $cfg | Out-Null
$now = Get-Date -Format 'yyyy-MM-ddTHH:mm:ssZ'

$lines = @(
    "# factory home — single source of machine-level state",
    "# auto-generated by L0b bootstrap; safe to edit by hand",
    "",
    "projects_dir = '$PROJECTS_DIR'",
    "client = 'claude-code'",
    "installed_at = '$now'"
)
$lines | Set-Content -Encoding utf8 "$cfg\home.toml"

Get-Content "$cfg\home.toml"

Факт (2026-05-06):

  • Попытка 1 (here-string) — провалилась из-за whitespace перед "@.
  • Попытка 2 (array + Set-Content) — . home.toml содержит:
    # factory home — single source of machine-level state
    # auto-generated by L0b bootstrap; safe to edit by hand
    
    projects_dir = 'C:\Users\vitya\projects'
    client = 'claude-code'
    installed_at = '2026-05-06T11:41:04Z'
    
  • TOML literal strings корректно сохраняют backslashes Windows-пути.

Gap для bootstrap.ps1: НЕ использовать here-strings (@" ... "@) — слишком хрупкие к whitespace-ошибкам при copy-paste. Писать конфиги через Set-Content -Value $array или [System.IO.File]::WriteAllText(...). Если нужна BOM-free UTF-8, на PS5.1 Set-Content -Encoding utf8 создаёт UTF-8 с BOM — для cross-version совместимости лучше [System.IO.File]::WriteAllText($path, $content, [System.Text.UTF8Encoding]::new($false)).


Шаг 11 — Запустить L1 (factory install) — серия под-шагов

L1 пока не существует (нет Go-бинаря). Вместо него — manual run через Claude Code, по под-шагам.

Шаг 11a — клонировать claude-skills + установить скилы

cd $PROJECTS_DIR
git clone https://git.kzntsv.site/OpeItcLoc03/claude-skills.git
cd claude-skills
pwsh scripts/install.ps1
Get-ChildItem -Path "$env:USERPROFILE\.claude\skills" -Directory | Select-Object Name

Факт (2026-05-06):

  • Клон claude-skills (698 объектов, 557 КБ)
  • В claude-skills/scripts/ изначально не было install.ps1 — только install.sh. Добавлен из директорской машины (commit ef14594, push в gitea), на ноуте git pull --ff-only подтянул.
  • pwsh scripts/install.ps121 скилл установлен в C:\Users\vitya\.claude\skills\ (active-platform, caveman-*, find-skills, project-bootstrap, project-discipline, pulling-before-work, setup-context7, setup-interns, setup-projects-meta, setup-tasks, setup-wiki, using-context7, using-interns, using-markitdown, using-projects-meta, using-tasks, using-wiki)
  • Финальный Get-ChildItem — те же 21 имени, всё на месте.

Шаг 11b — запустить claude, залогиниться, поставить плагины

cd $PROJECTS_DIR\.factory
claude
# в Claude:
# /login                                           — OAuth flow в браузере
# /plugin install superpowers@claude-plugins-official
# /plugin install context7@claude-plugins-official
# /reload-plugins                                   — применить
# /exit

Факт (2026-05-06):

  • OAuth login прошёл через браузер
  • /plugin install superpowers@claude-plugins-official установлен
  • /plugin install context7@claude-plugins-official установлен
  • Открытие: /plugin marketplace add claude-plugins-officialНЕ НУЖНО. Маркетплейс claude-plugins-official уже предзарегистрирован в Claude Code. Команда /plugin install <name>@claude-plugins-official работает сразу. Подтверждение — README репо github.com/anthropics/claude-plugins-official: "You do NOT need to register the marketplace separately".
  • /active-platform после reload — отрабатывает, Windows + PowerShell

Gaps для bootstrap.ps1:

  • Не учить юзера /plugin marketplace add claude-plugins-official — это лишний шаг. Сразу /plugin install <name>@claude-plugins-official. Предыдущая инструкция в наследии установок устарела.
  • ⚠ После выхода из claude и открытия новой PowerShell-сессии переменная $PROJECTS_DIR не видна (PS-переменные живут только внутри сессии; нужен $env:PROJECTS_DIR через [Environment]::SetEnvironmentVariable(..., "User") если хотим персистентности, или просто перезадать в новой сессии). bootstrap.ps1 должен после рестартов либо (а) читать projects_dir из ~\.config\factory\home.toml, либо (б) экспортировать $env:PROJECTS_DIR на уровне User через SetEnvironmentVariable. Вариант (а) каноничнее — home.toml уже SoT.

Шаг 11c — пройтись по setup-* скилам

Порядок: /setup-projects-meta/setup-interns/setup-tasks/setup-wiki/setup-context7 (последний может уже работать через установленный плагин).

(в работе)


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" (если установлен).
  • 2026-05-06 шаг 11a: в claude-skills/scripts/ есть только install.sh (bash) — install.ps1 отсутствует. На Windows-машине нативный путь — pwsh, а не git-bash. Нужно добавить install.ps1 в claude-skills (PR в репо), сейчас обходимся inline-PS-блоком.
  • 2026-05-06 шаг 11b: маркетплейс claude-plugins-official уже предзарегистрирован в Claude Code — /plugin marketplace add claude-plugins-official лишний. Сразу /plugin install <name>@claude-plugins-official. Любые наследуемые from-the-internet инструкции с marketplace add — устарели.
  • 2026-05-06 шаг 11b: $PROJECTS_DIR (PS-переменная сессии) не переживает рестарт shell — после выхода из claude и открытия новой PS она пуста. bootstrap.ps1 должен полагаться на ~\.config\factory\home.toml#projects_dir (уже SoT) или через [Environment]::SetEnvironmentVariable("PROJECTS_DIR", $val, "User") экспортировать на User-уровень. Канон — читать из home.toml в каждой новой сессии.

Resume point — 2026-05-06 (перерыв)

Состояние field-test'а на момент паузы:

Слой Шаг Статус
L0a 1. Verify winget
L0a 2. Core dev tools (git/gh/PS7)
L0a 3. mise install 🔄 (нужен restart, прошло)
L0a 4. node/python/go через mise
L0a 5. git identity
L0a 6. Claude Code (npm → native) 🔄 (npm-зомби убран, native ОК)
L0a 7. Опциональные тулзы ⏭ skipped (VS Code уже стоял; остальное докатим позже)
L0b 8. projects_dir C:\Users\vitya\projects
L0b 9. Clone factory root-commit 7e0c158
L0b 10. home.toml 🔄 (попытка 1 here-string подвисла; попытка 2 array+Set-Content )
L1-manual 11a. claude-skills + 21 skill в ~\.claude\skills\ commit ef14594 (добавил install.ps1)
L1-manual 11b. claude login + плагины superpowers/context7 оба плагина встали; /plugin marketplace add — не нужен
L1-manual 11c. setup-* скилы (projects-meta, interns, tasks, wiki, context7) начинаем сейчас

Что юзер делает в перерыве: под-шаг 11b — claude в $PROJECTS_DIR\.factory, OAuth login, /plugin marketplace add claude-plugins-official, /plugin install superpowers@claude-plugins-official, /plugin install context7@claude-plugins-official. После этого /exit.

Первое действие после возвращения:

  1. Спросить юзера: "Чем закончился 11b? Залогинился? Какие плагины встали? Видны /setup-projects-meta, /active-platform в slash-меню?"
  2. Если ОК — переходим к 11c: /setup-projects-meta (первый, потому что от него зависят interns и shared wiki). У этого скила интерактивный flow с preview/confirm — нужен PAT в ~/.config/projects-mcp/auth.toml. Юзер уже в курсе, как генерить PAT.
  3. Дальше по списку: /setup-interns/setup-tasks/setup-wiki/setup-context7 (последний — может уже стоять, если плагин context7 поставился через /plugin install в 11b).

Открытые design-вопросы.meeting-room/.brainstorm/factory-bootstrap.md, секция "Открытые"): Q2 (где живёт factory.yaml), Q3 (slash-bridge для L2), Q4 (версионирование manifest'а), Q5 (secrets unification).

Где смотреть после возвращения:

  • Этот файл — пошаговый лог.
  • .meeting-room/.brainstorm/factory-bootstrap.md — design-буфер.
  • git.kzntsv.site/OpeItcLoc03/factory — если работаешь с другой машины, git pull сюда даст актуальный лог.

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