TS — TFW-52 / Phase B: Assisted¶
Date: 2026-08-09 Author: Coordinator Status: ✅ TS_APPROVED — 2026-08-09 Parent HL: HL-TFW-52 — ✅ HL_APPROVED rev. 2 Predecessor: RF Phase A — 🟢 complete, REVIEW ✅ APPROVE
Отдельный Phase HL не создаётся — по тому же основанию, что и в Phase A: master HL §3.7, §3.8 и §4 полностью специфицируют фазу.
1. Objective¶
Phase B создаёт вторую редакцию: самостоятельный Codex-first starter-root, в котором дисциплину удерживают файловая структура и установленные hooks, а не обещание агента. Фаза обязана доказать не работоспособность отдельных механизмов, а измеримую разницу с Light на одном и том же сценарии — иначе редакция не имеет права на существование по HL Principle 9. Периодическая консолидация памяти в объём не входит: Assisted лишь готовит для неё пригодную основу.
2. Scope¶
In Scope¶
editions/02-assisted/— самостоятельный starter-root: пользовательский слой (README.md,AGENTS.md,PROJECT.md,MIGRATION.md) и служебный.codex/.- Установленные и исполненные hooks на три события:
SessionStart,PreCompact,Stop. - Разрешение корня без Git — по маркеру редакции в
PROJECT.md, с отказом до записи при отсутствии или неоднозначности маркера. - Identity UX: один профиль — без вопроса; несколько — привязка на личном устройстве или один короткий выбор; automation отдельным актором.
- Статусные папки
work/{new,doing,review,done,blocked}, один владелец записи на задачу, ID без общего счётчика. - Структура памяти
knowledge/{inbox,records,INDEX.md}и проверка риска до создания общего кандидата. - Переход Light → Assisted по HL §3.8: объявление активной редакции, остановка при двух контрактах,
MIGRATION.md. - Контрольное сравнение Light и Assisted на одном многозадачном сценарии.
- Проверка двух участников в общей синхронизируемой папке без Git.
Out of Scope¶
- Периодическая консолидация: расписание, «сны», автоматическое продвижение кандидатов, чистка, дедупликация, протокол свежести, receipts, разрешение конфликтующих запусков (HL §3.7, DoF 8).
- Ось организации работы по ролям — TFW-54 (HL §3.3, DoF 9).
- Аутентификация, разграничение прав, модель безопасности организации.
- Гарантия безопасного одновременного редактирования одного файла в синхронизируемой папке.
- Проверка на реальном Google Drive: research оставил это незакрытым (iter2 Q2), а поставка от конкретного провайдера не зависит. Проверяем обычную общую папку.
- Фоновая работа при закрытом Codex.
- Изменение
.tfw/,editions/01-light/содержательно и исходника TFW-51. - Перевод Assisted на английский: пользовательский слой пишется по-русски, консистентно с Light.
3. Principles Check¶
| # | Principle (from HL §7) | Enforced by | Gate |
|---|---|---|---|
| P1 | Цель выше задачи | AC-8 | В контрольном прогоне агент удерживает цель между задачами, а не выполняет реплики поштучно |
| P2 | Working Backwards до действий | AC-3, AC-8 | TRACE.md содержит критерии до раздела хода работы во всех задачах прогона |
| P3 | След работы — часть результата | AC-3, AC-4 | Stop отклоняет завершение при отсутствии или рассогласовании следа |
| P4 | Знание должно накапливаться | AC-6 | Кандидаты созданы отдельными файлами; INDEX.md не выдаётся за автоматически обновляемый |
| P5 | Структура поддерживает дисциплину | AC-3, AC-5 | Статус читается из расположения папки, а не из декларации в тексте |
| P6 | Автоматика тиха до границы риска | AC-4, AC-7 | Обычный разговор не создаёт задачу и не спрашивает имя; вопрос возникает только на риске |
| P7 | Первичный след не уничтожается | AC-9 | Переход с Light не перезаписывает исходные файлы |
| P8 | Один писатель на изменяемую сущность | AC-10 | Два участника не пишут в один изменяемый файл; общих счётчиков нет |
| P9 | Редакции обучают постепенно | AC-8 | Контрольное сравнение показывает конкретные отказы Light, которых нет в Assisted |
| P10 | Просто снаружи, честно внутри | AC-1, AC-2 | Ни один файл не обещает консолидации, ролей и аутентификации; недоступность hooks видима |
4. Affected Files¶
| File | Action | Description |
|---|---|---|
editions/02-assisted/README.md |
CREATE | Запуск, философия, установка hooks, честные границы редакции |
editions/02-assisted/AGENTS.md |
CREATE | Поведенческий контракт: цикл задачи, идентичность, память, граница риска, ручной режим |
editions/02-assisted/PROJECT.md |
CREATE | Цель, участники, ограничения; маркер активной редакции и версии |
editions/02-assisted/MIGRATION.md |
CREATE | Переход с Light: порядок, что переносится, что останавливает операцию |
editions/02-assisted/.codex/hooks.json |
CREATE | Регистрация трёх событий с command и commandWindows |
editions/02-assisted/.codex/hooks/tfw-hook.ps1 |
CREATE | Windows-обработчик, диспетчеризация по имени события |
editions/02-assisted/.codex/hooks/tfw-hook.sh |
CREATE | POSIX-обработчик, та же логика и тот же файловый контракт |
editions/02-assisted/people/README.md |
CREATE | Что такое профиль участника, какие поля, кто его создаёт |
editions/02-assisted/knowledge/INDEX.md |
CREATE | Стартовая карта памяти с честным указанием, что консолидация не автоматизирована |
editions/README.md |
MODIFY | Assisted переводится из «planned» в доступную редакцию |
README.md |
MODIFY | Блок Editions: Assisted доступен |
Budget: 9 new files, 2 modifications, ≈700 LOC. Лимиты: max 30 files, max 15 new, max 30 modified, max 3000 LOC.
Master HL §4 требовал от этого TS либо override бюджета, либо деления. Ни то, ни другое не нужно: владелец поднял бюджеты до 30/15/3000/30 решением от 2026-08-08 (TD-125 закрыт), и фаза укладывается без исключений. Пункт HL закрыт этим абзацем.
Пустые runtime-каталоги (work/*, knowledge/inbox, knowledge/records) в поставку не входят — создаются при первом использовании (HL §3.7).
5. Acceptance Criteria¶
AC-1: Assisted открывается как самостоятельный проект¶
Человек без знания программирования и Git разворачивает Assisted и понимает, что получил.
- [ ] Содержимое
editions/02-assisted/копируется в корень чистого проекта и работает без правки служебных файлов вручную - [ ]
README.mdобъясняет установку hooks шагами, выполнимыми без терминальных навыков сверх копирования команды - [ ] Явно названо, чего Assisted не делает: периодическая консолидация памяти, роли, аутентификация, работа при закрытом Codex
- [ ] Пользовательские файлы не содержат кода, JSON-схем и внутренней терминологии hooks
- [ ]
README.md≤ 700 слов,AGENTS.md≤ 1100 слов
Gate: чтение файлов; подсчёт слов; развёртывание на чистом проекте Evidence: полная — развёртывание выполняется в реальной сессии Codex на чистом проекте вне этого репозитория; приложить дерево проекта и лог установки
AC-2: Hooks установлены, доверены и исполняются [depends: AC-1]¶
Три события реально срабатывают в поддерживаемом Codex lifecycle, а не только описаны.
- [ ]
hooks.jsonрегистрируетSessionStart,PreCompactиStopсcommandиcommandWindows - [ ] Обработчик един на событие и диспетчеризуется аргументом; отдельного скрипта на каждое событие нет
- [ ] Зафиксировано срабатывание
SessionStartдля источниковstartupиresume - [ ]
SessionStartвозвращает короткую сводку состояния как additional context; сводка появляется в сессии - [ ]
PreCompactсам сохраняет checkpoint вTRACE.mdактивной задачи; повторный вызов не создаёт второй записи - [ ]
Stopиспользуетstop_hook_activeи допускает не более одного продолжения; повторное рассогласование сохраняется и сообщается без цикла - [ ] Ни один обработчик не зависит от
python3,git rev-parseи POSIX-специфичного цитирования
Gate: hooks установлены и доверены в реальном Codex; в EV приложены артефакты срабатывания каждого события
Evidence: полная. Обязательные фикстуры: (1) первый запуск, (2) resume, (3) реальная компактизация, (4) Stop при согласованном состоянии, (5) Stop при намеренно рассогласованном состоянии — ровно одно продолжение, (6) повторный Stop после продолжения — цикла нет. Для каждой указать наблюдаемый эффект в файлах.
AC-3: Долговечное действие не начинается без следа [depends: AC-2]¶
До первого изменения результата или состояния проекта существует задача с владельцем, критериями и планом.
- [ ] Перед первой долговечной записью созданы папка задачи и
TRACE.mdс владельцем, ролью ИИ, желаемым результатом, критериями и Working Backwards plan - [ ]
Stopобнаруживает искусственно созданное рассогласование: результат есть, следа нет - [ ]
Stopобнаруживает расхождение фактического статуса и расположения папки задачи - [ ] ID задачи не зависит от общего счётчика и не конфликтует при параллельном создании
Gate: искусственные рассогласования создаются вручную; проверяется, что Stop их называет
Evidence: полная — приложить состояние файлов до и после каждой из двух проверок рассогласования
AC-4: Обычный разговор ничего не создаёт [depends: AC-2]¶
Дисциплина включается работой, а не фактом открытия проекта.
- [ ] Вопрос о проекте, чтение файлов и знакомство не создают задачу, не создают кандидата знания и не спрашивают участника
- [ ]
SessionStartприactive_task = noneзавершается штатно - [ ] Вопрос задаётся только при рисках, названных в AC-7, либо при невозможности определить участника перед записью авторства
Gate: сессия из трёх вопросов без долговечных действий; work/ не появляется
Evidence: полная — приложить транскриптный итог и дерево проекта после сессии
AC-5: Корень определяется без Git [depends: AC-2]¶
Обработчик знает, где корень Assisted, и отказывается работать вслепую.
- [ ] Корень определяется по маркеру активной редакции в
PROJECT.mdподъёмом от текущего каталога - [ ] Запуск из подкаталога проекта находит тот же корень
- [ ] При отсутствии маркера обработчик не изменяет состояние и сообщает причину одной фразой
- [ ] При двух конкурирующих контрактами корнях операция останавливается до записи
- [ ] Работает в проекте без
.git
Gate: четыре фикстуры — корректный корень, запуск из подкаталога, отсутствующий маркер, два маркера Evidence: полная — приложить вывод каждой фикстуры и подтверждение отсутствия записи в отказных случаях
AC-6: Память подготовлена, но не выдаётся за автоматическую [depends: AC-3]¶
Структура пригодна для будущей консолидации и честна о своём текущем состоянии.
- [ ] Кандидат знания создаётся отдельным файлом с уникальным идентификатором в содержимом, без общего счётчика
- [ ]
records/иINDEX.mdсуществуют и объяснены;INDEX.mdописан как навигация, а не второе хранилище фактов - [ ] Ни один файл и ни одно сообщение не утверждают, что консолидация, чистка или обновление индекса происходят автоматически
- [ ] Первичный
TRACE.mdне переписывается при создании кандидата
Gate: чтение файлов; создание кандидата в живом прогоне; поиск утверждений об автоматике Evidence: minimal — файлы кандидатов из прогона AC-8
AC-7: Проверка риска срабатывает до общей записи [depends: AC-6]¶
Секрет не попадает в общий кандидат, а граница детерминированного и смыслового разделена честно.
- [ ] Материал с секретом определяется детерминированно обработчиком и не записывается в кандидат, след и индекс
- [ ] Медицинские, персональные, юридические, финансовые и safety-sensitive сведения удерживаются агентом по правилу из
AGENTS.md, с одним коротким вопросом - [ ]
Stopпроверяет, что запрещённый кандидат не опубликован - [ ] В
README.mdиAGENTS.mdне утверждается, что hook классифицирует смысловые категории — это поведение модели - [ ] Неуверенная классификация означает удержание, а не публикацию
Gate: два прогона — с искусственным секретом и с искусственными медицинскими ПДн
Evidence: полная — приложить состояние knowledge/inbox после обоих прогонов и текст заданного вопроса
AC-8: Контрольное сравнение Light и Assisted¶
Assisted решает наблюдаемую проблему Light, а не отличается только количеством файлов.
- [ ] Определён один многозадачный сценарий: не менее трёх последовательных задач в не менее чем двух сессиях, с перезапуском сессии и компактизацией между ними
- [ ] Сценарий выполнен дважды — на Light и на Assisted, на чистых корнях вне этого репозитория, с одинаковыми входами и одинаковыми формулировками задач
- [ ] Зафиксировано по каждому прогону: сколько задач получили след до начала работы; сколько раз фактический статус разошёлся с записанным; сколько раз потребовалось вмешательство человека в структуру; сколько долговечных знаний перенесено
- [ ] Результат сравнения записан честно, включая случай, когда разница мала или отсутствует
Gate: оба прогона завершены; таблица сравнения заполнена по четырём метрикам
Evidence: полная. Это ключевое доказательство фазы. Приложить деревья обоих проектов, все TRACE.md, итоговые файлы и таблицу сравнения. Если Assisted не показал разницы — это результат, а не повод переделать прогон. Наблюдение фиксируется, и решение о продолжении принимает владелец.
Основание AC-8. Прогоны Phase A прошли без единого сбоя: одна задача, одна свежая сессия, полный контекст в первом промпте. В таких условиях Light не отказывает. Отказы, ради которых существует Assisted, TFW-51 наблюдал на последовательности задач и в возобновлённых сессиях. Без воспроизведения этих условий Phase B не может утверждать, что что-то исправила.
AC-9: Переход с Light сохраняет проект [depends: AC-5]¶
Существующий Light-проект переходит в Assisted без потери и перезаписи.
- [ ] Подготовлен Light-проект с заполненными
TASKS.md,memory/PROJECT.mdи не менее чем двумя задачами со следами и результатами - [ ] После перехода цель, задачи, следы, результаты и память доступны; ни один исходный файл не потерян
- [ ] Задачи из
TASKS.mdразложены по статусным папкам; исходныйTASKS.mdсохранён - [ ]
MIGRATION.mdфиксирует, что куда перенесено - [ ] При попытке перехода в корне с двумя контрактами операция останавливается до перезаписи и задаёт один понятный вопрос
Gate: посимвольная сверка содержания следов до и после; проверка отказного сценария
Evidence: полная — приложить дерево до и после, MIGRATION.md и вывод отказного сценария
AC-10: Два участника в общей папке без Git [depends: AC-3]¶
Параллельная работа не создаёт горячих точек записи.
- [ ] Два участника с разными профилями работают в одной общей папке над разными задачами
- [ ] Ни один общий изменяемый файл не редактируется обоими: нет общего task board, счётчика, файла личности и общего следа
- [ ] Кандидаты знаний обоих участников сосуществуют как отдельные файлы
- [ ] У единственного участника имя не спрашивается; при двух профилях без допустимой привязки задаётся один короткий вопрос
- [ ] Automation имеет отдельного актора и не заимствует имя человека
- [ ] Ни один файл не утверждает, что профиль подтверждает личность или полномочия
Gate: параллельный прогон двух участников; поиск общих изменяемых файлов Evidence: полная — приложить дерево общей папки после прогона и перечень файлов с указанием единственного писателя каждого
AC-11: Видимый ручной режим [depends: AC-2]¶
Недоступность hooks не маскируется.
- [ ] При отсутствующих, недоверенных или изменённых hooks Codex сообщает об этом одной короткой фразой
- [ ] Ручной порядок действий описан и выполним
- [ ] Ни один файл не утверждает автоматическую дисциплину, когда hooks не активны
- [ ] После изменения контракта требование новой сессии названо явно
Gate: фикстура с намеренно недоверенным обработчиком Evidence: полная — приложить сообщение пользователю и подтверждение, что работа продолжилась в ручном режиме
Evidence Artifacts¶
| File | Description |
|---|---|
phase-b/evidence/EV__phase-b__assisted.md |
Структурированное evidence по каждому AC, среда, вердикт, индекс вложений (обязателен) |
phase-b/evidence/hooks-fixtures/ |
Шесть фикстур AC-2 и четыре фикстуры корня AC-5 |
phase-b/evidence/control-light/ |
Прогон многозадачного сценария на Light: дерево, следы, результаты |
phase-b/evidence/control-assisted/ |
Тот же сценарий на Assisted: дерево, следы, результаты, кандидаты |
phase-b/evidence/comparison.md |
Таблица сравнения по четырём метрикам AC-8 |
phase-b/evidence/migration/ |
Дерево до и после перехода, MIGRATION.md, отказной сценарий AC-9 |
phase-b/evidence/two-participants/ |
Дерево общей папки и перечень файлов с единственным писателем AC-10 |
phase-b/evidence/risk-gate/ |
Состояния knowledge/inbox после прогонов AC-7 |
6. Technical Guidance¶
Справочный материал из RES iter2 §Evidence Lanes и
research/iter2/2_gather.md. Исполнитель может отклониться, обосновав это в RF.
- События.
SessionStartимеет источникиstartup,resume,clear,compact; plain text или JSONadditionalContextстановится developer context.PreCompactсрабатывает приmanualиauto; stdout игнорируется, checkpoint обработчик обязан сохранить сам — Codex не создаёт его автоматически.Stopполучаетturn_id,stop_hook_active,last_assistant_message; блокирующее решение создаёт продолжение, а не отклоняет ход, поэтому нужныstop_hook_activeи идемпотентные проверки состояния. - Доверие. Проектные hooks исполняются только из доверенного
.codex/; каждое неуправляемое определение команды проходит review по хэшу, а изменённые hooks пропускаются до повторного доверия. Это и есть причина AC-11: «обязательные» означает «после явной установки и доверия». - Платформа. Доступен
commandWindows/command_windows; асинхронные hooks не поддерживаются. Жёстко зашитыеpython3, POSIX-цитирование иgit rev-parseне переносимы и небезопасны вне Git. Команды исполняются вcwdсессии, поэтому относительные пути.codex/hooks/...ненадёжны при старте ниже корня — отсюда AC-5. - Корень. Официальная рекомендация разрешать корень через Git не подходит проекту без Git. Маркер редакции в
PROJECT.md— это тот же механизм, что Phase A уже заложила в Light (Активная редакция/Версия редакции), поэтому имена полей менять нельзя. - Риск. Обработчик способен применять детерминированные шаблоны секретов и структурные проверки; медицинская, юридическая и персональная интерпретация — смысловая и остаётся за моделью. AC-7 требует зафиксировать это разделение в тексте, а не сгладить его.
- Локальная среда. На машине владельца установлен desktop-пакет
OpenAI.CodexWindows x6426.727.6591.0; путьsteps-frameworkдоверен вconfig.toml; ни глобального~/.codex/hooks.json, ни репозиторного.codex/hooks.jsonне существует. Значит установка hooks в Phase B выполняется с нуля, и её шаги надо записать как есть — это будущая пользовательская инструкция. - Прогоны. Все живые прогоны — вне
steps-framework, иначе Codex подхватит корневойAGENTS.mdэтого репозитория. Phase A использовалаD:\projects\research\tfw52-phase-a-runs\; для Phase B разумно продолжить тем же способом. - Контроль AC-8. Следы Phase A (run-1, run-2) — не контроль для AC-8: они одиночные и односессионные. Контроль надо снять заново на том же многозадачном сценарии.
7. Definition of Failure¶
- ❌ Hooks описаны, но не установлены, не доверены или ни разу не исполнены; фикстуры AC-2 заменены описанием ожидаемого поведения.
- ❌
Stopуходит в цикл продолжений либо молча правит состояние, скрывая рассогласование. - ❌ Обработчик изменяет состояние проекта при отсутствующем или неоднозначном маркере корня.
- ❌ Обычный вопрос или чтение создают задачу, кандидата знания или требуют выбора участника.
- ❌ Секрет или чувствительный материал попадает в общий кандидат до проверки риска.
- ❌ Любой файл утверждает, что консолидация памяти, обновление индекса или чистка происходят автоматически.
- ❌ Появляется общий изменяемый task board, счётчик задач, файл текущего участника или общий след.
- ❌ Профиль или локальная привязка выдаются за аутентификацию либо automation молча получает авторство человека.
- ❌ Переход с Light перезаписывает исходные файлы или требует ручной реконструкции содержания.
- ❌ AC-8 выполнен в один прогон, в одну сессию или без контроля на Light.
- ❌ Отрицательный или слабый результат AC-8 скрыт, переформулирован или заменён повторным «удачным» прогоном.
- ❌ В фазе появляются роли, режимы организации работы или заготовки под TFW-54.
- ❌ Изменены
.tfw/, содержательная частьeditions/01-light/или исходник TFW-51. - ❌ Пользовательский слой требует чтения JSON, скриптов или терминологии hooks для обычной работы.
8. Phase Risks¶
| Risk | Mitigation |
|---|---|
| Hook API или модель доверия отличаются от документации | AC-2 требует исполненных фикстур, а не соответствия описанию; расхождение фиксируется в RF как наблюдение, а не обходится молча |
| Исполнитель имитирует прогоны вместо реального запуска | Все живые AC требуют приложенных файлов проекта и деревьев; DoF отвергает описание вместо артефактов |
| AC-8 показывает отсутствие разницы, и возникает соблазн переиграть прогон | DoF прямо запрещает повторный «удачный» прогон; отрицательный результат является допустимым исходом фазы и решением владельца |
| Обработчики разрастаются в приложение | Один обработчик на платформу с диспетчеризацией по событию; бюджет LOC; DoF о пользовательском слое |
| Смысловая классификация риска приписывается hook | AC-7 требует явного разделения детерминированного и модельного в тексте |
| Проверка двух участников подменяется рассуждением о конфликтах | AC-10 требует дерева общей папки и перечня файлов с указанием единственного писателя |
| Периодическая консолидация просачивается «маленькой деталью» | DoF; AC-6 требует отсутствия утверждений об автоматике |
| Ручной режим остаётся необъявленным при недоверенных hooks | AC-11 с отдельной фикстурой |
9. Cross-Phase Modifications¶
| File | Also modified in | Coordination note |
|---|---|---|
editions/README.md |
Phase A (создан) | Меняется только строка доступности Assisted и раздел перехода. Структура и формулировки выбора редакции остаются |
README.md (корневой) |
Phase A (создан блок Editions) | Блок расширяется, а не переписывается; Task Board не трогать |
editions/01-light/memory/PROJECT.md |
Phase A (создан) | Только чтение. Имена полей Активная редакция и Версия редакции — контракт для AC-5 и AC-9; менять нельзя |
TS — TFW-52 / Phase B: Assisted | 2026-08-09