/tfw-update
Обнови набор целиком после одного согласования на запись. Это prompt-only процесс: самостоятельно выбирай доступные инструменты среды и не требуй конкретную ОС, runtime, shell, архиватор, браузер или коннектор.
Service set
AGENTS.md, PROJECT.md, README.md, MIGRATION.md, VERSION, CHANGELOG.md, шаблоны/, .agents/skills/.
Опубликованные clean packages 1.4, 1.5 и 1.6 не содержат .codex/ или local bindings. Существующая .codex/ является пользовательской областью, кроме точной version-specific cleanup-карты прежних TFW hooks ниже. Unrelated entries и файлы сохраняются.
Protected set
workspace/, knowledge/, team/ не меняются, если migration конкретной версии одновременно не:
- перечислена в
CHANGELOG.md пакета;
- показана точной картой исходных/целевых путей и hash-preconditions;
- отдельно включена в единственный Gate записи;
- окружена manifests до/после по относительным путям, размерам и SHA-256.
Task ID никогда не переписывается. Новая версия меняет только схему будущих задач; legacy task folders остаются на стабильных путях.
project_id и profile schema относятся к protected project identity. Их version-specific migration допустима только по точной карте changelog и единственному Gate. Machine-local registries TFW Full и Assisted не являются частью проекта: их не ищут в пакете/project root, не читают как migration source, не копируют между namespace/устройствами, не публикуют и не включают в shared manifests.
1. Получи целый пакет и выбери договор
- Прочитай текущие
VERSION/CHANGELOG.md. Если источник не дан, задай ровно один вопрос: «Где находится пакет новой версии — путь, архив, ссылка, вложение, облачный объект или другое доступное представление?»
- Если исходная версия 1.2 и пользователь явно поручил применить
tfw-update/SKILL.md из пакета 1.4, используй этот договор как bootstrap. Локальный updater 1.2 не имеет полномочий на required protected migration и не может объявить полный успех 1.2→1.4.
- Для исходной 1.3 используй установленный prompt-only updater 1.3, проверяя package 1.4 и его changelog.
- Для исходной 1.4 и целевой 1.5 используй только договор целого опубликованного пакета 1.5 с точной картой 1.4→1.5. Проектная папка с
VERSION=1.5-candidate не является опубликованным источником и не может быть установлена в другой проект как релиз.
- Для исходной 1.5 и целевой 1.6 используй только договор целого опубликованного пакета 1.6 с точной картой 1.5→1.6. Персонализированный проект или частичный overlay не является release source.
- Получи источник в новую безопасную временную область вне обновляемого проекта. Не исполняй никакой код источника, включая scripts и макросы; не записывай токены и параметры доступа.
- Приведи источник к одному файловому дереву целого пакета. Запрети выход путей, абсолютные/дублирующиеся нормализованные пути, reparse/symlink наружу, спецфайлы и подмену корня.
- Недоступный, закрытый, повреждённый, candidate-only или неполный источник отклони с точной причиной без изменения проекта.
2. Статическая проверка до Gate
- Найди ровно один корень с
PROJECT.md, AGENTS.md, VERSION, CHANGELOG.md; проверь Assisted / 1.0 и ожидаемую версию.
- Статически прочитай service set, все
tfw-* skills и metadata. Убедись, что .agents/skills/tfw-update/ содержит только SKILL.md и agents/openai.yaml, а clean package не содержит .codex/, workspace/, inbox, human profiles, project_id, персонализированную карточку, task/pilot evidence, local binding registry, temp/conflict copies или reparse points; PROJECT.md обязан быть НЕ ИНИЦИАЛИЗИРОВАН. Для 1.6 дополнительно проверь, что tfw-identity содержит только SKILL.md и agents/openai.yaml, без helper и scripts/.
- Составь manifests текущего и нового service set; перечисли additions/changes/removals.
- Составь manifest всех
workspace/, knowledge/, team/; повторно сними его непосредственно перед записью.
- Из
CHANGELOG.md выбери только карту, соответствующую точной исходной версии.
1.5 → 1.6
- источник — только целый нейтральный package
VERSION=1.6 с точной картой changelog; package PROJECT.md имеет Состояние: НЕ ИНИЦИАЛИЗИРОВАН и не содержит project_id;
- существующий единственный canonical UUID
project_id, таблица «Карточка проекта», цели, professional AI role и mental model сохраняются дословно; missing/duplicate/invalid project state блокирует запись;
- valid human/automation profile filenames, identifiers и обе role-строки сохраняются без пересчёта и переименования; 1.5→1.6 не выполняет profile migration, а mixed/duplicate/invalid schema является blocker;
workspace/, team/ и knowledge сохраняются побайтово, кроме точных stock knowledge targets, названных version-specific картой пакета и совпавших с опубликованными исходными SHA-256, либо по отдельному точному records Gate; приватные имена и хэши не становятся общей нормой;
- identity change set применяется целиком: active contract/user guide/skill/metadata согласованы,
tfw_identity.py, tfw-identity/scripts/ и активные helper references отсутствуют; обычному пользователю не требуются Python, Git, shell или исполняемый helper;
- local bindings TFW Full и Assisted не читаются из package/project root, не изменяются, не копируются между namespace/устройствами и не входят в manifests;
- установленный 1.5 не требует legacy cleanup; историческая карта ниже применяется только к точной source-version 1.2/1.3/pre-acceptance 1.4;
- postconditions:
VERSION=1.6, uninitialized clean package, нулевой необъяснённый protected diff, только точные разрешённые knowledge changes при выполненных preconditions, сохранение персонализации/valid identifiers и common active/package equality кроме нейтрализованного PROJECT.md;
- scenario matrix включает existing/new participant, missing/ambiguous surname, surname collision, shared device, unsafe local store/session-only, autonomous handoff/review, отсутствие Full writes/helper/local state в package и неизменность source starter.
1.4 → опубликованный 1.5
- этот маршрут недоступен, пока источник имеет marker
1.5-candidate или не содержит принятую точную migration map;
- существующий единственный валидный UUID
project_id сохраняется; при отсутствии после Gate генерируется новый UUID конкретного проекта, но package ID/путь/имя человека не используются;
- карточка проекта, цели, knowledge, legacy-source
work/ с one-to-one target workspace/, task IDs, владельцы, professional AI role и mental model сохраняются;
- каждый legacy human profile с ровно одним полем
Роль: <текст> преобразуется one-to-one в Роль в компании: <тот же текст> и Роль в проекте: не указана; валидная новая schema, filename и identifier сохраняются, даже если identifier появился по прежней naming-норме; mixed/duplicate/invalid profile блокирует запись;
- новая surname-based naming-норма применяется только к новым профилям; отсутствие фамилии и фамильная коллизия требуют уточнения. Переименование существующего filename/identifier допустимо только как отдельное явно согласованное исправление конкретного невалидного профиля с pre/post manifest, не как массовая migration;
- stock knowledge targets обновляются только при exact source-version SHA-256 из changelog либо по отдельному точному records Gate; приватные имена и digests в публичный договор не встраиваются;
- local bindings TFW Full и legacy Assisted
tfw-assisted/bindings.yml не читаются, не мигрируют и не входят в manifests; canonical Assisted использует %LOCALAPPDATA%\tfw\assisted\bindings.yml или ~/.tfw/assisted/bindings.yml и создаёт запись заново через human gate;
- postconditions включают uninitialized, 0/1/3/large profiles, new/existing profile, surname Cyrillic/Latin, missing surname, surname collision с подтверждённым уточнением, fixed/ask/missing/invalid/duplicate binding, foreign lock, shared-store rejection, сохранение valid identifiers, manual/auto task roles, arbitrary task type, отсутствие Full writes и local state/hard-coded participant names в package.
1.3 → 1.4
- существующий legacy-source
work/<legacy-ID>/ переносится one-to-one в workspace/<legacy-ID>/; ID, trace semantics и история не переписываются;
- stock knowledge targets заменяются только при совпадении известных исходных SHA-256 из changelog, без публикации приватных имён в общей карте;
- кастомизированный protected-файл является конфликтом и требует отдельного решения;
- остальные protected-файлы должны остаться побайтово неизменными.
- прежние TFW hooks очищаются по version-specific карте раздела «Legacy TFW hook cleanup».
1.2 → 1.4
- каждый прямой legacy-source
work/<status>/<legacy-ID>/ переносится one-to-one в workspace/<legacy-ID>/ только при уникальном ID, совпадении ID/статуса, существующем trace и свободном target;
- в traces допустимы только нормализация обязательных полей и живых путей
work/<status>/<ID>/ → workspace/<ID>/; историческое описание не переписывается;
- stock knowledge targets обновляются только при exact source-version hashes из changelog и отдельной проверке preconditions;
- остальные protected-файлы и пользовательские артефакты сохраняются побайтово.
- прежние TFW hooks очищаются по version-specific карте раздела «Legacy TFW hook cleanup».
Pre-acceptance 1.4 → corrected 1.4
- same-version correction разрешена только при доказанном pre-acceptance manifest либо точном service diff;
- task folders, персонализация и protected set не меняются;
- прежние TFW hooks очищаются по карте pre-acceptance 1.4;
- unexpected divergence вне объявленного service diff останавливает merge/overwrite.
Legacy TFW hook cleanup
Legacy TFW hooks исключены из исправленной 1.4 после проблем с надёжностью. После единственного Gate version-specific обновления их cleanup является частью уже согласованной записи и не требует дополнительного вопроса.
| Source |
.codex/hooks.json |
.codex/hooks/tfw-hook.ps1 |
.codex/hooks/tfw-hook.sh |
| 1.2 |
044013a5cb31ca8c29708b0f83d5ef0e53aecb83d12091c60434a750735043ce |
85191702eef52dc5191e27485ac50c8e27dd334e2a6bc30d82d14711829361c7 |
18039f1631375d7bea2332ffa0c55fdb602315d69ffa98f76f3875fca9eb5a1a |
| 1.3 |
c09d0de4c7043691d9cbbae270aaa058793e9e1503d39d4f177937d938a6e374 |
c09e9ac226e242075ab2d06fd8bedd2ae24a0c0efd3e45676978a3f34ab43842 |
c21e2cf54566f9a3ea02f769a7bd11af1ccec046a4a66cc135ded614386fda86 |
| pre-acceptance 1.4 |
c09d0de4c7043691d9cbbae270aaa058793e9e1503d39d4f177937d938a6e374 |
c29b66b3565741d9b86e76a24ad8620b9809f8c6682f630c7564315ef9e2d58d |
e05076eeae03b980f9db7d0ccac02ad859e7a56c5393d06e3245d4dfd94ae49a |
Для каждого пути вычисли SHA-256 отдельно:
- Если hash равен stock hash точной source-version, удали файл автоматически.
- Если adapter по штатному TFW-пути изменён, до удаления побайтово скопируй его как
.codex/tfw-quarantine/<source-version>/<sha256-prefix>-<basename> и запиши полный SHA-256 в отчёт. Если target уже существует с тем же полным hash, reuse допустим; с иным содержимым — остановка.
- Если
hooks.json изменён, сначала сохрани оригинал по той же quarantine-схеме, затем распарси JSON и удали только command-объекты, где command или commandWindows ссылается на .codex/hooks/tfw-hook.ps1 или .codex/hooks/tfw-hook.sh. Пустые TFW-only containers можно удалить; unrelated hook entries/events и top-level fields сохрани семантически.
- Невалидный JSON, неоднозначная структура либо невозможность доказать сохранность unrelated entries останавливает запись. Hash mismatch никогда не разрешает silent destructive delete.
- Другие файлы/папки
.codex/ сохраняются побайтово. После cleanup три штатных TFW-пути отсутствуют либо hooks.json остаётся только с unrelated entries; активных ссылок на TFW adapters нет.
Коллизия, несовпадение status/ID, кастомизированный stock-файл, параллельное изменение, неполный пакет или необъяснённая migration останавливают процесс до записи.
3. Единственный Gate записи
Покажи пользователю:
- форму источника и фактические средства доступа;
- версии до/после и корень пакета;
- service manifest: additions/changes/removals;
- точную version-specific protected migration map и hash-preconditions;
- сохранение/создание
project_id, profile schema/naming map и доказанное исключение обоих local namespaces для 1.4→1.5;
- сохранение
project_id, персонализации, valid profiles/identifiers, prompt-only identity и доказанное исключение обоих local namespaces для 1.5→1.6;
- точные stock hashes, план stock-delete/custom-quarantine и сохраняемое unrelated
.codex content;
- сохраняемые карточку проекта, профессиональную роль и ментальную модель;
- проверки после установки и условия остановки.
Запроси одно явное согласование на весь план записи. Если источник или проект изменился после проверки, пересобери manifests и запроси Gate заново.
4. Примени после согласования
- Повтори protected manifest и исходные hashes; остановись при расхождении.
- Сохрани дословно таблицу «Карточка проекта», пользовательский проектный контекст и два значения раздела «Настройка этого проекта».
- Замени service set целиком из проверенного пакета; верни персонализацию и маркеры Assisted / 1.0. Не overlay/delete
.codex/ как service directory.
- Выполни только выбранную и утверждённую migration map. Не переименовывай legacy-ID.
- Только если выбранная source-version имеет точную legacy cleanup-карту, выполни её: stock-delete или backup/quarantine плюс хирургическое отключение регистрации. Никакой код источника не исполняй.
- Для будущих задач проверь новый формат
YYYYMMDD-HHMMSS__slug, обязательного владельца, запрет __ в slug и отказ от перезаписи при коллизии.
- Для 1.5 и новее проверь раздельные participant/corporate role/project role/owner/AI role, динамические profiles, surname-based создание только новых identifiers, сохранение уже valid identifiers и то, что оба local binding namespace отсутствуют в package/shared manifests. Для 1.6 также проверь prompt-only identity, отсутствие helper/
scripts/ и обязательной пользовательской runtime-зависимости.
- Создай manifest после записи. Missing, unexpected и необъяснённо изменённых protected-файлов должно быть ноль; разрешённые version-specific protected changes перечисли отдельно; unrelated
.codex должно совпасть побайтово или семантически для сохранённых JSON entries.
- В изолированной доверенной области проверь skills/metadata, trace/result/link/secret checks, version-specific cleanup paths только для соответствующих старых источников, stock/custom/quarantine scenarios, новый/legacy ID, точные имена ролей и version-specific postconditions.
- Отчитайся manifests, версиями, изменёнными service/protected-файлами, stock hashes, quarantine paths, сохранённой персонализацией/unrelated
.codex, исключённым local state, проверками и остаточными рисками.
После изменения AGENTS.md попроси новую сессию.
Где остановиться
До записи — на отсутствии/невалидности источника, конфликте либо единственном Gate. После согласия доведи service replacement, только утверждённую migration и проверки до конца. При любом необъяснённом protected change сообщи его первым делом и не объявляй успех.
1---2name: tfw-update-23description: Команда /tfw-update получает целый пакет TFW, проверяет version-specific migration и после одного согласования обновляет service set, сохраняя project identity, персонализацию, valid profile identifiers, workspace/knowledge/team и исключая device-local bindings Full/Assisted; применяет только доказанную migration map.4---56# /tfw-update78Обнови набор целиком после одного согласования на запись. Это prompt-only процесс: самостоятельно выбирай доступные инструменты среды и не требуй конкретную ОС, runtime, shell, архиватор, браузер или коннектор.910## Service set1112`AGENTS.md`, `PROJECT.md`, `README.md`, `MIGRATION.md`, `VERSION`, `CHANGELOG.md`, `шаблоны/`, `.agents/skills/`.1314Опубликованные clean packages 1.4, 1.5 и 1.6 не содержат `.codex/` или local bindings. Существующая `.codex/` является пользовательской областью, кроме точной version-specific cleanup-карты прежних TFW hooks ниже. Unrelated entries и файлы сохраняются.1516## Protected set1718`workspace/`, `knowledge/`, `team/` не меняются, если migration конкретной версии одновременно не:19201. перечислена в `CHANGELOG.md` пакета;212. показана точной картой исходных/целевых путей и hash-preconditions;223. отдельно включена в единственный Gate записи;234. окружена manifests до/после по относительным путям, размерам и SHA-256.2425Task ID никогда не переписывается. Новая версия меняет только схему будущих задач; legacy task folders остаются на стабильных путях.2627`project_id` и profile schema относятся к protected project identity. Их version-specific migration допустима только по точной карте changelog и единственному Gate. Machine-local registries TFW Full и Assisted не являются частью проекта: их не ищут в пакете/project root, не читают как migration source, не копируют между namespace/устройствами, не публикуют и не включают в shared manifests.2829## 1. Получи целый пакет и выбери договор30311. Прочитай текущие `VERSION`/`CHANGELOG.md`. Если источник не дан, задай ровно один вопрос: «Где находится пакет новой версии — путь, архив, ссылка, вложение, облачный объект или другое доступное представление?»322. Если исходная версия 1.2 и пользователь явно поручил применить `tfw-update/SKILL.md` из пакета 1.4, используй этот договор как bootstrap. Локальный updater 1.2 не имеет полномочий на required protected migration и не может объявить полный успех 1.2→1.4.333. Для исходной 1.3 используй установленный prompt-only updater 1.3, проверяя package 1.4 и его changelog.344. Для исходной 1.4 и целевой 1.5 используй только договор целого опубликованного пакета 1.5 с точной картой 1.4→1.5. Проектная папка с `VERSION=1.5-candidate` не является опубликованным источником и не может быть установлена в другой проект как релиз.355. Для исходной 1.5 и целевой 1.6 используй только договор целого опубликованного пакета 1.6 с точной картой 1.5→1.6. Персонализированный проект или частичный overlay не является release source.366. Получи источник в новую безопасную временную область вне обновляемого проекта. Не исполняй никакой код источника, включая scripts и макросы; не записывай токены и параметры доступа.377. Приведи источник к одному файловому дереву целого пакета. Запрети выход путей, абсолютные/дублирующиеся нормализованные пути, reparse/symlink наружу, спецфайлы и подмену корня.388. Недоступный, закрытый, повреждённый, candidate-only или неполный источник отклони с точной причиной без изменения проекта.3940## 2. Статическая проверка до Gate41421. Найди ровно один корень с `PROJECT.md`, `AGENTS.md`, `VERSION`, `CHANGELOG.md`; проверь Assisted / 1.0 и ожидаемую версию.432. Статически прочитай service set, все `tfw-*` skills и metadata. Убедись, что `.agents/skills/tfw-update/` содержит только `SKILL.md` и `agents/openai.yaml`, а clean package не содержит `.codex/`, `workspace/`, inbox, human profiles, `project_id`, персонализированную карточку, task/pilot evidence, local binding registry, temp/conflict copies или reparse points; `PROJECT.md` обязан быть `НЕ ИНИЦИАЛИЗИРОВАН`. Для 1.6 дополнительно проверь, что `tfw-identity` содержит только `SKILL.md` и `agents/openai.yaml`, без helper и `scripts/`.443. Составь manifests текущего и нового service set; перечисли additions/changes/removals.454. Составь manifest всех `workspace/`, `knowledge/`, `team/`; повторно сними его непосредственно перед записью.465. Из `CHANGELOG.md` выбери только карту, соответствующую точной исходной версии.4748### 1.5 → 1.64950- источник — только целый нейтральный package `VERSION=1.6` с точной картой changelog; package `PROJECT.md` имеет `Состояние: НЕ ИНИЦИАЛИЗИРОВАН` и не содержит `project_id`;51- существующий единственный canonical UUID `project_id`, таблица «Карточка проекта», цели, professional AI role и mental model сохраняются дословно; missing/duplicate/invalid project state блокирует запись;52- valid human/automation profile filenames, identifiers и обе role-строки сохраняются без пересчёта и переименования; 1.5→1.6 не выполняет profile migration, а mixed/duplicate/invalid schema является blocker;53- `workspace/`, `team/` и knowledge сохраняются побайтово, кроме точных stock knowledge targets, названных version-specific картой пакета и совпавших с опубликованными исходными SHA-256, либо по отдельному точному records Gate; приватные имена и хэши не становятся общей нормой;54- identity change set применяется целиком: active contract/user guide/skill/metadata согласованы, `tfw_identity.py`, `tfw-identity/scripts/` и активные helper references отсутствуют; обычному пользователю не требуются Python, Git, shell или исполняемый helper;55- local bindings TFW Full и Assisted не читаются из package/project root, не изменяются, не копируются между namespace/устройствами и не входят в manifests;56- установленный 1.5 не требует legacy cleanup; историческая карта ниже применяется только к точной source-version 1.2/1.3/pre-acceptance 1.4;57- postconditions: `VERSION=1.6`, uninitialized clean package, нулевой необъяснённый protected diff, только точные разрешённые knowledge changes при выполненных preconditions, сохранение персонализации/valid identifiers и common active/package equality кроме нейтрализованного `PROJECT.md`;58- scenario matrix включает existing/new participant, missing/ambiguous surname, surname collision, shared device, unsafe local store/session-only, autonomous handoff/review, отсутствие Full writes/helper/local state в package и неизменность source starter.5960### 1.4 → опубликованный 1.56162- этот маршрут недоступен, пока источник имеет marker `1.5-candidate` или не содержит принятую точную migration map;63- существующий единственный валидный UUID `project_id` сохраняется; при отсутствии после Gate генерируется новый UUID конкретного проекта, но package ID/путь/имя человека не используются;64- карточка проекта, цели, knowledge, legacy-source `work/` с one-to-one target `workspace/`, task IDs, владельцы, professional AI role и mental model сохраняются;65- каждый legacy human profile с ровно одним полем `Роль: <текст>` преобразуется one-to-one в `Роль в компании: <тот же текст>` и `Роль в проекте: не указана`; валидная новая schema, filename и identifier сохраняются, даже если identifier появился по прежней naming-норме; mixed/duplicate/invalid profile блокирует запись;66- новая surname-based naming-норма применяется только к новым профилям; отсутствие фамилии и фамильная коллизия требуют уточнения. Переименование существующего filename/identifier допустимо только как отдельное явно согласованное исправление конкретного невалидного профиля с pre/post manifest, не как массовая migration;67- stock knowledge targets обновляются только при exact source-version SHA-256 из changelog либо по отдельному точному records Gate; приватные имена и digests в публичный договор не встраиваются;68- local bindings TFW Full и legacy Assisted `tfw-assisted/bindings.yml` не читаются, не мигрируют и не входят в manifests; canonical Assisted использует `%LOCALAPPDATA%\tfw\assisted\bindings.yml` или `~/.tfw/assisted/bindings.yml` и создаёт запись заново через human gate;69- postconditions включают uninitialized, 0/1/3/large profiles, new/existing profile, surname Cyrillic/Latin, missing surname, surname collision с подтверждённым уточнением, fixed/ask/missing/invalid/duplicate binding, foreign lock, shared-store rejection, сохранение valid identifiers, manual/auto task roles, arbitrary task type, отсутствие Full writes и local state/hard-coded participant names в package.7071### 1.3 → 1.47273- существующий legacy-source `work/<legacy-ID>/` переносится one-to-one в `workspace/<legacy-ID>/`; ID, trace semantics и история не переписываются;74- stock knowledge targets заменяются только при совпадении известных исходных SHA-256 из changelog, без публикации приватных имён в общей карте;75- кастомизированный protected-файл является конфликтом и требует отдельного решения;76- остальные protected-файлы должны остаться побайтово неизменными.77- прежние TFW hooks очищаются по version-specific карте раздела «Legacy TFW hook cleanup».7879### 1.2 → 1.48081- каждый прямой legacy-source `work/<status>/<legacy-ID>/` переносится one-to-one в `workspace/<legacy-ID>/` только при уникальном ID, совпадении ID/статуса, существующем trace и свободном target;82- в traces допустимы только нормализация обязательных полей и живых путей `work/<status>/<ID>/ → workspace/<ID>/`; историческое описание не переписывается;83- stock knowledge targets обновляются только при exact source-version hashes из changelog и отдельной проверке preconditions;84- остальные protected-файлы и пользовательские артефакты сохраняются побайтово.85- прежние TFW hooks очищаются по version-specific карте раздела «Legacy TFW hook cleanup».8687### Pre-acceptance 1.4 → corrected 1.48889- same-version correction разрешена только при доказанном pre-acceptance manifest либо точном service diff;90- task folders, персонализация и protected set не меняются;91- прежние TFW hooks очищаются по карте pre-acceptance 1.4;92- unexpected divergence вне объявленного service diff останавливает merge/overwrite.9394### Legacy TFW hook cleanup9596Legacy TFW hooks исключены из исправленной 1.4 после проблем с надёжностью. После единственного Gate version-specific обновления их cleanup является частью уже согласованной записи и не требует дополнительного вопроса.9798| Source | `.codex/hooks.json` | `.codex/hooks/tfw-hook.ps1` | `.codex/hooks/tfw-hook.sh` |99|---|---|---|---|100| 1.2 | `044013a5cb31ca8c29708b0f83d5ef0e53aecb83d12091c60434a750735043ce` | `85191702eef52dc5191e27485ac50c8e27dd334e2a6bc30d82d14711829361c7` | `18039f1631375d7bea2332ffa0c55fdb602315d69ffa98f76f3875fca9eb5a1a` |101| 1.3 | `c09d0de4c7043691d9cbbae270aaa058793e9e1503d39d4f177937d938a6e374` | `c09e9ac226e242075ab2d06fd8bedd2ae24a0c0efd3e45676978a3f34ab43842` | `c21e2cf54566f9a3ea02f769a7bd11af1ccec046a4a66cc135ded614386fda86` |102| pre-acceptance 1.4 | `c09d0de4c7043691d9cbbae270aaa058793e9e1503d39d4f177937d938a6e374` | `c29b66b3565741d9b86e76a24ad8620b9809f8c6682f630c7564315ef9e2d58d` | `e05076eeae03b980f9db7d0ccac02ad859e7a56c5393d06e3245d4dfd94ae49a` |103104Для каждого пути вычисли SHA-256 отдельно:1051061. Если hash равен stock hash точной source-version, удали файл автоматически.1072. Если adapter по штатному TFW-пути изменён, до удаления побайтово скопируй его как `.codex/tfw-quarantine/<source-version>/<sha256-prefix>-<basename>` и запиши полный SHA-256 в отчёт. Если target уже существует с тем же полным hash, reuse допустим; с иным содержимым — остановка.1083. Если `hooks.json` изменён, сначала сохрани оригинал по той же quarantine-схеме, затем распарси JSON и удали только command-объекты, где `command` или `commandWindows` ссылается на `.codex/hooks/tfw-hook.ps1` или `.codex/hooks/tfw-hook.sh`. Пустые TFW-only containers можно удалить; unrelated hook entries/events и top-level fields сохрани семантически.1094. Невалидный JSON, неоднозначная структура либо невозможность доказать сохранность unrelated entries останавливает запись. Hash mismatch никогда не разрешает silent destructive delete.1105. Другие файлы/папки `.codex/` сохраняются побайтово. После cleanup три штатных TFW-пути отсутствуют либо `hooks.json` остаётся только с unrelated entries; активных ссылок на TFW adapters нет.111112Коллизия, несовпадение status/ID, кастомизированный stock-файл, параллельное изменение, неполный пакет или необъяснённая migration останавливают процесс до записи.113114## 3. Единственный Gate записи115116Покажи пользователю:117118- форму источника и фактические средства доступа;119- версии до/после и корень пакета;120- service manifest: additions/changes/removals;121- точную version-specific protected migration map и hash-preconditions;122- сохранение/создание `project_id`, profile schema/naming map и доказанное исключение обоих local namespaces для 1.4→1.5;123- сохранение `project_id`, персонализации, valid profiles/identifiers, prompt-only identity и доказанное исключение обоих local namespaces для 1.5→1.6;124- точные stock hashes, план stock-delete/custom-quarantine и сохраняемое unrelated `.codex` content;125- сохраняемые карточку проекта, профессиональную роль и ментальную модель;126- проверки после установки и условия остановки.127128Запроси одно явное согласование на весь план записи. Если источник или проект изменился после проверки, пересобери manifests и запроси Gate заново.129130## 4. Примени после согласования1311321. Повтори protected manifest и исходные hashes; остановись при расхождении.1332. Сохрани дословно таблицу «Карточка проекта», пользовательский проектный контекст и два значения раздела «Настройка этого проекта».1343. Замени service set целиком из проверенного пакета; верни персонализацию и маркеры Assisted / 1.0. Не overlay/delete `.codex/` как service directory.1354. Выполни только выбранную и утверждённую migration map. Не переименовывай legacy-ID.1365. Только если выбранная source-version имеет точную legacy cleanup-карту, выполни её: stock-delete или backup/quarantine плюс хирургическое отключение регистрации. Никакой код источника не исполняй.1376. Для будущих задач проверь новый формат `YYYYMMDD-HHMMSS__slug`, обязательного владельца, запрет `__` в slug и отказ от перезаписи при коллизии.1387. Для 1.5 и новее проверь раздельные participant/corporate role/project role/owner/AI role, динамические profiles, surname-based создание только новых identifiers, сохранение уже valid identifiers и то, что оба local binding namespace отсутствуют в package/shared manifests. Для 1.6 также проверь prompt-only identity, отсутствие helper/`scripts/` и обязательной пользовательской runtime-зависимости.1398. Создай manifest после записи. Missing, unexpected и необъяснённо изменённых protected-файлов должно быть ноль; разрешённые version-specific protected changes перечисли отдельно; unrelated `.codex` должно совпасть побайтово или семантически для сохранённых JSON entries.1409. В изолированной доверенной области проверь skills/metadata, trace/result/link/secret checks, version-specific cleanup paths только для соответствующих старых источников, stock/custom/quarantine scenarios, новый/legacy ID, точные имена ролей и version-specific postconditions.14110. Отчитайся manifests, версиями, изменёнными service/protected-файлами, stock hashes, quarantine paths, сохранённой персонализацией/unrelated `.codex`, исключённым local state, проверками и остаточными рисками.142143После изменения `AGENTS.md` попроси новую сессию.144145## Где остановиться146147До записи — на отсутствии/невалидности источника, конфликте либо единственном Gate. После согласия доведи service replacement, только утверждённую migration и проверки до конца. При любом необъяснённом protected change сообщи его первым делом и не объявляй успех.