Mark legacy history entries

This commit is contained in:
“Naeel”
2026-09-05 12:55:42 +03:00
parent 1e305485be
commit 5d44c836e7
+40 -8
View File
@@ -1,5 +1,16 @@
# 2026-09-05 — browser file-picker и иерархическое дерево
> **Статус документа:** исторический журнал изменений. Устаревшие промежуточные
> состояния помечены `LEGACY`; исправленные дефекты помечены `RESOLVED`.
## Текущее состояние
- **Актуальная версия:** `0.1.9`.
- **Актуальная архитектура:** browser-only file-picker без VM upload, backend
sessions и upload API.
- **Актуальный commit:** `1e30548 Fix async picker race`, отправлен в
`origin/master`.
## Исходная задача
- Требовался браузерный выбор документов в `upload-platform`.
@@ -13,7 +24,11 @@
- Ограничения по размеру и количеству файлов не добавлялись.
- Должны поддерживаться вложенные структуры: `folder -> ZIP -> subfolder -> ZIP -> file`.
## Реализовано
## Реализовано на этапе версии 0.1.7 — LEGACY
> **LEGACY:** раздел фиксирует состояние на момент версии `0.1.7`, а не текущий
> состав кода. Для актуального состояния см. раздел «Текущее состояние» и
> последующие исправления ниже.
- Удалён VM upload layer: PUT на внешний VM endpoint, pull, backend sessions и upload API.
- Удалены старые backend/API части upload-platform по явному запросу:
@@ -100,7 +115,11 @@
- Повторный выбор того же файла после удаления снова разрешён.
- Изменения не затрагивают фильтрацию расширений, ZIP-рекурсию и публичный API picker.
## Жёсткие тесты по плану — 2026-09-05
## Жёсткие тесты по плану — 2026-09-05 — HISTORICAL SNAPSHOT
> **HISTORICAL SNAPSHOT:** результаты ниже относятся к тестовому проходу до
> исправления traversal. Актуальная повторная проверка приведена в разделе
> «Повторная проверка» и в последующих записях.
### PASS
@@ -115,18 +134,28 @@
- Выбор папки с одинаковыми именами в разных каталогах сохраняет оба файла.
- Рабочее дерево Git после тестов осталось чистым.
### FAIL
### FAIL — RESOLVED / LEGACY RESULT
> **RESOLVED:** перечисленные FAIL описывают состояние до исправления traversal
> и не являются текущими дефектами. Раздел сохранён как исторический результат
> тестирования.
- ZIP entry `folder/../../escape.txt` попадает в дерево с тем же traversal-путём.
- ZIP entry `/absolute.md` попадает в дерево с двойным слэшем `archive.zip//absolute.md`.
- Пути с `..` создают видимые группы `..`.
- Путь `<пустая часть>/absolute.md` создаёт группу с пустым отображаемым именем.
### Вывод
### Вывод — LEGACY
> **LEGACY:** это вывод на момент обнаружения дефекта; после исправления
> traversal он больше не описывает текущее состояние.
Фильтрация расширений, XSS-экранирование, дедупликация и обработка пустых/глубоких ZIP работают. Обнаружен отдельный дефект нормализации ZIP-путей: перед построением дерева нужно отклонять абсолютные пути, `..`, пустые сегменты и backslash traversal. В текущем тестовом проходе код не менялся; FAIL оставлен документированным для следующего исправления.
## Git
## Git — HISTORICAL REFERENCES
> **HISTORICAL REFERENCES:** ссылки ниже перечисляют коммиты этапов разработки,
> а не являются текущим состоянием ветки. Текущий commit указан в начале файла.
## Исправление traversal — 2026-09-05
@@ -140,13 +169,14 @@
- Отклоняются пустые entry, абсолютные пути, backslash, `.`, `..` и пустые сегменты.
- Пути и имена leaf-файлов строятся только из проверенных сегментов.
- Вложенный ZIP с опасным путём пропускается без прерывания обработки внешнего ZIP.
- Версия повышена до `0.1.8`.
- Версия на момент исправления повышена до `0.1.8`; **LEGACY:** текущая версия
уже `0.1.9` после исправления async race.
### Повторная проверка
ZIP с `folder/../../escape.txt`, `/absolute.md`, `windows\\..\\bad.txt`, `folder/./dot.txt` и безопасным `safe/normal.txt` оставил только `paths.zip/safe/normal.txt`. Группы `..`, пустая группа и абсолютный путь больше не отображаются. Результат: `1 файлов · 2 B`.
## Исправление async race — 2026-09-05
## Исправление async race — 2026-09-05 — АКТУАЛЬНО
### Причина
@@ -170,4 +200,6 @@ ZIP с `folder/../../escape.txt`, `/absolute.md`, `windows\\..\\bad.txt`, `folde
- `85605fe Remove VM upload layer; keep file picker only` — удаление VM upload и переход к picker-only.
- `a965f18 Add hierarchical file picker` — иерархическое дерево, вложенные ZIP, удаление групп и файлов.
- До добавления этой записи `master` был синхронизирован с `origin/master`.
- Текущая запись добавляется отдельным коммитом и отправляется в `origin/master`.
- Текущая запись добавлялась отдельными коммитами и отправлялась в
`origin/master`; **LEGACY:** эта формулировка описывает историю публикации,
а не текущую операцию деплоя.