Skip to content

[bug] update.sh удаляет из каталога шаблона файлы, которые канон держит в истории — зеркало грязнится при каждом обновлении #428

Description

@AVNechaev

Что произошло

Установка 0.38.3 (bash update.sh --yes в FMT-exocortex-template/) удалила десять файлов с пометкой «(удалён: устарел)»:

sessions/2026-06/2026-06-17-01-kimi-setup/{00-writer,01-peer,02-writer,03-peer}.md
sessions/2026-06/2026-06-17-01-kimi-setup/{meta.yaml,report.md}
docs/developer/{README,card-template,developer-guide,testing-as-spec}.md

Источник — секция устаревших файлов в update-manifest.json (строки 2405-2445). Там же значатся docs/developer/code-style.md и docs/developer/working-with-claude.md; локально их не оказалось, поэтому в удаление они не попали.

Все эти файлы канон по-прежнему держит в upstream/main:

git -C FMT-exocortex-template cat-file -e upstream/main:docs/developer/README.md     # выходит успешно
git -C FMT-exocortex-template cat-file -e upstream/main:docs/developer/code-style.md # тоже

Почему это дефект, а не косметика

Каталог FMT-exocortex-template/ играет две роли одновременно:

  1. рабочая копия поставки, куда update.sh кладёт скачанные файлы;
  2. git-зеркало канона (origin — форк пользователя, upstream — канон).

Список устаревших файлов написан для первой роли, а git видит результат по второй. После обновления git status показывает десять удалений, и дальше развилка без хорошей ветки:

  • закоммитить — форк разойдётся с каноном на десять файлов, и merge --ff-only при следующей синхронизации перестанет проходить;
  • не коммитить — каталог остаётся грязным, а проверки чистоты деревьев на закрытии дня и недели ругаются;
  • вернуть файлы (git restore docs/developer sessions/2026-06) — до следующего обновления, после которого всё повторится.

Список устаревших файлов из манифеста не убирается, поэтому ситуация воспроизводится при каждом запуске обновления.

Что ожидалось

Одно из двух, на ваш выбор:

  • удаление устаревших файлов не применяется внутри каталога, который является git-зеркалом канона (признак: у каталога есть remote upstream, указывающий на канон); либо
  • канон сам удаляет эти файлы из своей истории — тогда список устаревших не нужен, зеркало приведёт каталог в то же состояние обычным fast-forward.

Промежуточный вариант — обновление явно сообщает о конфликте ролей, а не оставляет пользователя с грязным деревом.

Шаги воспроизведения

  1. Держать FMT-exocortex-template/ как форк канона с remote upstream.
  2. Синхронизировать зеркало: git fetch upstream && git merge --ff-only upstream/main.
  3. Прогнать bash update.sh --yes.
  4. git status --short — десять удалений, которых канон не делал.

Контекст

  • Файл: update.sh + секция устаревших файлов в update-manifest.json
  • Дата: 2026-08-13
  • IWE commit: b4f24c6 (0.38.3)
  • Установка: Linux (Manjaro)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions