Рабочее прототипное название проекта. Оно может быть изменено позднее без изменения назначения или архитектуры приложения.
CADContour2D — настольное приложение для восстановления двумерной CAD-геометрии плоских деталей по большим облакам измеренных точек.
Программа принимает плоские облака в текстовых форматах .asc и .xyz, позволяет получить и вручную скорректировать внешний контур, отверстия и внутренние вырезы, а затем построить компактную точную геометрию из CAD-примитивов и экспортировать её в DXF для дальнейшей работы, в том числе в Siemens NX.
Проект рассчитан на обработку файлов размером в несколько гигабайт на обычных офисных компьютерах с ограниченной оперативной памятью, HDD и возможным доступом к исходным данным через медленную локальную сеть.
Поддерживаются:
.asc
.xyz
Оба расширения рассматриваются как один формат без заголовка:
X Y Z
X Y Z
X Y Z
...
Основной рабочий случай — плоское облако с Z = 0.
Основные геометрические единицы проекта — миллиметры.
Конечный результат — редактируемая двумерная CAD-геометрия детали:
- внешний контур;
- отверстия;
- внутренние вырезы.
Итоговая CAD-геометрия первой версии содержит только LINE, ARC и CIRCLE. Контур — замкнутая последовательность LINE/ARC либо самостоятельный CIRCLE; внешний и все внутренние контуры замкнуты. Это единый контракт автоматического fitting, ручного редактирования, precise-stage, Geometry Optimization и validation.
Финальная геометрия экспортируется в компактный 2D DXF для Siemens NX с сохранением типов и координатами в миллиметрах:
LineSegment → LINE
CircularArc → ARC
Circle → CIRCLE
SPLINE/BSpline и ELLIPSE не поддерживаются в первой версии. DXF передаёт восстановленную геометрию; сохранение NX constraints, 3D bodies и истории построения не требуется. Версия DXF и совместимость будущего exporter проверяются отдельно.
Приложение также использует сохраняемый рабочий проект .pc2dproj и локальный постоянный кэш исходных точек.
Целевая пользовательская модель: при запуске без проекта программа предлагает выбрать ASC/XYZ. Новый проект создаётся и принимается только после успешного потокового импорта и создания постоянного Point Cache; самостоятельного пустого проекта нет. «Новый проект» начинает выбор другого облака с подтверждением замены открытого проекта. До успеха текущий проект и история сохраняются; ошибка, отмена или отказ от подтверждения их не уничтожают. После успеха прежняя история Undo/Redo не переносится, Undo не возвращает предыдущий проект, ранее принятые постоянные файлы cache не удаляются из-за замены.
В новом проекте выбранный cell начинается с 1 мм без наследования прежнего значения. Это изменяемый пользователем параметр последующего явного построения Density Map; импорт не требует cell и карту не строит. Изменение выбранного cell не меняет существующие карты; каждая версия хранит собственные параметры построения. Автоматическая рекомендация cell — необязательное будущее улучшение вне базового workflow, без выбранного алгоритма и утверждённой необходимости, не зависимость задач 04 или 06; ручной выбор обязателен.
GUI выбора ASC/XYZ, подтверждения замены/Z и карточка dataset реализованы в 04.4A.
В 05.2–05.4 реализованы C++ Save/Save As/Open .pc2dproj, восстановление параметров,
частично доступного состояния и Autosave/Recovery; 05.1–05.4 — ACCEPTED.
05.5A GUI Save/Open и безопасный lifecycle принят с ограничениями после native
Windows GUI-приёмки и независимого исправления/подтверждения R1, O1 и L1
(L1 FIXED); подробные результаты, включая ограничения.
GUI Recovery и startup recovery decision реализованы в 05.5B.
05.5A, 05.5B, 05.5 и задача 05 целиком — ACCEPTED WITH LIMITATIONS:
заключительное независимое ревью и перепроверка fb1f706 закрыли IR-05-T1.
Итоговые проверки и принятые ограничения.
Обычная работа после импорта не требует
исходного ASC/XYZ. Ниже описан целевой поток
обработки, фактическая готовность — в Project Status.
Основной поток данных:
ASC / XYZ
↓
Streaming Import
↓
Persistent Point Cache
↓
C1: single scanAll / bounded occupied-group accumulation
↓
Density Map D: immutable exact count tiles / zlib
↓
Rough Stage
↓
Rough Geometry
↓
Reduced Point Cloud
↓
Precise Stage
↓
Precise CAD Geometry
↓
DXF
Работает по аналитическим данным активной Density Map в исходном фиксированном разрешении с физическим размером ячейки cell. Counts, производные intensity/mask, display LOD и необязательный PNG-export разделены; палитра и zoom не являются входами анализа. Пользователь выбирает неразрушающую rectangular/lasso ROI, получает и редактирует rough-внешний контур, отверстия, HoleGroup и вырезы.
Rough geometry является приближением для последующей выборки реальных точек, а не финальной CAD-геометрией.
Явный Build Reduced Point Cloud принимает текущий rough-state и выбирает реальные точки около нужных границ. Пользователь удаляет посторонние точки, явно запускает refinement и редактирует полученную geometry.
Refinement строит компактные CAD-примитивы с continuity, topology и one-sided tolerance validation. Дополнительная Geometry Optimization запускается отдельно.
- Основные геометрические единицы — миллиметры; исходное большое облако не загружается целиком в RAM.
- Immutable persistent point cache заменяет повторный разбор ASC/XYZ и позволяет работать без исходного файла.
- Ячейка density map соответствует области
cell × cellмм; zoom/pan не меняют разрешение. Новая карта строится явно; требования предусматривают сохранение всех версий с собственным Rough-состоянием и переключение без пересчёта — requirements.md, §8. - Rough использует counts/аналитическую mask исходного разрешения, precise — реальные точки. Тяжёлые операции запускаются явно.
- Каждый принятый Build добавляет и выбирает новую карту, сохраняя прежние версии/правки. Выбор версии одним действием делает её рабочей, с подтверждением необходимого Precise reset до смены выбора; автоматической замены/удаления версий нет. Изменение будущего
cell/Undo/Redo не отменяет выполняющийся Density Build. - ROI не разрушает исходную карту; неоднозначный выбор детали не заменяется выбором самого большого объекта.
- Повторный rough-search заменяет результат без сопоставления со старым и предупреждает о потере ручных правок. Полный повторный поиск holes может найти удалённое отверстие заново.
- Обычные последующие операции не возвращают удалённые/отфильтрованные holes как cutouts или precise holes и не используют их области для reduced-cloud extraction.
- Изменение rough-входов после начала precise-stage требует подтверждённого полного сброса второго этапа без Undo.
- HoleGroup сохраняется на обоих этапах; rough group size не требует одинаковых итоговых precise-диаметров.
- Precise-элемент можно фиксировать и снова разрешать автоматическое изменение. Fixed не меняется автоматически.
- Финальная topology: один outer contour, holes/cutouts без запрещённых пересечений, касаний независимых границ и material islands; C0 и Corner/Tangent semantics сохраняются.
- Автоматическая precise geometry сохраняет материал. Выступы measured scan сами по себе не считаются noise; экспериментальные методы подтверждаются реальными scans.
- Ручные удаления reduced points сохраняются с проектом и не меняют исходный cache. Явное полное перестроение создаёт новый рабочий набор.
- Undo/Redo действует внутри этапов в текущем сеансе; история после открытия не восстанавливается. Project save и autosave/recovery сохраняют согласованное состояние, включая версии карт и ручные изменения.
- При неприменённых precise-изменениях DXF export предупреждает и позволяет отменить экспорт либо явно экспортировать текущую построенную geometry.
- Основной UI первой версии — русский; внутренние identifiers и технические артефакты не обязаны переводиться.
Language: C++20
GUI: Qt 6.12 Quick / QML, Qt Quick Controls
Raster / Math: OpenCV 4.x / Eigen
Build: CMake / MSVC
Target OS: Windows 10/11 x64
Testing: GoogleTest
Logging: spdlog
Канонический baseline — architecture.md, §3. Visual Studio допустима как IDE; источником сборки является CMake. Дискретная GPU не требуется.
QML — presentation layer. Project/domain state, geometry, I/O, обработка данных, Undo/Redo и export реализуются на C++; domain geometry отделена от visual items.
Ответственность подсистем, зависимости и владение состоянием определены в architecture.md. Логическое разделение не фиксирует физическую структуру каталогов.
| Документ | Назначение |
|---|---|
| Индекс документации | Навигация по основным документам, инструментам, исследованиям, отчётам и benchmark evidence |
| AGENTS.md | Правила работы Codex |
| requirements.md | Требования, ограничения и пользовательское поведение |
| architecture.md | Подсистемы, зависимости, состояние и persistence |
| algorithms.md | Вычислительные контракты, Current approach и Open decisions |
| ui-design.md | Подробная целевая UX/UI-спецификация и открытые UX-вопросы; готовность функций определяется планом |
| point-cache-format.md | Binary layout v1, sort, Writer/Reader, spatial queries и validation задачи 03 (5/5) |
| implementation-plan.md | План реализации, границы задач и актуальные статусы |
| synthetic-cloud-generator.md | Каноническая спецификация вспомогательного генератора: Geometry JSON + Scan Scenario JSON → XYZ/ASC + manifest; DXF/NX не являются его входом |
- Windows x64 и MSVC с поддержкой C++20; команды выполняются из x64 Developer Command Prompt (окружение штатного
vcvars64.bat). - Официальная установка Qt 6.12 с Core, Gui, Qml, Quick и Quick Controls; Qt через vcpkg не устанавливается.
- CMake и Ninja доступны в
PATHтекущего процесса. VCPKG_ROOTуказывает на установленный vcpkg,QT_ROOT— на каталог Qt kit, содержащийbin,libиinclude.- При первой настройке нужен сетевой доступ к registry и исходникам зависимостей; последующие настройки используют кэш vcpkg.
Проверенное окружение: Visual Studio 2026, MSVC 19.51.36260.0 / v145 (14.51.36231), Windows SDK 10.0.26100.0, Qt 6.12.0 msvc2022_64, CMake 3.30.5, Ninja 1.12.1. Проверки выполнены вне sandbox Codex; глобальный PATH не изменяется.
vcpkg.json использует manifest mode и фиксированный builtin-baseline из установленного vcpkg registry snapshot. Это закрепляет версии port recipes без отдельных произвольных overrides. vcpkg-configuration.json автоматически подключает локальный overlay для fmt 12.2.0#1: минимальный patch устраняет MSVC C4702 без изменения версии, ABI и warning flags. Происхождение port, инвалидация cache и проверка на другом компьютере. Presets подключают toolchain через VCPKG_ROOT, используют triplet x64-windows и размещают установленные пакеты внутри соответствующего build directory.
Проверены OpenCV 4.12.0#7, Eigen 5.0.1, GoogleTest 1.17.0#3 и spdlog 1.17.0#1. У OpenCV отключены default features, включая ненужные сейчас GUI/video integrations. OpenCV/Eigen пока проверяются отдельным headless dependency smoke; production application использует Qt и spdlog для ограниченного rotating operation log. В 06.2 zlib 1.3.2#1 объявлен прямой production-зависимостью headless D storage (ранее уже присутствовал транзитивно).
Density versions 06.4: target density_version_tests использует production
ProjectController/receiver/ProjectState, реальный C1/D и независимый Reader.
В описанной MSVC-среде проверены all all_qmllint и полный -L production
Debug/Release: 1170 PASS / 0 FAIL / 1 SKIP из 1171 в каждой конфигурации.
SKIP — прежний Windows file-symlink без privilege 1314. Новый набор входит в production;
его отдельный фактический запуск в каждой конфигурации дал 47/47 PASS:
build\windows-debug\density_version_tests.exe --gtest_output=xml:build/density064/versions-debug-final.xml
build\windows-release\density_version_tests.exe --gtest_output=xml:build/density064/versions-release-final.xmlОтчёт 06.4 содержит команды, первоначальные failures, итоговые XML/logs/provenance и ограничения. GUI Build/Canvas и versioned persistence не добавлены; v1 сохранение при каталоге безопасно отклоняется.
Density Build Operation 06.3B: density_operation_tests использует реальные
ProjectController/OperationRunner, Point Cache → C1 → D и typed fixture receiver.
В MSVC CMD-среде выше проверены all all_qmllint Debug/Release; в среде с Qt bin
в process-local PATH выполнены:
build\windows-debug\density_operation_tests.exe --gtest_output=xml:build/density063b/adapter-debug-final.xml
build\windows-release\density_operation_tests.exe --gtest_output=xml:build/density063b/adapter-release-final.xml47/47 PASS в каждой конфигурации. Широкие production результаты, команды, первоначальные failures, inventories и ограничения — в отчёте 06.3B и evidence. Это результаты принятой 06.3B. Production catalogue 06.4 и его проверки описаны отдельно в отчёте версий. Без receiver Build по-прежнему отклоняется до worker; production receiver теперь подключён по умолчанию. GUI Build не добавлен.
Headless builder 06.3A: target density_builder_tests проверяет полный
Point Cache → C1 → D через независимый spatial oracle, а
density_builder_benchmark (opt-in CADCONTOUR2D_BUILD_TOOLS=ON) измеряет этот
production pipeline. Это отдельные targets от исторического D/E и C1/C2 стенда.
Фактические команды, результаты Debug/Release и ограничения,
benchmark и воспроизведение.
Хранилище D v1 (06.2): в том же MSVC-окружении проверены Debug/Release:
cmake --build --preset windows-debug --target density_storage_tests raster_mapping_tests density_storage_benchmark --parallel 4
cmake --build --preset windows-release --target density_storage_tests raster_mapping_tests density_storage_benchmark --parallel 4
ctest --preset windows-debug -R DensityStorage --output-on-failure
ctest --preset windows-release -R DensityStorage --output-on-failuredensity_storage_benchmark требует CADCONTOUR2D_BUILD_TOOLS=ON.
Независимое ревью D 8d622e0: 115/115 PASS, RasterMapping — 14/14 PASS,
широкая headless selection — 694 PASS / 0 FAIL / 1 SKIP из 695 в каждой конфигурации.
Последующее исправление Recovery P3 085a5f1: Recovery 118 PASS, повторы 400 PASS,
широкий набор 698 PASS / 0 FAIL / 1 SKIP из 699 в каждой конфигурации.
Наборы пересекаются, их числа не суммируются. SKIP — Windows symlink privilege 1314.
Исторические проверки исполнителя, первоначальные FAIL, команды и измерения сохранены
в отчёте.
Документальное принятие 06.2 опирается на эти ранее выполненные проверки;
сборки и тесты при закрытии не повторялись.
Raster Foundation 06.1: в указанном MSVC-окружении выполнены Debug/Release builds и отдельные CTest-проверки production mapping:
cmake --build --preset windows-debug --target raster_mapping_tests --parallel 4
cmake --build --preset windows-release --target raster_mapping_tests raster_validation_benchmark --parallel 4
ctest --preset windows-debug -R RasterMapping --output-on-failure
ctest --preset windows-release -R RasterMapping --output-on-failureНовые тесты — 14/14 PASS в каждой конфигурации; дополнительно проверены
/O2 /arch:AVX2 и раздельные FP instructions. Benchmark target доступен при
CADCONTOUR2D_BUILD_TOOLS=ON. Связанные headless regressions и известные
нестабильности Recovery отдельно отражены в отчёте 06.1.
Эксперимент 06.0A при CADCONTOUR2D_BUILD_TOOLS=ON имеет отдельные проверенные
targets density_benchmark density_benchmark_tests и CTest label density_experiment
в Debug/Release. Configure/build/test, smoke run и методика
не запускают production Density Map и не требуют новых зависимостей.
Для 06.0B форматы D/E собираются отдельным CMake project с изолированными zlib/ libtiff dependencies. Проверены Debug/Release builds и 13 tests в каждой конфигурации; общий стенд после расширения side проходит 22 tests. Установка зависимостей, configure/build/test и матрица.
Из корня репозитория в указанной CMD-среде:
chcp 65001 >nul
set "PATH=%QT_ROOT%\bin;%PATH%"
cmake --preset windows-release -DCADCONTOUR2D_BUILD_TOOLS=ON
cmake --build --preset windows-release --target CADContour2D import_application_tests asc_xyz_tests cache_tests operation_tests project_tests view_model_tests qml_integration_tests dependency_smoke operation_probe all_qmllint --parallel 4
ctest --preset windows-release -L production --output-on-failureUTF-8 code page нужна в проверенной русскоязычной среде MSVC для корректного распознавания /showIncludes в CMake/Ninja. Она меняется только в текущей консоли. Qt bin в локальном PATH нужен также production tests, использующим Qt runtime.
Debug также фактически проверен:
cmake --preset windows-debug -DCADCONTOUR2D_BUILD_TOOLS=ON
cmake --build --preset windows-debug --target CADContour2D import_application_tests asc_xyz_tests cache_tests operation_tests project_tests view_model_tests qml_integration_tests dependency_smoke operation_probe all_qmllint --parallel 4
ctest --preset windows-debug -L production --output-on-failureТекущая проверка GUI 05.5A использует cmake --build --preset <preset> --target all all_qmllint --parallel 4, ctest --preset <preset> -R FileGui --output-on-failure
и полный ctest --preset <preset> -L production --output-on-failure для
windows-debug / windows-release. Результаты, ограничения и ручная приёмка —
отчёт 05.5A.
Результаты независимой проверки и принятие 05.4 — в разделе
Autosave / Recovery.
Историческая проверка после исправления R1 в 05.3: в той же CMD-среде выполнены cmake --build --preset windows-debug --target all all_qmllint --parallel 4 и соответствующая команда
windows-release, затем полный ctest --preset <preset> -L production --output-on-failure.
В каждой конфигурации 609 passed / 0 failed / 1 skipped из 610. open_tests
включается при BUILD_TESTING и входит в production; отдельно проверены
ctest --preset windows-debug -R ^OpenApplication --output-on-failure и вариант
windows-release — 84/84 в каждом, включая 26 новых R1 regressions. Единственный SKIP — file-symlink privilege
1314; junction, ACL и cross-volume Open/Save As прошли.
Команды и история исправления R1.
Результаты независимо подтверждены на 1415a6a; 05.3 — ACCEPTED 2026-10-21.
Независимая проверка и границы принятия.
При документальном закрытии сборки и тесты не повторялись.
Далее сохранены исторические результаты предыдущих этапов.
Задача 02 после исправления R1: 132/132 PASS в Debug и Release — 32 domain/application/coordinate, 51 operation, 35 view model, 13 production QML integration и один dependency smoke. Production tests и отдельный operation_probe включаются при BUILD_TESTING независимо от генератора. Фильтр -L production исключает его полную регрессию. all_qmllint прошёл для production и verification QML в обеих конфигурациях.
Исправление R1 покрыто четырьмя новыми случаями в составе 51 operation test. В Debug и Release шесть целевых регрессий прошли по 50 повторов — 300/300 PASS в каждой конфигурации; это повторные запуски существующих тестов. Независимый воспроизводитель R1 дал 3/3 PASS, проверка pending completion — PASS в обеих конфигурациях.
QML integration tests загружают тот же статический модуль CADContour2D и Main.qml, что приложение. Проверяются bindings, Apply/Enter/Undo/Redo/New/Close, draft/error/cursor/selection во время progress и публикации, смена проекта до/после Accept, cancel/failure, shutdown и resize 400×380 / 1000×700. По умолчанию используется offscreen + software + Basic; проверка QML warnings остаётся строгой. Дополнительно выполнен запуск с настоящей Windows-платформой и штатным стилем:
set "QT_QPA_PLATFORM=windows"
build\windows-debug\qml_integration_tests.exe
build\windows-release\qml_integration_tests.exe
set "QT_QPA_PLATFORM="Результат: 13/13 PASS в каждой конфигурации. Проверка создаёт и закрывает настоящие тестовые окна. Выполненная визуальная приёмка описана ниже.
Synthetic Point Cloud Generator включается через -DCADCONTOUR2D_BUILD_TOOLS=ON. Его ранее проверенная регрессия: 95 generator tests и dependency smoke, 96/96 PASS в каждой конфигурации. В задаче 02 полная generator regression не повторялась, тяжёлые datasets не создавались. Команды и ограничения — в README инструмента. Production application не зависит от generator.
В той же CMD-среде фактически выполнены для обоих presets:
cmake --preset windows-debug -DCADCONTOUR2D_BUILD_TOOLS=ON
cmake --build --preset windows-debug --target cadcontour_cache cache_tests project_tests operation_tests view_model_tests qml_integration_tests dependency_smoke --parallel 4
ctest --preset windows-debug -R ^Cache --output-on-failure
ctest --preset windows-debug -L production --output-on-failure
cmake --preset windows-release -DCADCONTOUR2D_BUILD_TOOLS=ON
cmake --build --preset windows-release --target cadcontour_cache cache_tests project_tests operation_tests view_model_tests qml_integration_tests dependency_smoke --parallel 4
ctest --preset windows-release -R ^Cache --output-on-failure
ctest --preset windows-release -L production --output-on-failure43/43 cache tests и 175/175 production tests PASS в каждой конфигурации
(37 исходных cache + 6 регрессий B1/B2 + 132 прежних). Новый production-код и cache tests собраны с /W4
без предупреждений. Проверены independent golden bytes/digests, binary64 edge cases,
overflow, повреждения, short I/O, EOF/zero progress, ошибки seek/flush, rename и
ownership/cleanup, существующий target, Unicode и пробелы. Flush failure вводится
через небольшой test seam; фактическое заполнение диска не выполнялось. Необходимые
для следующих этапов большие cache/spatial performance проверки ещё не проводились.
GUI не изменён; новые тесты используют только Qt Core без GUI application.
PointStreamSort принимает batches X/Y/Z, назначает стабильные RecordId, вычисляет
metadata и выдаёт исходные binary64 X/Y в порядке (Morton128, RecordId) через
одноразовый callback. Реализованы bounded runs, multi-generation K-way merge,
memory/disk/file budgets, cancellation, structured failures и cleanup. Финальный
полный scratch-файл не требуется. Контракты и ресурсные формулы — в
point-cache-format.md.
Нормативный binary layout v1 не изменён.
В указанной выше CMD-среде выполнены:
cmake --build --preset windows-debug --target cadcontour_cache cache_tests project_tests operation_tests view_model_tests qml_integration_tests dependency_smoke --parallel 4
ctest --preset windows-debug -R ^Cache --output-on-failure
ctest --preset windows-debug -L production --output-on-failure
cmake --build --preset windows-release --target cadcontour_cache cache_tests project_tests operation_tests view_model_tests qml_integration_tests dependency_smoke --parallel 4
ctest --preset windows-release -R ^Cache --output-on-failure
ctest --preset windows-release -L production --output-on-failure78/78 cache tests и 210/210 production tests PASS в каждой конфигурации
(43 прежних cache + 35 новых). Изменённый C++ и тесты собраны с /W4 без
предупреждений. Проверены независимые Morton golden words и числовой oracle порядка,
точные ID/биты координат, разные batches и буферы, несколько поколений при fan-in=2,
ограниченные массивы и отсутствие роста directory в RAM. Windows handle counts и
фактические размеры/число scratch-файлов проверены отдельно от плановых счётчиков.
Есть инъекции I/O и bad_alloc, реальный open failure, усечение при чтении,
повреждение runs, cancellation по фазам/между поколениями, отказ sink, reentry и
терминальные вызовы. Native handle без share-delete проверяет отказ cleanup,
сохранение первичной ошибки и повторное удаление деструктором.
Реальное исчерпание RAM/заполнение диска не выполнялись. Гигабайтные прогоны, HDD/seeks performance и сравнение индексов относятся к следующим заданиям. Полная Synthetic Point Cloud Generator regression повторно не запускалась; подсистема не затронута. Это результаты реализации 2/5; writer/index добавлены ниже.
CacheWriter использует существующий PointStreamSort, потоково пишет point pages
и строит packed BBox hierarchy. Ограниченный descriptor stream и повторное чтение
предыдущего index level позволяют обойтись одним page buffer и одним массивом
entries. Общий ресурсный бюджет учитывает одновременно живущие sorter и writer.
Проверка собственного результата внутри StagedFile::publish() предшествует
единственному rename. PendingCache владеет готовым файлом до Discard или явного
releaseToOwner(). Формат v1 не изменён; API, ресурсные формулы и границы validation —
в point-cache-format.md.
В указанной выше CMD-среде выполнены configure Debug/Release и:
cmake --build --preset windows-debug --target cadcontour_cache cache_tests project_tests operation_tests view_model_tests qml_integration_tests dependency_smoke --parallel 4
ctest --preset windows-debug -L production --output-on-failure
cmake --build --preset windows-release --target cadcontour_cache cache_tests project_tests operation_tests view_model_tests qml_integration_tests dependency_smoke --parallel 4
ctest --preset windows-release -L production --output-on-failure116/116 cache tests и 248/248 production tests PASS в каждой конфигурации
(78 прежних cache + 38 новых writer/index). Новый C++ и tests собраны с /W4 без
предупреждений. Configure сохраняет известные необязательные Qt6TaskTree/Vulkan
diagnostics. Независимый тестовый DFS проверяет бинарное дерево, фактические
records/counts/bounds, все IDs и биты X/Y, включая signed zero/subnormal/adjacent
binary64; проверены 2726/2727 records и 1022/1023 descriptors. Искусственные
descriptors проверяют уровни без миллионов реальных records; такие scratch-файлы
не публикуются как datasets.
Проверены rehashed semantic corruption, multi-generation sorter+writer, writer и sorter failures после записанного префикса/всего sink, cancellation по фазам, реальные flush/rename пути с инъекцией flush failure, запрет overwrite, move и Accept/Discard. Native handles, фактические file lengths/counts и capacities рабочих буферов проверены отдельно от плановых budgets. Native locks проверяют cleanup failure, сохранение первичной ошибки и повторное удаление деструктором.
Реальное исчерпание RAM/заполнение диска, peak RSS, большие scans, HDD benchmarks и power-loss durability не проверялись. Production CacheReader и spatial queries пока отсутствуют; полного production round-trip нет. GUI не изменён; полная Synthetic Point Cloud Generator regression повторно не запускалась. Это результаты этапа 3/5, когда задача 03 оставалась IN PROGRESS и не была принята целиком.
Headless CacheReader открывает готовые файлы без передачи владения PendingCache,
проверяет envelope/root и выдаёт bounded batches с исходными ID и битами binary64.
scanAll читает physical order; scanBox и scanBoxes используют один packed DFS
с inclusive boundaries и union без повторов. Страницы проверяются перед выдачей.
Отдельная полная validation проверяет весь dataset, реальные bounds/counts и строгое
покрытие ID 0..N-1 через существующий bounded external sort. Формат/Writer не изменены.
Контракты API/ownership/budgets — в point-cache-format.md.
В приведённой CMD-среде выполнены configure обоих presets и те же build targets, что для этапа 3/5, затем:
ctest --preset windows-debug -L production --output-on-failure
ctest --preset windows-release -L production --output-on-failure
ctest --preset windows-debug -L cache_integration -V
ctest --preset windows-release -L cache_integration -V292/292 production tests (160 cache, включая 44 новых Reader tests) и отдельный
integration test PASS в каждой конфигурации. Индекс высоты 2 создан настоящим
Writer: 2 786 009 records, 1023 point pages, 3 index pages, файл 67 248 128 байт.
Локальная область/полоса/union прочитали 2/32/7 point pages вместо 1023;
эталонные ID и биты координат совпали. Рабочие массивы Reader — 245 440 байт,
один handle и два traversal frames. Детальные результаты и ограничения измерений —
в cache-reader-check.md. Новый C++ собран с /W4
без предупреждений; configure сохраняет известные Qt diagnostics.
На этапе 4/5 HDD, peak RSS и гигабайтная матрица ещё не проверялись; результаты последующего этапа — ниже. Application integration относится к задаче 04.
Формат v1 зафиксирован без изменения byte layout. Полная validation проверяет
глобальный (Morton128, RecordId); fast open сохраняет прежнюю стоимость.
Добавлены две регрессии rehashed перестановок, четыре изолированных crash cases
и проверки предельной высоты packed index без гигантских файлов.
Release HDD матрица: 7/7 PASS, включая два Writer → Reader → validation цикла по 42 млн records (1.008 GB point records), budgets 8/128 MiB и пять распределений по 1.2 млн records. Build — 106.0/62.8 s, validation — 107.5/64.4 s, peak process Working Set к концу validation — 19.5/139.5 MiB. Local query читает 3 вместо 2672 point pages source-order baseline. OS cache не сбрасывался; это first-pass/ warm measurements, без обещания cold-cache latency или power-loss durability. Полный отчёт, resource/I/O tables, baseline tradeoffs и raw JSON — cache-performance-report.md.
В обеих конфигурациях выполнены configure/build изменённых targets, затем
ctest --preset windows-debug -L production --output-on-failure и аналогичная
команда для windows-release: 298/298 PASS, в том числе 166 cache tests.
Отдельный ctest --preset windows-debug -L cache_integration -V и аналогичный
Release запуск — 1/1 PASS в каждой конфигурации; integration не входит в
production label. Новый C++ собран с /W4 без предупреждений.
Benchmark — отдельный opt-in target, гигабайтные данные не входят в production CTest:
cmake --preset windows-release -DCADCONTOUR2D_BUILD_TOOLS=ON
cmake --build --preset windows-release --target cache_tests cache_benchmark --parallel 4
build\windows-release\cache_benchmark.exe --help
build\windows-release\cache_benchmark.exe --parent F:\CADContour2D-benchmark --report build\cache-benchmark-smoke.json --points 120000 --memory-mib 8 --distribution multi --repeats 3Используется CMD-среда выше; --report требует новый путь, --parent — существующий
каталог с достаточным резервом. Tool создаёт уникальный child, освобождает собственные
данные при успехе и сохраняет диагностику при failure. Большие команды — в отчёте.
Добавление Qt runtime в PATH относится только к текущей консоли и её дочерним процессам:
set "PATH=%QT_ROOT%\bin;%PATH%"
start /wait "" build\windows-release\CADContour2D.exeПроверен и Debug запуск:
start /wait "" build\windows-debug\CADContour2D.exeProduction запускается без проекта и в 04.4A предлагает ASC/XYZ через native FileDialog.
«Новый проект» повторяет выбор; прямой legacy controller-вызов возвращает ImportRequired.
Создание пустого проекта из production недоступно. Программный C++ API
ProjectController::importAscXyz(ImportRequest) работает в фоне и принимает новый
проект только после успеха. Подробности API и проверок —
отчёт GUI 04.4A и
отчёт 04.2. Это запуск из установленного Qt kit,
не deployment package. Приведённые ниже сценарии приёмки задач 01–02 описывают
исторически проверенный каркас; их cell/Undo/verification-инварианты сохранены
в тестах с отдельным friend fixture, отсутствующим в production executable.
В задаче 01 запуск настоящих Debug/Release окон и начальное состояние подтверждены через Windows accessibility; оба executable закрыты с кодом 0, runtime logs пусты. Автоматические QML tests проверили сценарий, resize и закрытие, включая native Windows run. Пользователь подтвердил успешное выполнение всех семи пунктов согласованной ручной приёмки, включая изменение размера окна и закрытие приложения.
- Запустить Debug или Release командой выше:
cell = 1, карта отсутствует, Undo/Redo недоступны. - Ввести
0,5, нажать «Применить»: состояние и поле становятся0.5; «Отменить» возвращает1, «Повторить» —0.5. - После Undo проверить
0,-1,NaN,1,2.3: ошибка, draft сохраняется, cell и redo-ветка не меняются. Ввод1,0— no-op; Redo остаётся доступным. Проверить также Enter в поле. - «Новый проект»:
1, новая identity, ревизия0, пустая история. Карта всё время отсутствует. - Уменьшить и увеличить окно, проверить доступность элементов и читаемость ошибок; закрыть окно. Сообщить о несовпадении значений, кнопок, сохранности ввода, clipping или проблемах закрытия.
В той же CMD-среде с Qt bin в PATH:
build\windows-debug\operation_probe.exe --auto known
build\windows-release\operation_probe.exe --auto knownДля обеих конфигураций фактически выполнены все семь --auto сценариев: known, unknown, failure, cancel, replace, close, quit — 7/7 PASS в Debug и Release. Все завершились с кодом 0 и Ready shutdown; success получил Accept, остальные — Discard. operation_probe — test/dev executable, использующий production Main.qml/controller/runner/shutdown; проверочные кнопки отсутствуют в обычном CADContour2D.exe. Он не импортирует облако и не создаёт domain datasets.
Ручной запуск без --auto:
build\windows-release\operation_probe.exe- «Проверить фоновую операцию»: окно остаётся отзывчивым, после начальной подготовки появляются количество и процент, затем завершение. Во время progress ввести незавершённый draft без Apply, выделить часть текста: уведомления и завершение сохраняют текст/выделение.
- До запуска ввести
1,2.3, нажать «Применить», затем запустить обычный сценарий и «Проверить ошибку»: ошибка параметра и draft сохраняются; ошибка операции выводится отдельно. - «Неизвестный объём»: счётчик без фиктивного процента и неопределённый progress; во время работы изменить размер окна до 400×380 и обратно, проверить чтение/доступность элементов через scroll.
- Запустить и нажать «Остановить операцию»: cooperative остановка, результат не применён; после завершения доступен новый запуск.
- Во время операции применить
0,5, проверить Undo/Redo: параметр меняется, прежняя операция не публикует результат по старым входам. - Во время операции нажать «Новый проект»: новая identity,
cell = 1, пустая история; прежний worker завершается без записи в новый проект. После завершённой операции New также скрывает её старый статус. - В двух отдельных запусках закрыть активную операцию кнопкой «Закрыть» и системным крестиком: окно обрабатывает события до безопасного завершения и затем закрывается. Повторное закрытие не создаёт ошибку.
Визуальная приёмка: VERIFIED. Первоначальный независимый ревьюер выполнил полный осмотр основного приложения и operation_probe: сценарии A–H, размеры 400×380, 680×600 и 1000×700. После исправления R1 выполнены ограниченный GUI smoke Release operation_probe (обычное завершение, повторный запуск, выход с кодом 0) и заключительная независимая проверка затронутых контрактов; полный визуальный осмотр A–H не повторялся. В smoke worker завершился до ручного закрытия; закрытие активной операции после R1 подтверждено native QML tests и --auto close / --auto quit в Debug/Release.
- Qt сообщает об отсутствующем
Qt6TaskTreeдля необязательногоQt6QmlAssetDownloaderPrivate, а такжеWrapVulkanHeaders. Текущий QML-модуль их не использует; сборка, lint и runtime прошли. - При сборке OpenCV его CMake detection не распознаёт
MSVC_VERSION=1951и сообщаетCannot set OpenCV_RUNTIME. vcpkg собрал x64 библиотеки с/MDи/MDd; link и dependency smoke test прошли в Release и Debug. Также есть предупреждения стороннего OpenCV о старых CMake policies и metadataOPENCV_BUILD_INFO_STR. - Встроенный загрузчик vcpkg получил SSL error 35 для Eigen и fmt. Официальные архивы загружены системным curl в download cache и проверены по SHA-512 из port recipes; проверка TLS и хэшей не отключалась. Это ограничение загрузки в текущем сетевом окружении, не ошибка компиляции.
- Историческое C4702 внутри стороннего
fmt/base.hпри сборке header-only spdlog устранено локальным overlayfmt 12.2.0#1: явныйelseтолько вcode_point_length(), без подавления diagnostics. Чистые Debug/Release buildall+all_qmllint2026-10-24 прошли без compiler/linker/QML warnings; optional Qt/Vulkan diagnostics сохраняются. Патч и проверка. - Расхождение Qt 6.12.0
wait(0)с полным завершением C++ TLS воспроизведено и покрыто независимым Windows-guard. Подробности и повторяемая проверка — thread-completion-check.md.
06.4 — версии Density Map и Project State: READY FOR INDEPENDENT REVIEW.
Production C++ buildDensity() добавляет и выбирает новую постоянную версию через
существующий runner и typed receiver; selectDensityVersion(VersionId), Undo/Redo
выбирают по UUID без чтения D/Point Cache и пересчёта. Каждый Build сохраняет собственные
mapping/cell/metadata/statistics и пустой независимый Rough owner. Undo выбора сохраняет
все версии и файлы; future cell остаётся отдельным параметром. Каталог/history готовятся
до gate и публикуются noexcept swaps вместе с Accept; общий Precise reset policy
подготовлен без фиктивного Precise pipeline. До 06.5 Save/Save As/Autosave и прямой v1
capture явно запрещены при каталоге, включая null active после Undo; dirty и прежнее
сохранение не меняются. GUI показывает причину, отказ Save не закрывает проект.
Build GUI/Canvas/LOD/ROI ещё отсутствуют. Фактические проверки и ограничения текущего
изменения — отчёт 06.4.
06.3B — Density Build Operation: ACCEPTED WITH LIMITATIONS.
Принята пользователем 2026-11-06 на проверенном
42147bb3c10df8008e1f8485255d8370bd02a7bf; новых P0–P3 и блокеров нет.
Реальный Point Cache → C1 → D запускается через C++ buildDensity и единственный
existing OperationRunner. Typed receiver заранее готовит candidate добавления/выбора;
initial/final gates и borrowed lease защищают Accept/Discard и worker ownership.
Без receiver admission отклоняется до worker: production catalogue/Undo — 06.4,
persistence D — 06.5, GUI Build не добавлен. Форматы manifest v1 и сохранение cell
сохранены. Проверки, ресурсы, ограничения и вердикт.
Независимые Debug/Release all all_qmllint — PASS; production в каждой конфигурации —
1123 PASS / 0 FAIL / 1 SKIP из 1124, включая 47/47 adapter cases.
Exact headless inventories — 876/876; четыре existing GUI pointer-printed labels
различаются в полном inventory, commands/filters совпадают. Evidence сохраняет
первые fixture failures и промежуточные прогоны.
Принятие и сохранённые независимые отчёты.
При документальном закрытии сборки и тесты не повторялись.
06.3A — Headless Density Builder: ACCEPTED WITH LIMITATIONS.
Принята пользователем 2026-11-06 на проверенном
bc28195971ddbe43ef36a12f38b5d49453bd85d6; B1/P1 и B2/P2 независимо закрыты,
новых P0–P3 и блокеров нет. Первый и повторный независимые отчёты и принятие
сохранены. Их Debug/Release результаты: headless 826 PASS / 0 FAIL / 1 SKIP,
builder 128 PASS и отдельные integrity/resource probes 134 PASS;
пересекающиеся поднаборы не суммируются и не являются новыми запусками при закрытии.
Синхронный C++ entry point по immutable request/retained Point Cache делает ровно
один scanAll, bounded event grouping и occupied-only checked accumulation,
использует production mapping 06.1 и штатный D Writer, возвращает move-only
завершённый PendingDataset. Общая policy ограничивает phase RAM, metadata,
scratch/output/combined disk, files/handles и work; failure/cancel очищают только
свои файлы. Diagnostic context удерживается до позднего discard результата.
Независимый spatial oracle тестов и отдельный full-pipeline benchmark проверяют
counts, shapes, keys и implicit zeros. Результаты и статус,
evidence.
Блокеры независимого ревью B1/P1 (целостность event stream) и B2/P2 (Windows paths)
исправлены: per-group CRC и fully qualified drive/UNC validation до callbacks/I/O.
Финальная headless regression Debug/Release: 826 PASS / 0 FAIL / 1 SKIP из 827
в каждой конфигурации, включая 128 builder, 115 storage и 14 mapping tests.
Первый отдельный Open FAIL сохранён и расследован, повторный Debug прошёл;
RED/GREEN, история и ограничения.
SKIP — только Windows symlink privilege 1314. Свежий smoke 9×100k и audit — PASS;
историческая matrix 9×1 млн на 03fd6e2 остаётся отдельным evidence исходной реализации.
Согласованный объём 06.3 завершён — ACCEPTED WITH LIMITATIONS:
headless builder и OperationRunner/application publication приняты.
Production-каталог версий/выбор/Undo добавлены последующим этапом 06.4 выше;
persistence карт (06.5) ещё не реализован. Форматы Point Cache/D/manifest
и принятые 06.1/06.2/Recovery P3 сохранены.
06.2 D v1 — ACCEPTED WITH LIMITATIONS по решению пользователя от 2026-10-29.
Независимый вердикт на 8d622e0129ccdfa6de6f0ad75eba0845da9de1e3 —
READY WITH LIMITATIONS, подтверждённых замечаний P0–P3 к D и storage-блокеров
перехода к 06.3 нет. Последний проверенный HEAD с отдельным Recovery P3 —
085a5f1d8c1abd0dd85368dd88e2803454c45c7b; P3 FIXED AND VERIFIED в fixture,
без изменения D или production Autosave. Реализован отдельный headless
writer/reader точных counts с sparse disk index, bounded descriptor sort/merge,
строгим zlib, resource/cancel/error policy и RAII pending-result после полного
readback. Файл самодостаточен, binary64 metadata побитовы; side 256/512.
Нормативный format/API,
принятие, проверки, tracked evidence и ограничения.
Зависимость 06.2 для проектирования/реализации 06.3 выполнена в принятых границах.
06.1 Raster Foundation — ACCEPTED WITH LIMITATIONS по решению пользователя
(2026-10-29). В cadcontour_core добавлен immutable raster::Mapping без Qt/GUI:
единые model→indices и indices→nominal/coverage bounds, минимальные dimensions по
binary64-границам с раздельным RN-even, представимость, work refusal и cancellation.
Point Cache, parser, Project State и experimental harness не изменены.
Независимое ревью 1db741b — READY WITH LIMITATIONS, новых замечаний P0–P3
к Raster Foundation нет. RasterMapping — 14/14 PASS в Debug/Release и дополнительной
AVX2-сборке; headless selection из 580: Debug 579 PASS / 0 FAIL / 1 SKIP,
Release 578 PASS / 1 FAIL / 1 SKIP. На момент принятия 06.1 Recovery FAIL —
унаследованная нестабильность NoChange/Applied; отдельные 10/10 PASS не отменяют FAIL.
Последующее отдельное исправление fixture P3 и его проверки приведены
в Recovery-отчёте.
SKIP — Windows symlink privilege 1314. Полная проверка осей — O(width+height),
O(1) памяти; явный начальный бюджет 10 млн — изменяемая политика с ResourceRefused,
без универсального предела размеров карты или гарантии времени.
Независимое ревью, ограничения и принятие.
При документальном закрытии сборки и тесты не повторялись.
06.0 Close — исследование завершено с ограничениями; D + C1 согласованы пользователем
(2026-10-27). Проверенная экспериментальная база — 1be09454c57da7bcb00cde0baa1c1e37b60648d1.
D — immutable count-tile dataset / zlib с точными uint32/uint64 counts; C1 — один
scanAll с bounded events и обработкой только occupied groups. Исторический вердикт
независимого 06.0D — INCONCLUSIVE, выявлен P1; последующее закрытие P1 учитывается
отдельно. Отчёты/evidence сохраняют исходные рекомендации и ограничения.
Задача 06: IN PROGRESS — выполнены исследования, Raster Foundation 06.1, headless D storage 06.2; 06.3A и 06.3B — ACCEPTED WITH LIMITATIONS, согласованный объём 06.3 завершён. Production-каталог и selection history 06.4 реализованы; результаты текущей проверки приведены выше отдельно от принятия. 06.5–06.8 не начаты: persistence карт, Canvas/ROI и полный пользовательский workflow ещё не готовы. Последовательность, зависимости и критерии, архитектура D + C1, численные контракты и evidence. Storage side 256/512 поддержаны в D v1; group 512×512 — начальный инженерный профиль; экспериментальный D layout и occupied guard 1M не являются production format/лимитами. Full-pipeline synthetic evidence относится к 06.3A; physical cold-HDD/UNC, representative real scans и отдельное время Deflate не подтверждены. Качество Rough этими проверками не оценивается. Исторический boundary/nextafter evidence 06.0 дополнен отдельными production-проверками 06.1 выше.
Ниже — исторические итоги экспериментов и принятых задач, а не новые проверки Close.
06.0D/P1 — масштабирование C1: P1 CLOSED WITH LIMITATIONS (2026-10-27). Экспериментальный C1 обходит только occupied groups; logical и occupied guards разделены. Debug/Release: 36/36 общих/construction + 13/13 format tests PASS. 84 Release trials проверены независимым oracle: sparse до 4 194 304 logical groups при четырёх occupied, до 4096 spool files и cache 42 млн measurements. Рекомендован C1 как единственный основной алгоритм; million-file, cold-HDD и representative real scans не подтверждены. На момент отчёта production и 06.1 не начаты; последующее согласование D + C1 зафиксировано в Close выше. Отчёт, raw evidence, guards и границы вывода.
06.0C — сравнение построения counts C1/C2: READY WITH LIMITATIONS (2026-10-27). Оба экспериментальных алгоритма проверены; Debug/Release — 12/12 C1/C2, 22/22 общих и 13/13 format tests PASS. Выполнены девять Release серий на HDD, включая готовый cache 42 млн measurements; audit подтвердил 208 count outputs, 182 точных сравнений и сохранность 15 sources. Предварительно рекомендован C2 с группами 512×512 cells; cold-HDD и representative real scans не подтверждены. Отчёт, evidence и границы рекомендации. Это историческая рекомендация; последующая адресная проверка P1 приведена выше. Production Density Map не реализована; архитектурное согласование завершено в 06.0 Close выше.
06.0B — сравнение count-tile/zlib и TIFF/BigTIFF: READY WITH LIMITATIONS (2026-10-27). Изолированы оба адаптера; Debug/Release — 22/22 общих + 13/13 format tests PASS. На synthetic maps 3/12/48 млн cells и huge-sparse выполнены 12 Release серий: 2363 ok measurements, семь ожидаемых TIFF capability refusals. Рекомендован D по sparse/integrity/dependency cost при близкой обычной производительности; на тот момент это рекомендация к рассмотрению. Close утвердил направление D, сохранив production layout открытым. Отчёт, raw JSON/CSV, ограничения и команды. Результаты 06.0C приведены выше; production Density Map/Canvas/ROI остаются будущей работой.
06.0A — экспериментальный стенд Density Map: READY WITH LIMITATIONS (2026-10-27). Изолированный density_benchmark: точные count inputs, независимый малый oracle, production CacheReader inputs, resource preflight, process memory/logical I/O и JSON/CSV. Debug/Release experimental builds и 20/20 tests в каждой конфигурации — PASS; отдельный Release smoke — 230 rows ok. Baseline, методика, команды, результаты и ограничения. Исторический статус 06.0A сохранён; результаты 06.0B приведены выше. Задача 06 целиком остаётся будущей работой.
Задачи 01–04 и этапы 05.1–05.4: ACCEPTED. Synthetic Point Cloud Generator сохраняет ранее проверенную готовность.
Задача 04 принята 2026-10-19 после финального независимого ревью:
REVIEW PASSED — TASK 04 ACCEPTABLE на HEAD
a227f3865f5bbd3068eb7e8eb95febc3e2ce241d. Подтверждённых дефектов P0–P3 и
существенных неподтверждённых рисков — 0; обязательных исправлений нет.
Ключевые проверки, ограничения и решение — в записи о принятии.
В задаче 05 этапы 05.1–05.4 имеют статус ACCEPTED;
05.5A, 05.5B, 05.5 и задача 05 целиком — ACCEPTED WITH LIMITATIONS (2026-10-26).
05.2 — ACCEPTED после финальной независимой
проверки исправлений R1/R2 на cedf844.
Заключение по 05.2.
05.3 — ACCEPTED 2026-10-21 после повторной независимой проверки 1415a6a;
R1.1/R1.2 — FIXED и закрыты, итог ревью — READY FOR ACCEPTANCE.
Заключение по 05.3.
05.4 Autosave/Recovery — ACCEPTED 2026-10-22 после независимой проверки b086cad;
вердикт — READY FOR ACCEPTANCE, H1–H3/N1 — FIXED и закрыты.
Принятие, результаты и неблокирующее наблюдение о нестабильности теста.
05.5A — ACCEPTED WITH LIMITATIONS: GUI Save/Open/Save As, draft/dirty,
безопасное закрытие и замена, partial availability и bounded recheck приняты после
native GUI-приёмки; R1/O1/L1 исправлены и независимо проверены. При её завершении
production CTest дал 761 PASS / 0 FAIL / 1 SKIP, адресный L1 — 8/8 в Debug и Release;
эти исторические результаты сохранены в отчёте 05.5A.
05.5B, 05.5 и задача 05 — ACCEPTED WITH LIMITATIONS после заключительного
независимого ревью и закрытия IR-05-T1 на fb1f706.
Собственная итоговая проверка 2026-10-26: build/lint — PASS, production —
813 PASS / 0 FAIL / 1 SKIP, GUI subset — 212 PASS, в Debug и Release.
Единственный SKIP — FileSymlinkEscape, Windows privilege 1314; отдельный более
ранний независимый PASS этого сценария в обеих конфигурациях сохраняет силу.
Межтомные Open/Save As прошли и в новых production-прогонах.
Последующая native-приёмка подтвердила Late Save с поздним изменением cell
при копировании 1,01 ГБ, Recovery/Reject/Conflict/partial через operation_probe;
layout кнопки «Применить» исправлен и проверен при системных 100%/150%.
Историческое C4702 устранено воспроизводимым vcpkg overlay.
Эти исторические native/resource проверки в текущей перепроверке не повторялись.
Принятые ограничения: полный standalone Restore → Save → Restart в отдельном
Windows-профиле — NOT VERIFIED; keyboard/visible focus — PARTIAL VERIFICATION;
системный DPI 200% — OUT OF SCOPE, без утверждения о неподдержке;
перенос между мониторами — N/A. Наблюдение Recovery Applied/NoChange
не объявляется исправленным.
Итог, происхождение доказательств и границы принятия.
На момент принятия 05 препятствий к развитию persistence в 06 не выявлено;
production-задача 06 не начата,
сохранение будущих count datasets Density Map и их metadata/state ещё предстоит расширить в 06.5 через versioned manifest; схема v1 и принятый контракт 05 не изменены.
Задача 02 принята пользователем после реализации, проверок Debug/Release, визуальной приёмки и независимого ревью. Обнаруженный при ревью R1/P1 исправлен; заключительное независимое ревью — PASS, новых замечаний P0–P3 нет.
На текущем этапе:
- сформированы функциональные требования;
- реализованы
cadcontour_core(GUI-независимыйProjectState, structured command results, operation stamp и model/view mapping),cadcontour_application(единственный владелец состояния, команды и Qt Undo) и переиспользуемыйcadcontour_ui(QObject view model и production QML); - реализована основа фоновых операций:
QThread::create(), один worker, immutable snapshot, OperationId/Stamp, bounded progress mailbox, cooperative cancel/invalidation, structured outcome, production publication gate и Ready → Accept/Discard handshake; - освобождение worker и shutdown защищены independent native HANDLE + Qt join; Closing сохраняет GUI event loop до Ready, destructor fallback не требует GUI callbacks;
- реализованы Save/Open/Save As, metadata-only Autosave/Recovery и GUI workflow с раздельными draft/dirty решениями и сохранением проекта при ошибках;
- operation notifications сохраняют draft/error/cursor/selection; отдельный
operation_probeиспользует production controller/runner/QML и изолированный verification sink без фиктивного ProjectState dataset; cell— конечный положительныйdoubleв мм, по умолчанию1; identity и ревизии защищены от переполнения, уведомления публикуются после согласованного изменения состояния и истории, повторный вход отклоняется;- наличие/совместимость результатов отделены от ревизий операций. Фиктивных datasets или глобального единственного Density Map slot нет; хранилище версий и raster mapping в задаче 01 не реализованы;
- определена архитектура приложения;
- определены алгоритмические контракты и открытые исследовательские решения;
- согласован набор итоговых примитивов LINE/ARC/CIRCLE; созданы synthetic JSON fixtures и базовый generator: validation, horizontal/vertical analytic scan, sampling/maxLineLength, isolated contacts и streaming XYZ/ASC с manifest;
- проверены все 8 geometry × 4 чистых scenarios, включая Horizontal+Vertical без deduplication; все 32 outputs сохранили SHA-256 baseline 0.3.0; реализованы regions/offsets/continuation shifts, overlap/double scan, MissingPoints, OutsideGridCloud, JaggedBoundary, ExtraTableFragment и mixed artifacts; повторные artifact runs детерминированы;
- финальный аудит Debug/Release сохранил все clean hashes и artifact determinism; пять representative cases дали одинаковые bytes между конфигурациями; чистый streaming case повторно создал 41.98 млн points / 1.030 GB, 25.30 с и peak working set 11.38 MiB; artifacted multi-pass smoke — 7.54 млн points / 167 MB, 4.73 с и peak working set 11.40 MiB;
- созданы CMake presets для Debug и Release, vcpkg manifest и минимальное Qt Quick/QML приложение;
- для исходного каркаса ранее проверены configure и clean build; в задаче 01 повторно выполнены configure/build, production tests, regression, dependency smoke, QML lint и запуск обеих конфигураций.
Устойчивые контракты — architecture.md, §§24–26, состояние задачи — план реализации. При интеграции будущих операций предстоит проверить cancellation checkpoints реальных длительных I/O, атомарность cache/Density dataset/history publication adapters, version/Rough applicability, lifetime больших datasets и транзакционность сохранения реальных результатов. Это ответственность следующих этапов, а не блокирующие дефекты принятой задачи 02.
Для задачи 03 (5/5) реализован самостоятельный headless cadcontour_cache: binary64 codec, зафиксированный v1, checksums/checked layout/file I/O, bounded Morton128 external sort, CacheWriter, packed BBox hierarchy и CacheReader со spatial queries и строгой полной validation. Sealing/readback, no-overwrite rename и PendingCache сохраняют cleanup owner до явного Accept; Reader владеет только read-only handle. Большой round-trip, ресурсы, HDD/source-order comparison и crash lifecycle проверены — отчёт. Интеграция с application state реализована в 04.2. Статус задачи 03: ACCEPTED, все пять частей реализации завершены.
Задача 03 принята пользователем после независимого комплексного ревью: PASS WITH COMMENTS, без подтверждённых дефектов P0–P2. Единственное замечание R2/P3 относилось к устаревшему перечню Open decisions в algorithms.md, §45 и устранено. В ходе завершённого ревью ранее повторены Debug/Release production (298/298), cache integration (1/1) и benchmark regression (7/7) в каждой конфигурации; исходные результаты и команды — в разделах выше и историческом отчёте. При оформлении принятия сборки, тесты и нагрузочные измерения не повторялись; ранее описанные ограничения производительности, ресурсов и сохранности данных сохраняются.
В 04.1 реализованы headless cadcontour_io: потоковый ASC/XYZ parser и
io::importAscXyz → существующий CacheWriter → RAII PendingCache.
Пустые строки разрешены, непустые требуют ровно три token; malformed/range/I/O
failures и cancellation возвращают structured error. Прямое binary64 conversion
проверяется независимыми рациональными golden pairs; единственный Z Continue/Cancel
пока синхронный. Формат Point Cache v1 и application/GUI не менялись.
Интерфейсы, проверки и ограничения — отчёт 04.1.
Первоначальные проверки 04.1 в Debug и Release: сборка и all_qmllint — PASS, production CTest —
337/337 PASS (включая 39 новых parser/importer и 166 cache cases),
отдельный -L cache_integration — 1/1 PASS. Только новый набор запускается
ctest --preset windows-debug -R ^AscXyz --output-on-failure или с
windows-release. Это исторические проверки только 04.1; итоговая приёмка всей задачи 04 приведена ниже.
После независимого ревью подтверждены и исправлены R1/R2: fallback при bad_alloc использует static diagnostic без conversion/truncation; parser принимает только non-sequential binary QIODevice (обычный QFile/QBuffer) с начальной позицией 0. Sequential sources отклоняются до чтения. Доказательства, адресные tests и границы проверки OOM — отчёт исправлений. Повторные Debug/Release проверки: сборка и QML lint — PASS, ASC/XYZ — 42/42 (включая 3 regression cases), production — 340/340, cache integration — 1/1 в каждой конфигурации.
Density map, rough stage, reduced point cloud, precise stage и DXF export пока не реализованы.
В 04.2 реальный import подключён к OperationRunner. PendingCache и файловые guards
остаются в worker; Ready содержит metadata, а необратимый Accept согласован с
noexcept обменом подготовленных ProjectState/QUndoStack. Первый импорт не требует
проекта, повторный требует явного разрешения замены. Новый проект получает новую
identity, cell = 1 мм и пустую историю. Source после успеха не требуется.
Принятые caches сохраняются в AppLocalDataLocation даже после Close/Shutdown;
до 05 допускается их накопление без manifest/GC. Ненулевой Z в production пока
безопасно отклоняется, без молчаливого Continue. Подробный технический отчёт —
asc-xyz-application-check.md.
Проверки 04.2 в Debug и Release: сборка и all_qmllint — PASS, новые application
import tests — 22/22, полная production CTest — 364/364 в каждой конфигурации
(включая ASC/XYZ 42, cache 166, operation 51, QML 14 cases).
Адресный запуск: ctest --preset windows-debug -R ^AscApplication --output-on-failure
либо с windows-release. Dev probe --auto replace — PASS в обеих конфигурациях.
Исторический статус реализации 04.2 — READY FOR INDEPENDENT REVIEW; часть принята в составе задачи 04.
В 04.3 реализовано межпоточное подтверждение ненулевого Z: worker публикует единственный типизированный запрос и ждёт Continue/Cancel через condition variable. Controller предоставляет регистрацию consumer, pending request, уведомление и защищённый ответ с OperationId/UUID. Cancel, invalidation, Close и shutdown снимают ожидание; Continue сохраняет отдельный Ready/Accept gate. Без зарегистрированного consumer ненулевой Z по-прежнему отклоняется с диагностикой, без зависания. Механизм и полный отчёт — nonzero-z-confirmation-check.md.
Проверки 04.3: Debug/Release build и all_qmllint — PASS; confirmation — 29/29,
полный production CTest — 393/393 в каждой конфигурации. Адресные команды:
ctest --preset windows-debug -R ^AscConfirmation --output-on-failure и
ctest --preset windows-release -R ^AscConfirmation --output-on-failure.
Исторический статус реализации 04.3 — READY FOR REVIEW; GUI подключён в 04.4A.
В 04.4A приложение предлагает ASC/XYZ после готовности окна; отмена оставляет
«Нет открытого проекта», «Новый проект» повторяет выбор. Нативный Windows FileDialog
передаёт QUrl в C++ adapter, который проверяет Windows/UNC paths и URL semantics.
Замена подтверждается отдельно для выбранного файла/контекста; прежний dataset/history
сохраняется до успешного Accept. Настоящий QML Z-dialog использует протокол 04.3;
закрытие означает Cancel, поздние callbacks не применяются. Карточка показывает
принятые count/bounds/Z, Point Cache и cell = 1 мм; карта плотности не строится.
GUI profile: 128 MiB рабочего бюджета, 32 handles; worker определяет доступное место на томе cache и оставляет резерв 64 MiB + 5% остатка. Это не предел RSS или размера source. Недостаточные ресурсы и I/O failures возвращают structured failure. Progress показывает реальные укрупнённые фазы с неизвестным total, без общего процента.
Проверки 04.4A в Debug/Release: сборка приложения/test targets и all_qmllint — PASS;
полный production CTest — 431/431 в каждой конфигурации, включая 37 новых GUI/UI
cases и 30 Z-confirmation cases с новой регрессией пробуждения без polling.
Windows GUI smoke проверен отдельно: native selection/cancel, Unicode/spaces,
import/metadata, replacement, Z и закрытие. Полный отчёт, команды и ограничения —
asc-xyz-gui-check.md.
Замечания независимого ревью 04.4A R1–R3 воспроизведены и исправлены: безопасные
продолжения ViewModel, повторная проверка выбора перед FileDialog и startup,
привязанный ко времени жизни окна. Добавлен 21 regression case; Debug/Release build,
all_qmllint и полный production CTest — 452/452 в каждой конфигурации.
Доказательства, команды и ограничения native smoke —
asc-xyz-gui-review-fixes.md.
04.4B проверила native GUI E2E, cancellation/shutdown, безопасные resource failures
и один большой Release import: 41 984 566 точек, 69.18 с до native completion/join,
Peak Working Set 222.9 MiB, итоговый cache 1 010 507 776 байт.
Полная Reader validation/ID coverage и независимые X/Y bit controls — PASS.
Целевой Writer/Sorter-прогон на HDD также прошёл; OS cache не сбрасывался,
logical I/O не считается physical traffic. Debug/Release build, all_qmllint
и production CTest — 452/452 в каждой конфигурации.
Production-код не менялся. Отчёт A–J, методика, точные результаты и ограничения —
asc-xyz-e2e-performance-check.md.
Opt-in инструмент доступен при CADCONTOUR2D_BUILD_TOOLS=ON:
import_acceptance; большие workloads не входят в CTest.
Проверенные команды после стандартной CMD-инициализации из Build:
cmake --build --preset windows-debug --target CADContour2D gui_import_tests view_model_tests qml_integration_tests nonzero_z_confirmation_tests import_application_tests asc_xyz_tests operation_tests project_tests dependency_smoke operation_probe all_qmllint --parallel 4
cmake --build --preset windows-release --target CADContour2D gui_import_tests view_model_tests qml_integration_tests nonzero_z_confirmation_tests import_application_tests asc_xyz_tests operation_tests project_tests dependency_smoke operation_probe all_qmllint --parallel 4
ctest --preset windows-debug -L production --output-on-failure
ctest --preset windows-release -L production --output-on-failureЧасти 04.1–04.4B завершены и приняты; задача 04 — ПРИНЯТА (ACCEPTED).
Финальное независимое ревью — REVIEW PASSED — TASK 04 ACCEPTABLE.
По предоставленному результату ревью: Debug/Release production CTest — 452/452 PASS,
cache integration — 1/1 PASS в обеих конфигурациях, GUI/UI — 58/58 PASS,
QML integration — 14/14 PASS; сборки, all_qmllint и Git diff checks — PASS.
При документационном закрытии сборки, тесты и нагрузки не повторялись.
Запись о принятии фиксирует проверенный commit
и ограничения. В задаче 05 приняты 05.1–05.4; на тот момент GUI Save/Open были добавлены в 05.5A;
явное построение и версии Density Map относятся к 06. Статусы ACCEPTED и результаты
приёмки задач 01–03 сохраняются.
Добавлен отдельный cadcontour_persistence: metadata snapshot, строгий UTF-8 JSON
manifest .pc2dproj v1 с точным round-trip чисел, проверка переносимых dataset paths
и Windows reparse points. Новый импорт получает постоянный ProjectId; cell и Undo/Redo
его сохраняют. Shared immutable DatasetLocation удерживает физическое расположение
без удаления принятых cache при Close/замене. Binary Point Cache v1, worker gate и GUI
сохранены. В границы 05.1 не входили Save/Save As, Open, копирование cache и autosave/recovery.
Точная схема и ограничения — Project Manifest v1,
результаты проверок — отчёт 05.1.
05.1 — ACCEPTED, принята пользователем 2026-10-19 на commit 408757c после
независимого ревью, исправления H1/H2 и повторной независимой проверки.
H1/H2 — FIXED, итог ревью — 05.1 — READY FOR ACCEPTANCE; новых блокирующих
дефектов нет. Итоги и границы принятия.
На момент принятия 05.1 задача 05 оставалась IN PROGRESS / NOT ACCEPTED;
последующие статусы этапов приведены ниже и актуально сведены в Project Status.
По результатам уже выполненной повторной независимой проверки сборки Debug/Release
и all_qmllint — PASS; итоговый production CTest в каждой конфигурации —
480 passed, 0 failed, 1 skipped из 481. Первый неуспешный Debug-прогон сохранён
в наблюдении по Operations-тесту.
При документальном закрытии сборки и тесты не повторялись. Пропущен только
file-symlink test: Windows error 1314, права создания symlink недоступны;
реальный junction escape проверен. Точные команды в стандартной CMD-среде выше:
cmake --build --preset windows-debug --target all all_qmllint --parallel 4
cmake --build --preset windows-release --target all all_qmllint --parallel 4
ctest --preset windows-debug -L production --output-on-failure
ctest --preset windows-release -L production --output-on-failureC++ ProjectController::saveProject(SaveRequest) сохраняет импортированный проект,
saveProject() повторяет сохранение, saveProjectAs(SaveRequest) переносит активный
storage в другой каталог после успешной публикации. Manifest v1 публикуется атомарно
после завершённого dataset; обычный повторный Save не копирует cache и не читает source.
Конфликты защищены кооперативным directory lock и проверкой ожидаемого snapshotId.
Разрешение commit отделено от подтверждённого результата, cancellation/shutdown
сохраняют опубликованные файлы. Dirty сравнивает persistent content с saved baseline;
изменения cell во время Save и Undo/Redo не теряются, history не очищается.
Save As с эквивалентным текущему path не делает копию. Другое имя manifest в том же directory отклоняется явно. При Uncertain commit baseline не меняется, evidence сохраняется, следующий Save требует проверки через последующее Open. GUI сохранения, Open, Autosave/Recovery не входят в 05.2. Архитектура и границы — §28.1, технический отчёт и заключение о принятии — save-implementation.md.
Проверенные targets включают save_tests и дочерний save_crash_probe.
Отдельный набор: ctest --preset windows-debug -R ^SaveApplication --output-on-failure
или windows-release. Он также входит в полный -L production.
После исправления R1/R2 Debug/Release build и all_qmllint — PASS; полный production
в каждой конфигурации — 524 passed / 0 failed / 2 skipped из 526, включая
45 Save tests. SKIP: file-symlink без Windows privilege (1314) и cross-volume Save As
при TEMP/build на одном томе. Cross-volume отдельно прошёл с TEMP на F: и target на C:
в обеих конфигурациях; junction проверен в production. Связанный набор Save/Operations/Import —
252 passed / 0 failed / 1 skipped из 253 в каждой конфигурации.
Новый regression test воспроизвёл преждевременный shutdown Ready на исходном коде
(1 FAIL), после исправления проходит; сохранены Closing → Ready, receipt и однократный
terminal transition. Причины, проверки и ограничения R1/R2.
Известная гонка setup TLS-теста ранее исправлена барьером фактического входа helper;
тогда ограниченные серии по 12 Debug/Release повторов прошли.
Финальная независимая проверка 2026-10-20 на cedf844 повторила сборки/lint,
R1 regression, полный production и отдельный cross-volume в обеих конфигурациях:
проверки прошли с указанными двумя production SKIP. R1/R2 — CLOSED; 05.2 — ACCEPTED.
Исторические результаты и оставшиеся ограничения отделены от новых проверок в
заключении.
Финальные команды после штатной инициализации среды остаются:
cmake --build --preset windows-debug --target all all_qmllint --parallel 4
cmake --build --preset windows-release --target all all_qmllint --parallel 4
ctest --preset windows-debug -L production --output-on-failure
ctest --preset windows-release -L production --output-on-failureOpt-in save_acceptance сравнил первый/повторный Save на synthetic caches 1 млн и 42 млн points. У 42 млн: 1 010 900 992 bytes, 30.53 s первый Save и 0.53 s repeat; repeat — 0 copies и 22.7 KB logical read. Sampled working set около 12 MiB у обоих размеров. Методику, точные числа и ограничения OS cache/измерений см. в отчёте; большой прогон предшествовал последнему усилению публикации нового manifest (copy/readback не менялись), после него повторён resource smoke на 1 млн points. Benchmark не включён в CTest.
ProjectController::openProject(OpenRequest) восстанавливает .pc2dproj без source
ASC/XYZ: ProjectId, точный cell и metadata, physical dataset binding, saved baseline
и clean state. Runtime session новый, Undo/Redo пусты. До успешного atomic Accept
прежний проект сохраняется; replacement требует явного подтверждения, Busy/shutdown/
stale context и cancellation защищены существующим OperationRunner.
Open проверяет только bounded manifest и CacheReader envelope/root: 73 728 bytes
непустого v1 cache, ноль point pages. Full validation, scan, copy, PNG и reduced cloud
не запускаются. Missing/corrupt/unsupported/inaccessible cache сохраняет доступные
metadata и диагностику. C++ закрывает cell/Save/зависимые операции до успешного явного
recheckPointCache; Close и подтверждённые Import/Open остаются доступны.
AvailableLimited не означает полную integrity validation. Последующий Save повторяет
filesystem checks и переиспользует неизменённый cache без копирования.
Исходная проверка 396662d: Debug/Release build/lint — PASS;
новые Open tests 58/58 и полный production
583 passed / 0 failed / 1 skipped в каждой конфигурации. SKIP — существующий
file-symlink test без privilege 1314. Проверены реальные Windows ACL/sharing failures,
junction, перенос C: → D:, dirty/Undo, shutdown/reentry и оба исхода Uncertain Save.
Большие performance/Peak Working Set, UNC и power-loss проверки не выполнялись.
Форматы v1 и Save permission/receipt сохранены. Отчёт A–J,
протокол.
Исторический статус реализации до ревью: READY FOR INDEPENDENT REVIEW.
Независимое ревью исходной 05.3 выявило R1/P2: отказ повторной identity ошибочно
становился Corrupt, FileIO повторного resolver — UnsafePath. R1 независимо подтверждено
и исправлено: native error сохраняется сразу, FileIO/Missing/UnsafePath различаются,
известный resource failure сохраняет прежний сеанс. Без изменения форматов, Save
и lifecycle. Baseline RED: 10 PASS / 16 FAIL, после исправления новые cases 26/26;
Open 84/84, production 609 PASS / 0 FAIL / 1 SKIP в Debug и Release.
Доказательства и результаты R1.
Повторная независимая проверка на 1415a6a7b3ccd5bb2e7a719c4ed3f70f773e44ae
подтвердила R1.1/R1.2 — FIXED, RED → GREEN и результаты Debug/Release;
новых подтверждённых дефектов нет. Итог ревью — READY FOR ACCEPTANCE.
05.3 — ACCEPTED пользователем 2026-10-21.
Независимая проверка, результаты и ограничения.
05.1–05.4 — ACCEPTED; принятие 05.4 описано ниже. На момент этой записи 05.5 и
задача 05 оставались IN PROGRESS / NOT ACCEPTED; актуальный статус 05.5A приведён
в Project Status.
C++ ProjectController автоматически сохраняет metadata после успешного Import/Save
и по таймеру 60 секунд при изменениях. Неизменённое persistent content не записывается;
Busy пропускается без очереди. Autosave не меняет explicit baseline, dirty и Undo/Redo.
Отдельный recovery v2 (с чтением v1) в AppLocalDataLocation атомарно публикуется после write/flush
через существующий managed worker, с отменой до permission и persisted receipt.
discoverRecovery, restoreRecovery, rejectRecovery различают активный/прерванный/
закрытый сеанс, повреждённую запись, совпадение/изменение/конфликт с explicit save.
Restore сохраняет ProjectId и точный cell, создаёт новый runtime session с пустой
историей и bounded cache availability; конфликт требует Save As. Неподтверждённый
Close/Shutdown сохраняет recovery, подтверждённый Discard фиксируется отдельно.
Datasets не копируются и не удаляются; полного cache scan/validate/rebuild нет.
GUI workflow — 05.5; GC, power-loss и hostile filesystem protection не заявлены.
Контракты — architecture §31.1,
формат, команды, фактические проверки и ограничения —
отчёт 05.4.
Финальная независимая проверка commit b086cad990e65b5c8265798fbec296da85fec303:
Debug/Release build all и all_qmllint — PASS; итоговый production CTest в каждой
конфигурации — 694 passed / 0 failed / 1 skipped из 695;
целевые N1 + H1/H2 — 25/25, Recovery — 64/64, включая
7/7 process crash tests, независимый probe — 29/29 в каждой конфигурации.
SKIP — существующий StoragePath.FileSymlinkEscape без Windows privilege
(1314). Autosave/discovery проверены с эксклюзивно закрытым cache и удалённым source;
restore читает 73 728 bytes, ноль point pages. Детали и промежуточные failures — в отчёте.
Независимый ревьюер сохранил неблокирующее наблюдение: Recovery-тест иногда получал
допустимый NoChange вместо ожидаемого Applied, когда Autosave уже сохранил snapshot
после Save As. В Recovery P3 синхронизирована fixture после Import/Save, сохранено
строгое ожидание реальной записи и отдельно проверены оба порядка Autosave.
Проверки P3 и сохранённые исторические failures.
Подробности независимой проверки и ограничения.
05.4 — ACCEPTED пользователем 2026-10-22, вердикт ревью — READY FOR ACCEPTANCE;
H1–H3/N1 — FIXED и закрыты. При документальном закрытии сборки и CTest не повторялись.
05.5A принята с ограничениями; GUI Recovery/startup и новые сквозные проверки
реализованы в 05.5B (отчёт ниже). 05.5 и задача 05 — ACCEPTED WITH LIMITATIONS;
актуальные результаты и ограничения — в итоговом принятии.
Меню «Файл»: новый проект/импорт ASC/XYZ, Open .pc2dproj, Save, Save As,
закрытие проекта и выход. Первый Save запрашивает расположение, повторный использует
известный путь. Заголовок показывает имя и dirty, карточка — путь, cache availability
и причину ограничений; техническая диагностика раскрывается отдельно.
Неприменённый cell разрешается до Save/закрытия/замены, dirty — до закрытия/замены.
Escape и закрытие диалога отменяют действие. Сохранение старого snapshot не скрывает
новые правки. Системная кнопка окна, меню и Quit event используют один C++ workflow,
сохраняющий native completion/join и existing publication guards. Close проекта
не завершает приложение. Open/recheck не делают full validation или rebuild.
Автоматические проверки, native GUI-приёмка, результаты независимой проверки L1 и явные ограничения — отчёт 05.5A. Последующие native проверки подтвердили системный DPI 150% и длительный Save с поздней правкой; layout исправлен. GUI Recovery/startup decision и сквозные проверки добавлены в 05.5B; 05.5A, 05.5B, 05.5 и задача 05 — ACCEPTED WITH LIMITATIONS. Актуальные ограничения, включая standalone Recovery, focus, DPI 200% и N/A переноса между мониторами, приведены в итоговом принятии.
После готовности окна bounded metadata discovery предшествует startup Import. Диалог показывает состояния/отношения записей, metadata и диагностику; Restore, Reject с подтверждением и «Позже» — отдельные действия. Escape сохраняет запись, повторный доступ — «Файл → Восстановление». Restore поверх проекта проходит прежние replacement/draft/dirty решения; Autosave не теряет подтверждённое намерение. Конфликт требует Save As, partial recovery оставляет metadata и bounded recheck. Controller protocols и persistent formats сохранены, тяжёлых startup вычислений нет.
Проверенные команды в CMD-среде из Build для debug и release:
cmake --build --preset windows-debug --target all all_qmllint --parallel 4
cmake --build --preset windows-release --target all all_qmllint --parallel 4
ctest --preset windows-debug -R RecoveryGui --output-on-failure
ctest --preset windows-release -R RecoveryGui --output-on-failure
ctest --preset windows-debug -L production --output-on-failure
ctest --preset windows-release -L production --output-on-failureИсторические результаты первоначальных 44 GUI cases, полной регрессии, process crashes, native Windows
GUI и отдельного HDD сценария — отчёт 05.5B.
После исправления IR-05-T1 RecoveryGui содержит 50 cases. Независимая перепроверка
fb1f706: все 15 lifecycle variants, по 30 повторов прежних /2 и /5, связанные
170 cases и production 813 PASS / 0 FAIL / 1 SKIP прошли в Debug и Release.
05.5B, 05.5 и задача 05 — ACCEPTED WITH LIMITATIONS;
закрытие IR-05-T1 и итоговое решение.