Skip to content

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 или JSON additionalContext становится 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.Codex Windows x64 26.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