Source, plan/plan.json in the repository. This page is drawn from it and has no other source. Dates are a calculation from day estimates and dependencies, starting from 2026-09-08, not a promise.
123 сделана10 не начата5 не решена4 в работе
Done 123 of 142 tasks.
Владелец 2026-09-20: «если судить по нему — мы сделали MVP и дальше осталось тестить на чужих людях?». НЕТ, и счёт «сделано N из M» это скрывал. «Сделана» здесь значит «круг проходит на живых файлах корпуса», а не «годится людям». Требования к ядру и критерии готовности — docs/CORE-REQUIREMENTS.md; по ним выполнено 24 требования из 31 и НИ ОДИН из шести критериев готовности полностью не закрыт. Число задач — мера работы, а не мера готовности.
Open right here. The gray path next to each one is where it lives in the repository, to find the same file yourself and see its edit history.
docs/VISION.mddocs/PLAN.mdCLAUDE.mddocs/CORE-REQUIREMENTS.mddocs/MODEL-CONTRACT.mddocs/MODEL.mddocs/PIPELINE-FORMAT.mddocs/PROMISES.mddocs/SECURITY.mddocs/LANDING.mddocs/MVP.mddocs/LANGUAGE.mddocs/SCENARIOS.mddocs/BRAND.mddocs/DECISIONS.mddocs/OPEN-QUESTIONS.mddocs/OWNER-NOTES.mddocs/BACKLOG.mddocs/BASELINE-LOG.mddocs/SOURCES.mddocs/GROUND-TRUTH.mdformats/limits.jsonreports/etalon/docs/STAND.mddocs/WINDOWS-ENV.mdpipelines/| No. | task | queue | who | state |
|---|---|---|---|---|
| Stage 0. Правильность измерима | ||||
| 0.1 | Страница разметки: все слои файла, наш ответ скрыт, ответ «не знаю» отдельно | Инструмент разметки | роль | сделана |
| 0.2 | Счётчик правильности по слоям и по объектам, с разбором источника ошибки | Инструмент разметки | роль | сделана |
| 0.3 | Переделка после отзыва: русские имена классов, слой на фоне чертежа, таблица длин, «своё значение», «выбрал наугад» Первая разметка мерила нашу страницу, а не правила: 25% оказались оценкой интерфейса | Инструмент разметки | роль | сделана |
| 0.4 | Приближение и сдвиг карты, GPKG рядом со страницей для QGIS after: 0.3 | Инструмент разметки | роль | сделана |
| 0.5 | Roads_CAD размечен (первая попытка, на старой странице) | Разметка владельцем | владелец | сделана |
| 0.6 | Roads_CAD размечен заново на переделанной странице — 50% по слоям, 33% по объектам after: 0.3 | Разметка владельцем | владелец | сделана |
| 0.7 | Разметить 9038_2015, CoL_Transportation, DELCO — сделано 2026-09-20 На одном файле править правила нельзя: это подгонка. Нужно отличить манеру издателя от неверного правила after: 0.4 | Разметка владельцем | владелец | сделана |
| 0.8 | Свести четыре разметки, назвать механизм каждой ошибки, решить что править after: 0.7 | Разметка владельцем | роль | сделана |
| Stage 1. Модель перестаёт быть CAD-моделью | ||||
| 1.1 | Модель переноса: объекты, схемы полей, паспорт, происхождение, остаток | Модель и читатели | роль | сделана |
| 1.2 | Читатели DWG и DXF, склейка разорванных значений, запасной путь при обрыве | Модель и читатели | роль | сделана |
| 1.3 | Читатель табличных форматов через OGR | Модель и читатели | роль | сделана |
| 1.4 | Починка разъехавшихся кодировок до классификации | Модель и читатели | роль | сделана |
| 1.5 | Требования к ядру и критерии готовности, с числом по каждому пункту Вопрос владельца «а где у нас требования к ядру и критерии готовности?» — их не было. Без них «готово» объявляет тот, кто делал, и тогда, когда устал | Техдоки | роль | сделана |
| 1.9 | Модель переноса как КОНТРАКТ: поля, что значит каждое, что запрещено класть, как расширять, где узкие места Центр продукта, на нём висит всё, а описан черновиком и головами. Владелец: «уже было так, что ты не додумывал модель правильно и я тебя поправлял» — документ делает это поправимым ДО кода, а не после after: 1.5 | Техдоки | роль | сделана |
| 1.6 | Формат файла прогона как спецификация: ключи, значения, что считается ошибкой Канвас будет редактором этого файла. Два понимания одного формата разъедутся молча after: 6.2 | Техдоки | роль | сделана |
| 1.7 | Что мы обещаем и чего НЕ обещаем — документ для чужого человека Первый же внешний человек спросит про хранение данных и про потери. Отвечать на это в переписке — значит отвечать каждый раз по-разному after: 4.11 | Техдоки | роль | сделана |
| 1.8 | API плагинов и конвертеров как спецификация Звать чужих разработчиков без спецификации нельзя after: 9.1 | Техдоки | роль | не начата |
| 1.10 | Машинный слой по-английски: строки прогона, имена ступеней, командная строка, поля форм, JSON чата Шаг 1 из docs/LANGUAGE.md, сделан 2026-09-23. Словарь — docs/PIPELINE-FORMAT.md: 22 вида строк, ~90 ключей. По дороге нашлось четыре вещи дороже самого переименования: проверялка врала в обе стороны, командная строка не была в списке вовсе, пробел в значении ломал разбор в двух наших же местах, убийство по памяти искалось по русской фразе | Техдоки | роль | сделана |
| 1.11 | Имена в коде по-английски: модуль за модулем, с регрессией после каждого Шаг 3 из docs/LANGUAGE.md. На 2026-09-23: имена функций и классов доведены до НУЛЯ (было 203). Константы доведены до НУЛЯ 2026-09-23: 147 в 22 модулях, двумя ветками агентов, каждая проверена живым кругом (398→398, 255→255). Значения состояний на диске прежние («ждёт», «решение»…) — переименованы только имена. Локальные имена доведены до НУЛЯ тем же вечером: 1073 имени в 46 модулях, четырьмя параллельными ветками агентов; каждая слита только после круга через живой стенд в образе (4 из 4, обещание 3355 = 3355) и злого корпуса. Параметры функций — тоже НОЛЬ (226 в 23 модулях), после того как в undefined.py появился третий проход — именованные аргументы, доказанный на настоящем случае. Поля dataclass и хвосты — тоже ноль. ЗАКРЫТО 2026-09-23: идентификаторов с кириллицей в src и tools 0 (счётчик по токенам в no-cyrillic.sh). Данные перенесены на живом стенде: 143 job.json (стенд лежал 21 с) и 254 файла старых наборов в 12 каталогах; слой совместимости model._old_words удалён. Кириллица осталась только там, где ей место: строки для человека, комментарии, докстринги, значения данных и имена CSS-классов — это шаг 4 — они тоже в списке шага 3. Заведена tools/undefined.py: py_compile НЕ ловит незавершённое переименование, NameError — ошибка времени исполнения; второй проход ловит обращения к соседнему модулю, которых не видит symtable after: 1.10 | Техдоки | роль | сделана |
| 1.12 | Текст для человека — ресурс локализации, английский основной Шаг 4 из docs/LANGUAGE.md. Владелец: «русский — только ОДНА из локализаций и не основная». Сегодня текст вписан в код, и переключение языка требует правки кода after: 1.11 | Техдоки | роль | в работе |
| 1.13 | Машинный слой целиком по-английски: ключи файла прогона, имена трансформеров, комментарии и докстринги нового кода Владелец 2026-09-24: «почему вообще в коде появляется кириллица … мы же не 1С, мы же ведём разработку на английском!». Русский остаётся только в каталогах локализации after: 1.11 | Техдоки | роль | сделана |
| Stage 2. Второй вход и второй выход | ||||
| 2.1 | Выдача в девять форматов по схеме модели | Круг по форматам | роль | сделана |
| 2.2 | Сверка кругом: объекты, поля, типы, структура геометрии, смещение числом | Круг по форматам | роль | сделана |
| 2.3 | Круг MapInfo → модель → MapInfo на пяти таблицах Дублина | Круг по форматам | роль | сделана |
| 2.4 | Самопроверка: круг по всем девяти форматам одной командой | Круг по форматам | роль | сделана |
| 2.5 | Круг по девяти форматам на большом файле (353 636 объектов) after: 2.4 | Круг по форматам | роль | сделана |
| 2.6 | FlatGeobuf на большом файле: расхождение геометрии у 29 872 объектов — разобрать и починить На тайлах круг замыкался. Значит дело либо в нашем сопоставлении по слепку при частичной сверке, либо в самом формате на объёме — и пока не названо, какое из двух, круг на большом файле не закрыт (критерий Г2) after: 2.5 | Круг по форматам | роль | сделана |
| 2.7 | Предел по размеру файла: назвать числом, отказывать заранее 453 МБ убивает по памяти. Сегодня человек узнаёт об этом после получаса ожидания (критерий Г5) | Круг по форматам | роль | сделана |
| 2.8 | Сверка форматов, переставляющих объекты, на файле больше предела частичной сверки FlatGeobuf на большом файле сверен 0 из 353 636: формат пишет в порядке пространственного индекса, а частичная сверка берёт первые 200 000 с каждой стороны — это разные объекты. Отказ честный, но круг на этом формате замером не подтверждён after: 2.6 | Круг по форматам | роль | сделана |
| 2.9 | Сверка форматов, которые переименовывают набор: сопоставлять по полю, а не по имени слоя DXF кладёт всё в слой entities, а имя набора хранит в поле Layer. Выдача и обратное чтение нашим читателем работают, а сверка ищет набор по имени слоя и объявляет его пропавшим after: 2.8 | Круг по форматам | роль | сделана |
| Stage 3. Матрица возможностей форматов | ||||
| 3.1 | Матрица на девять форматов, каждая строка называет свой замер | Замеры | роль | сделана |
| 3.2 | Предсказание = план: писатель исполняет ровно тот объект, что показали человеку | Замеры | роль | сделана |
| 3.3 | Десятый формат и дальше — по мере надобности, не впрок | Замеры | роль | не начата |
| Stage 7. Безопасность и публичная бета | ||||
| 7.1 | Изоляция разбора: каждая задача в одноразовом контейнере без сети и привилегий | Этап А: без этого беты нет | роль | сделана |
| 7.2 | Загрузка потоком на диск с пределом по ходу | Этап А: без этого беты нет | роль | сделана |
| 7.3 | Номер задачи 128 бит вместо 24 | Этап А: без этого беты нет | роль | сделана |
| 7.4 | Страж приёма: частота, объём, очередь, место на диске, журнал | Этап А: без этого беты нет | роль | сделана |
| 7.5 | Заголовки безопасности и предел времени на задачу | Этап А: без этого беты нет | роль | сделана |
| 7.6 | Корпус злых файлов и прогон по нему | Этап А: без этого беты нет | роль | сделана |
| 7.7 | TLS и обратный прокси: предел тела, тайм-ауты (deploy/Caddyfile; ждёт площадки) нужна площадка и домен — решение владельца | Этап Б: до широкого анонса | владелец | сделана |
| 7.8 | Отдельный источник для скачивания результатов (dl.swage.tools) after: 7.7 | Этап Б: до широкого анонса | роль | сделана |
| 7.9 | Токен в форме решения (CSRF) | Этап Б: до широкого анонса | роль | сделана |
| 7.10 | Отключить сетевые драйверы GDAL и расширения SQLite, ЗАМЕРИТЬ | Этап Б: до широкого анонса | роль | сделана |
| 7.11 | Обезвредить формулы в CSV на выходе | Этап Б: до широкого анонса | роль | сделана |
| 7.12 | Несколько исполнителей: один файл не блокирует всех | Этап Б: до широкого анонса | роль | сделана |
| 7.13 | Наблюдение: живость, диск, очередь, страница /health; оповещение письмом ждёт домена | Этап Б: до широкого анонса | роль | сделана |
| 7.14 | Текст лендинга: экран за экраном, до всякой вёрстки | Этап Б: до широкого анонса | роль | сделана |
| 7.15 | Дизайн-система в репозитории: токены и компоненты одним файлом стиля | Этап Б: до широкого анонса | роль | сделана |
| 7.16 | Лендинг свёрстан и показан прототипом для обсуждения | Этап Б: до широкого анонса | роль | сделана |
| 7.17 | Мобильная вёрстка проверена на узком экране 390px: приём, задача, лендинг | Этап Б: до широкого анонса | роль | сделана |
| 7.18 | Адреса латиницей | Этап Б: до широкого анонса | роль | сделана |
| 7.19 | Письмо как резерв к уведомлению браузера; письмо владельцу о беде стенда | Этап Б: до широкого анонса | роль | сделана |
| 7.20 | Отказ по числу объектов до работы, числом, вместо убийства по памяти | Этап Б: до широкого анонса | роль | сделана |
| 7.21 | Ни одного стиля и скрипта в разметке: CSP script-src и style-src без послаблений | Этап Б: до широкого анонса | роль | сделана |
| 7.22 | Настроить отправку почты: SMTP-сервис и ключи нужен почтовый сервис; домен useswage.com куплен 2026-09-25 | Этап Б: до широкого анонса | владелец | не решена |
| 7.23 | Админка: вход ключом, сессия печенькой, оглавление служебного; на фронте две ссылки Владелец 2026-09-22: «я не вижу страницу админки». Её и не было видно: единственный адрес открывался ссылкой с ключом внутри, а ссылку знал только тот, кто её написал | Этап Б: до широкого анонса | роль | сделана |
| 7.24 | Телеграм включён: ключ бота на стенде, номер чата узнаётся сам | Этап Б: до широкого анонса | роль | сделана |
| Stage 4. Веб: «дай мне это в QGIS» | ||||
| 4.1 | Очередь задач, TTL, согласие на сервере, удаление исходника сразу после чтения | Стенд | роль | сделана |
| 4.2 | Прогон надвое: сначала цена в каждом формате, потом запись по решению человека | Стенд | роль | сделана |
| 4.3 | Живое обновление без перезагрузки, оповещение по готовности | Стенд | роль | сделана |
| 4.4 | Ход работы наружу, пока ступень идёт | Стенд | роль | сделана |
| 4.5 | Отказ чтения человеческими словами и одним отказом | Стенд | роль | сделана |
| 4.6 | Схема ступеней: где мы сейчас, включая ступени, которых ещё не было | Картинки | роль | сделана |
| 4.7 | Схема потока данных: что с чем стало, разложенные наборы отдельной линией | Картинки | роль | сделана |
| 4.8 | Поток: несколько файлов на входе одной задачей after: 4.7 | Картинки | роль | сделана |
| 4.9 | Поток: колонка преобразования, когда классификация вернётся в прогон after: 4.8, 6.3 | Картинки | роль | сделана |
| 4.13 | Одна шапка на все страницы: приём, задачи, план, документы | Картинки | роль | сделана |
| 4.14 | Страница задач стенда: видно «идёт» и видно, держим ли мы ещё файл человека after: 4.13 | Картинки | роль | сделана |
| 4.15 | Схема потока: до выбора формата, с типом геометрии и числом на линии, шириной в страницу Владелец 2026-09-20: «почему на этом шаге уже не показываем схему данных, которые уже прочитали?» — выбирают формат, глядя на свои данные after: 4.7 | Картинки | роль | сделана |
| 4.16 | Приём ZIP: достать чертёж или таблицу со спутниками, сказать что взяли «Это не чертёж, первые байты PK» верно по букве и бесполезно: MapInfo и Shapefile иначе как архивом не пришлёшь | Картинки | роль | сделана |
| 4.17 | Ход отправки файла и оповещение, которое видно включённым 300 МБ уходят минутами, и форма всё это время молчит; кнопка оповещения сбрасывалась при каждом обновлении страницы | Картинки | роль | сделана |
| 4.18 | Схема потока для нескольких входных файлов и колонка преобразования Владелец 2026-09-20: «схема очень краткая, если не сейчас, то потом всё равно должно быть всё» after: 4.15, 4.8 | Картинки | роль | сделана |
| 4.19 | Числа задачи считаются таблицей и сводом; состояние задачи — скрытой меткой латиницей Владелец 2026-09-22: «разве это не статистическая задача — складывать результаты в таблицу, потом суммировать?» и «почему у тебя сигналы завязаны на человеческие слова — используй скрытые метки» | Картинки | роль | сделана |
| 4.20 | Концепт и бук: имя, одна строка, знак, палитра, шкала, тон, запреты — страница /brand и docs/BRAND.md Владелец 2026-09-22: «по дизайну — надо сначала разработать концепт и бук: лого — палитра — концепция — элементы». Дизайн-система 7.15 заведена снизу и решает, чтобы НЕ БЫЛО ПЛОХО; она ничего не говорит о том, кто мы такие | Картинки | роль | сделана |
| 4.21 | Слово владельца по концепции и знаку Менять знак после того, как его увидели люди, дороже, чем до after: 4.20 | Картинки | владелец | не решена |
| 4.22 | Страница для тестировщиков: что просим попробовать, что уже известно, куда писать Первая страница, где бук применяется к НОВОМУ, а не описывает сделанное. До бука вышла бы аккуратной и никакой after: 4.21 | Картинки | роль | не начата |
| 4.10 | Учётные записи или хотя бы лимит на гостя Взята ветка «хотя бы лимит на гостя»: загрузок в час, байт в сутки, задач в работе — всё на адрес (smartetl.guard). Учётных записей НЕТ, и это решение владельца, а не недоделка: до них нужен ответ про тарифы. Пределы проверены командой guard selftest 2026-09-23, шесть из шести after: 4.5 | Готовность к людям | роль | сделана |
| 4.11 | Предел на размер и на число задач, защита от злого гостя Размер, число объектов, память задачи, длина очереди, место на диске, злой корпус. Проверено: guard selftest — 6 пределов и 5 случаев адреса, промахов 0; smartetl.evil — 0 падений, 0 утечек, 0 записи за пределы каталога after: 4.10 | Готовность к людям | роль | сделана |
| 4.12 | Где хостится: решение владельца о площадке и деньгах | Готовность к людям | владелец | не решена |
| Stage 5. Прогон по чужой боли и приглашение проверить | ||||
| 5.1 | Отчёт для чужого человека — есть и работает | Выход к людям | роль | сделана |
| 5.2 | Выбрать площадки и людей, кому писать | Выход к людям | владелец | не решена |
| 5.3 | Пять содержательных ответов практиков, двое просят попробовать на своих данных after: 5.2, 4.11 | Выход к людям | владелец | не начата |
| Stage 6. Пайплайн как текст, канвас после релиза | ||||
| 6.1 | Прогон описан файлом, неизвестный ключ — отказ, а не пропуск | Текст | роль | сделана |
| 6.2 | Примеры двухэтапного прогона в pipelines/ | Текст | роль | сделана |
| 6.3 | Классификация обратно в двухэтапный путь after: 0.8 | Текст | роль | сделана |
| 6.4 | Вертикальный канвас как представление того же файла, выключается Решение владельца 2026-09-19: после релиза. Роль не начинает по своей инициативе after: 5.3 | Канвас | роль | не начата |
| Stage 7. Аккаунты, лимиты, тарифы | ||||
| 7.1 | Тарифы и что в них входит after: 5.3 | Платное | владелец | не решена |
| 7.2 | Хранилище файлов пользователя after: 7.1 | Платное | роль | не начата |
| Stage 8. Библиотека сценариев и шаринг | ||||
| 8.1 | Короткие ссылки а: на схему и на живой результат в пределах срока задачи (24 ч) Владелец 2026-09-25: ссылки на схему данных не содержат, ссылка на результат — короткое имя страницы задачи с тем же сроком; обещание 8.7 не меняется | Библиотека | роль | сделана |
| 8.1b | Постоянные ссылки на результат — вместе с хранилищем пользователя after: 7.2 | Библиотека | роль | не начата |
| 8.2 | Библиотека схем а: только чтение, наши переносимые схемы (классы модели, вход по отпечатку) с контрольными числами и короткой ссылкой Владелец 2026-09-25: сначала описания (JSON наших трансформеров), Python-плагины — с песочницей 9.1 | Библиотека | роль | сделана |
| 8.2b | Библиотека схем б: публикация пользователями, учётные записи, кредиты с пределом after: 7.1, 8.2 | Библиотека | роль | не начата |
| 8.3 | Реестр известных наборов: издатель, отпечаток содержимого, ловушки, правила, замеренные числа с датой Владелец 2026-09-22: «ты уже знаешь набор, есть к нему правила — это опыт, библиотека сценариев, надо не просто копить, но и публично объявить». Знание копится само с 2026-09-08, но лежит прозой в трёх местах. Подробно — docs/SCENARIOS.md | Библиотека | роль | сделана |
| 8.4 | Опознание набора по содержимому: слепок имён слоёв и манеры, не по имени файла Разблокирована 2026-09-23 ответом владельца про наборы от людей. «Имя аккаунта на портале — не издатель»: Township of Langley приехал под именем OpenDataFME и опознался только оговоркой внутри сопроводительного txt after: 8.3 | Библиотека | роль | сделана |
| 8.5 | Публичная страница «наборы, которые мы уже знаем» — с числами и датой замера Первое, что можно показать людям из 5.2: не «попробуйте конвертер», а «ваш набор мы уже читаем, вот числа». Зависимость переставлена с 8.4 на 8.3 2026-09-23: странице нужен РЕЕСТР, а не опознание — она показывает, что мы знаем, а не узнаёт принесённое after: 8.3 | Библиотека | роль | сделана |
| 8.6 | Накопитель отпечатков: счётчик без читаемых имён, порог и перенос в реестр человеком Владелец 2026-09-23 разрешил пополнять библиотеку наборами от людей: «мы не берём их данные, мы берём правила и только если они подтверждаются статистикой». Один файл — не правило, а след одного файла, поэтому накопитель отдельно от реестра: отпечаток и счёт, без читаемых имён и без привязки к задаче, человеку или времени. Порог прежний — три независимых подтверждения, ноль противоречий, подтверждает человек after: 8.4 | Библиотека | роль | сделана |
| 8.7 | Строка в тексте согласия: что от разбора у нас остаётся счётчик Согласие говорит «файл передаётся для разбора и удаляется сразу после прогона». Про счётчик там не сказано ни слова. Либо текст это называет, либо мы делаем то, о чём не предупредили. Формулировку даёт владелец: это обещание человеку after: 8.6 | Библиотека | владелец | сделана |
| 8.8 | Хранение совпадает с обещанием: после срока в задаче не остаётся ни почты, ни адреса, ни имени файла, ни журналов с содержимым — только обезличенная статистика Формулировка владельца 2026-09-24 (docs/DECISIONS.md). Сборщик сегодня стирает только result/, а job.json хранит почту и адрес навсегда after: 8.7 | Библиотека | роль | сделана |
| 8.9 | HTTP API конверсии, первая версия: файл + описание прогона (pipeline JSON) → задача → результат и строки [fact]; ключи выдаются вручную, согласие принимается при выдаче ключа, пределы как у бесплатного веба Владелец 2026-09-24: «а нам API стоит запланировать?». У MyGeodata API есть (convert, datasetinfo) — docs/VS-MYGEODATA.md. Тело запроса у нас уже есть — файл прогона; не хватает аккаунтов и ключей (8.1). Контракт — английскими ключами, поэтому после 1.13 after: 8.1, 1.13 | Библиотека | роль | сделана |
| 8.10 | Выгрузка одним архивом с паспортом внутри; на странице — размер и размер архива Замер MyGeodata 2026-09-25 (docs/VS-MYGEODATA.md §9); владелец: «выгрузку архивом» | Библиотека | роль | сделана |
| 8.11 | Параметры выдачи по формату (кодировка, 2D/3D, тип геометрии, дуги, геометрия в таблицах) — с умолчанием, подсказкой и числом в прогнозе Замер MyGeodata 2026-09-25; владелец: «настройку выходных параметров» | Библиотека | роль | сделана |
| 8.12 | Сводка входа одним блоком до выбора формата: наборы, объекты, типы геометрии, СК, единицы, охват | Библиотека | роль | сделана |
| 8.13 | СК: кандидаты по охвату координат и обзорная схема «где легли данные» без внешних тайлов | Библиотека | роль | сделана |
| 8.14 | Просьба оставить отзыв о сервисе на сторонних площадках (G2, Capterra, AlternativeTo…; для .ru — свои): одинаково всем после любой завершённой задачи, без вознаграждения, одна строка в письме и на странице результата, не чаще раза в N задач Владелец 2026-09-26/27: «отзывы о сервисе на сторонних сайтах — для продвижения». Правила площадок: просить только довольных (review gating) и платить за отзывы запрещено. docs/BACKLOG.md after: 9.13 | Библиотека | роль | не начата |
| 8.15 | Термин «конвертация» вместо «перевод» (источник — конвертация — результат); Тексты экрана результата: раскрыть и переформулировать «обещали до записи», «сверено», «наборы», что в архиве — по находкам слепых чтений B0 Вошла в U3 (строки ru по словарю 1.2). B0: «обещали до записи» не понял ни один из трёх читателей; владелец согласен | Библиотека | роль | сделана |
| Stage 9. Трансформеры и пользовательский код | ||||
| 9.1 | API плагинов и песочница исполнения; свои трансформеры на Python/JS: запуск в задаче бесплатно, сохранение — платный тариф/опция или публикация с передачей прав в публичную библиотеку after: 8.2, 9.9 | Расширения | роль | не начата |
| 9.2 | Расширять библиотеку встроенных трансформеров — в простой, когда нет срочного Владелец 2026-09-24: «когда есть время и простой — расширять либы встроенных трансформеров». Каждый — по контракту docs/TRANSFORMERS.md, с контрольными числами и замером памяти | Расширения | роль | в работе |
| 9.3 | guard.prune_log без блокировки теряет свежие строки журнала приёма (найдено 9.4); Очередь: переход состояния задачи под flock, уникальный tmp, lock с владельцем, перечитать после mkdir(lock), атомарный допуск guard→put Аудит В3; К1 и К2 уже закрыты 2026-09-25. docs/REBUILD.md | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.4 | pytest в образе: машина состояний очереди, разбор [fact], план против записи Без тестов остальную перестройку делать вслепую. Годится для облака | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.5 | План как артефакт: forecast пишет plan.json, write и compare читают его; машинные поля вместо префиксов фраз Аудит В2: главное обещание держится на детерминизме трёх процессов; ложное «смещение» 5 450 424 уже было after: 9.4 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.6 | Результат ступени в JSON (stage-<name>.json), один разборщик вместо четырёх; web, api, selfcheck, pipeline, library читают JSON Аудит В1: контракт между модулями — русский текст stdout, и API v0 уже выставил его наружу after: 9.5 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.7 | Версии формата: паспорт, features.jsonl, job.json, файл прогона; коды вместо русских фраз в перечислениях модели after: 9.4 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.8 | Разрезать web.py: бренд и лендинг отдельно, сервисный слой (intake, archive, joblog) без HTTP, таблица маршрутов, API на сервисах Аудит В4: 6359 строк, 74 коммита за 3 дня, агенты копируют код, чтобы не трогать файл. Новый интерфейс (штурм) строится уже на сервисном слое after: 9.6 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.9 | Слои и расширяемость: общий модуль имён/геометрии (снять forecast↔write), stage.py вместо run._run, единый дескриптор формата, интерфейс читателя в ingest 9.1 (плагины) и новые форматы упрутся именно сюда after: 9.8 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.10 | Находки 9.6: слияние с одним прочитанным источником; rename_dataset и схема паспорта | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.11 | Хвост 9.3: задача навсегда «идёт» без каталога занятости — подбирается при старте службы after: 9.3 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.12 | Разбор загрузки (распознавание, листинг и распаковка архивов) — из веб-процесса в песочницу задачи; предел распаковки по записанным байтам Найдено при переписи SYSTEM.md и перечислено 9.8: веб распаковывает чужие архивы сам, предел — по заявленным размерам after: 9.8 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.13 | Язык по домену, версии разделены: отдельные серверы для ru и en; useswage.com — только английский, useswage.ru — только русский; без переключателя между ними и без hreflang; язык не берётся из Accept-Language и cookie Вердикт штурма 2026-09-26, §6, пересмотр владельцем в тот же день: дистанцировать ru и en версии (docs/DECISIONS.md) | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.14 | Три тупика очереди из повторного аудита: вечное «ждёт» при оставшемся замке, pick_up второго участника стирает исходник живой задачи, неожиданное исключение оставляет «идёт» A2, docs/review/2026-09-26-architecture-2.md: все три воспроизведены | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.15 | Пределы величины у всех чисел и тел запросов снаружи; названный отказ на неизвестный EPSG; атомарная запись файла ключей API; запрет _-ключей в params A2: tolerance из 400 цифр отключает сверку, битый файл ключей стирает все ключи — воспроизведено | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.16 | После каждого шага трансформера паспорт и счётчики сверки пересчитывает наш код из выхода шага; собственным числам шага не верим A2, вердикт по 9.1: каркас не готов к плагинам, пока шаг может переписать счётчики сверки (воспр.: objects_out=999 при 0 строк) | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.17 | Машинные решения по тексту человеку (4 в продукте) — на машинные поля; русские машинные значения в файлах — на английские ключи; дыра в l10n_check; мёртвый код A2 §3.3–3.4, §4.3: сигнал REBUILD «машинное решение по тексту» сработал | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.18 | Граница шага пользователя: трансформер видит только свой вход и пустой выход; манифест трансформера данными с JSON Schema параметров A2, вердикт по 9.1, пункты 1–3: вторая половина подготовки к плагинам after: 9.16 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.19 | Пределы на текстовые поля загрузки во время чтения потока, а не после сбора в память 9.15 назвала и не закрыла: поле в 100 МБ даёт пик 230 МБ (A2) | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.20 | Потери приёма из ревью данных: дуги DXF, M, содержимое блоков на запасном пути, угол/высота/цвет подписей, выключенные слои, XDATA, raw; плюс сводка статуса всех 44 строк ревью docs/review/2026-09-25-data.md, строки 21, 22, 37–41: потеря молчаливая, ни прогноз, ни сверка её не называют | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.21 | Что прощает сверка: подмена СК выхода, сдвиг под допуском в градусах, сдвиг внутренних вершин, разворот линий, NULL↔"", хвостовые пробелы, «007»→«7», 1e-20→0 Ревью данных, К2, К3: сверка давала closed на подлоге | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.22 | Проба предела числа слоёв: 100/1000/10000 слоёв через приём, прогноз, запись, сверку Вопрос штурма интерфейса: сколько слоёв закладывать. docs/review/2026-09-28-layers-probe.md | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.23 | Цена записи на слой: GPKG 1000×1 — 95 с, MapInfo 10000 — 574 с; найти своё и убрать Проба 9.22: время растёт быстрее числа слоёв after: 9.22 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| U1 | Брендбук и бриф по словарю 1.2: строка про «общую печать», seal вместо stamp в английской книге, конфликты — владельцу Итог штурма интерфейса 28.09 (docs/ui-storm/) | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| U2 | Прототип инженерной схемы: карточки в CSS grid и связи SVG, своя авто-раскладка, флажки формой без JS и с JS, порог перехода карточек в группы Итог штурма интерфейса 28.09; вертикальная схема, версия 1 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| U3 | Строки интерфейса ru по словарю 1.2 (включает 8.15), даты в UTC с поясом, русский текст вне каталога Итог штурма интерфейса 28.09: словарь — стандарт для всех строк | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.24 | Уровни возможностей: бесплатно / платно / платно без тарифа — по согласию галкой; первая — пространственный индекс GPKG выше порога слоёв Решение владельца 28.09: порог для индекса, выше — платно, без тарифа — согласие; по тому же принципу строить тарифы after: 9.23 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.25 | Печать в письме: растеризатор SVG в образе, письмо HTML с печатью и текстовой частью Решение владельца 28.09: «печать — делай»; почта пока заглушкой (spool) | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| U6 | Отчёт о конвертации в PDF: то же содержание, что экран результата, с печатью; генератор PDF в образе Критерий беты Б5 и словарь 1.2 («Отчёт — PDF с тем же содержанием, что экран результата»): при приёмке 9.24 выяснилось, что PDF-отчёта в продукте нет after: 9.25 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| U4a | Несколько форматов в одной задаче: запись, сверка и скачивание каждого, частичный результат, дописать формат, «Скачать всё архивом» «Простой» v5 предполагает выбор нескольких форматов флажками; релиз 1 умеет один | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| U4b | Вид «Простой» по v5: три шага, одна страница на телефоне, ожидание по адресу задачи, две ошибки, переключатель видов Критерий беты Б2 after: U4a | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| U5 | Вид «Инженерный» на основе прототипа U2: панель узла, группы слоёв выше 50, склонения видов Критерий беты Б3 after: U4b | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| U7 | Страница для тестировщиков (4.22), просьба об отзыве (8.14), разбор смысла помечен экспериментом с числом правильности Критерии беты Б8, Б9 after: U4b | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.26 | KML на Roads_CAD: потери формата названы (Integer64 → строка, концевой пробел); письмо несостоявшейся задачи; строка чтения кодом каталога Приёмка U4a: первая настоящая запись KML дала «сломан» after: U4a | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| 9.27 | Упавшая задача не шлёт письма: письмо «не завершена, наш сбой», оповещение владельцу, «Повторить» с сохранённым выбором Найдено в 9.26 after: 9.26 | Каркас — перестройка по аудиту 2026-09-25 | роль | сделана |
| U5b | «Инженерный» на 2000+ слоях с уникальными именами: предел числа карточек, группа раскрывается по одной Замер U5: 2000 слоёв — 18,9 с отрисовки и 2,7 МБ after: U5 | Каркас — перестройка по аудиту 2026-09-25 | роль | в работе |
| U8 | Книга интерфейса 1.0 со снимков живого стенда; пакет для одного круга внешнего аудита Шаг 3 беты after: U4c, U5, U7 | Каркас — перестройка по аудиту 2026-09-25 | роль | в работе |
A task's state changes together with the commit that made it true. A task declared done without a commit is an opinion, not a state.