0.2.3: судить дерево, ГДЕ воркер работает, а не откуда его запустили (#3) #4

Merged
anton merged 1 commits from fix/worktree-from-live-process-3 into main 2026-09-20 20:34:29 +03:00
Owner

Закрывает kotkan/claude-plugin-foreman-supervisor#3.

Что было. Дерево бралось как state.get('worktreePath') or state.get('cwd') — то есть стартовый каталог. У сессии, ушедшей в worktree, он указывает на чужой чекаут. Замер на живом флоте 20.09: воркер 6ce5556f по state.json «жил» в /home/a/pro/siege-lines, реально — в /data/siege-arena364. Судья читал коммиты не того дерева и печатал «коммиты: нет» в момент, когда воркер открывал PR #384.

Это не косметика: коммиты от базовой точки положены в наблюдение именно потому, что у наших агентов git diff пуст на ПРАВИЛЬНОЙ работе (грабля №1 скилла). Промах по дереву ослепляет судью ровно на здоровом воркере.

Что стало. Дерево — из /proc живой сессии (её транскрипт <sessionId>.jsonl в cmdline); state.json остаётся фолбэком для умершего воркера.

Вторая ловушка, оплаченная тем же замером. Транскрипт стоит в cmdline ДВУХ процессов, и первой идёт обёртка claude bg-pty-host, чей cwd — каталог ЗАПУСКА: 871379 → /home/a/pro/siege-lines против 871385 → /data/siege-arena364. Обёртки пропускаются.

Пруф. Та же команда до правки: «дерево /home/a/pro/siege-lines», после: «дерево /data/siege-arena364». Тесты 23 зелёных (4 новых, tests/test_worker_repo.py), прогон ~/pro/foreman/.venv/bin/python -m pytest tests/ -q.

🤖 Generated with Claude Code

Закрывает kotkan/claude-plugin-foreman-supervisor#3. **Что было.** Дерево бралось как `state.get('worktreePath') or state.get('cwd')` — то есть стартовый каталог. У сессии, ушедшей в worktree, он указывает на чужой чекаут. Замер на живом флоте 20.09: воркер `6ce5556f` по state.json «жил» в `/home/a/pro/siege-lines`, реально — в `/data/siege-arena364`. Судья читал коммиты не того дерева и печатал «коммиты: нет» в момент, когда воркер открывал PR #384. Это не косметика: коммиты от базовой точки положены в наблюдение именно потому, что у наших агентов `git diff` пуст на ПРАВИЛЬНОЙ работе (грабля №1 скилла). Промах по дереву ослепляет судью ровно на здоровом воркере. **Что стало.** Дерево — из `/proc` живой сессии (её транскрипт `<sessionId>.jsonl` в cmdline); state.json остаётся фолбэком для умершего воркера. **Вторая ловушка, оплаченная тем же замером.** Транскрипт стоит в cmdline ДВУХ процессов, и первой идёт обёртка `claude bg-pty-host`, чей cwd — каталог ЗАПУСКА: 871379 → `/home/a/pro/siege-lines` против 871385 → `/data/siege-arena364`. Обёртки пропускаются. **Пруф.** Та же команда до правки: «дерево /home/a/pro/siege-lines», после: «дерево /data/siege-arena364». Тесты 23 зелёных (4 новых, `tests/test_worker_repo.py`), прогон `~/pro/foreman/.venv/bin/python -m pytest tests/ -q`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
anton added 1 commit 2026-09-20 20:34:25 +03:00
`state.json` отдаёт стартовый `cwd`, и у сессии, ушедшей в worktree, он указывает на чужой
чекаут. Замер на живом флоте 20.09: воркер 6ce5556f по state.json «жил» в
/home/a/pro/siege-lines, а на деле в /data/siege-arena364 — судья читал коммиты не того
дерева и печатал «коммиты: нет» в момент, когда воркер открывал PR. Коммиты от базовой точки
кладутся в наблюдение именно потому, что у наших агентов `git diff` пуст на правильной работе,
так что промах по дереву ослепляет судью ровно на здоровом воркере.

Дерево берётся из /proc живой сессии (её транскрипт `<sessionId>.jsonl` в cmdline), state.json
остаётся фолбэком для умершего воркера.

Вторая ловушка, оплаченная тем же замером: транскрипт стоит в cmdline ДВУХ процессов, и первой
идёт обёртка `claude bg-pty-host`, чей cwd — каталог ЗАПУСКА (871379 → /home/a/pro/siege-lines
против 871385 → /data/siege-arena364). Обёртки пропускаются.

Пруф: та же команда до правки печатала «дерево /home/a/pro/siege-lines», после —
«дерево /data/siege-arena364»; 23 теста зелёные (4 новых на выбор дерева).
anton merged commit 29787f5b92 into main 2026-09-20 20:34:29 +03:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kotkan/claude-plugin-foreman-supervisor#4