Work plan

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 и НИ ОДИН из шести критериев готовности полностью не закрыт. Число задач — мера работы, а не мера готовности.

Project documents

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.md
    что мы делаем и для кого. Если что-то противоречит — прав этот файл
  • План по этапам docs/PLAN.md
    текстом: зачем каждый этап, когда считается готовым, какая инфраструктура нужна
  • Правила, влияющие на код CLAUDE.md
    ловушки форматов, роли ИИ, окружение. Пополняется фактами из работы
  • Требования к ядру и критерии готовности docs/CORE-REQUIREMENTS.md
    31 требование с числом по каждому и шесть критериев. Готовность объявляет владелец
  • Контракт модели переноса docs/MODEL-CONTRACT.md
    справочник: что в модели есть, что каждое поле значит, чего класть нельзя, как расширять и где узкие места
  • Журнал работы над моделью docs/MODEL.md
    хронология: как модель стала такой, с находками и поправками
  • Формат файла прогона docs/PIPELINE-FORMAT.md
    спецификация: ключи, значения, что считается ошибкой, что печатает исполнение. То самое, что будет рисовать канвас
  • Что обещаем и чего не обещаем docs/PROMISES.md
    для чужого человека: что гарантируем числом, чего не гарантируем и почему. Каждая строка проверяема командой
  • Безопасность: модель угроз и план docs/SECURITY.md
    что сделано, чем проверено, какие дыры остались и в каком порядке закрываются до беты
  • Лендинг: текст до картинки docs/LANDING.md
    что мы говорим чужому человеку на первом экране и почему именно это — до всякой вёрстки
  • Когда это MVP и когда звать людей docs/MVP.md
    критерии готовности к публичной бете числами: конвертер, продукт, безопасность, семантика
  • Язык проекта docs/LANGUAGE.md
    где кириллицы нет вовсе и почему, где она остаётся, в каком порядке переходим. Проверяется командой scripts/no-cyrillic.sh
  • Библиотека сценариев docs/SCENARIOS.md
    наборы, которые мы уже знаем: манера издателя, ловушки, правила, замеренные числа. Что с этим делать и чего делать нельзя
  • Концепт и бук docs/BRAND.md
    имя, одна строка, знак, палитра, шкала, тон и запреты. Глазами — страница /brand на стенде

Решения и вопросы

Числа и проверки

Работа руками

What is waiting on the owner's decision or work

What is being worked on right now

08.0915.0922.0929.0906.1013.1020.1027.1003.1110.1117.11todaystage 0 · Инструмент разметки0.1 Страница разметки: все слои файла, наш ответ0.2 Счётчик правильности по слоям и по объектам,0.3 Переделка после отзыва: русские имена классо0.4 Приближение и сдвиг карты, GPKG рядом со стрstage 0 · Разметка владельцем0.5 Roads_CAD размечен (первая попытка, на старо0.6 Roads_CAD размечен заново на переделанной ст0.7 Разметить 9038_2015, CoL_Transportation, DEL0.8 Свести четыре разметки, назвать механизм кажstage 1 · Модель и читатели1.1 Модель переноса: объекты, схемы полей, паспо1.2 Читатели DWG и DXF, склейка разорванных знач1.3 Читатель табличных форматов через OGR1.4 Починка разъехавшихся кодировок до классификstage 1 · Техдоки1.5 Требования к ядру и критерии готовности, с ч1.9 Модель переноса как КОНТРАКТ: поля, что знач1.6 Формат файла прогона как спецификация: ключи1.7 Что мы обещаем и чего НЕ обещаем — документ 1.8 API плагинов и конвертеров как спецификация1.10 Машинный слой по-английски: строки прогона, 1.11 Имена в коде по-английски: модуль за модулем1.12 Текст для человека — ресурс локализации, анг1.13 Машинный слой целиком по-английски: ключи фаstage 2 · Круг по форматам2.1 Выдача в девять форматов по схеме модели2.2 Сверка кругом: объекты, поля, типы, структур2.3 Круг MapInfo → модель → MapInfo на пяти табл2.4 Самопроверка: круг по всем девяти форматам о2.5 Круг по девяти форматам на большом файле (352.6 FlatGeobuf на большом файле: расхождение гео2.7 Предел по размеру файла: назвать числом, отк2.8 Сверка форматов, переставляющих объекты, на 2.9 Сверка форматов, которые переименовывают набstage 3 · Замеры3.1 Матрица на девять форматов, каждая строка на3.2 Предсказание = план: писатель исполняет ровн3.3 Десятый формат и дальше — по мере надобностиstage 7 · Этап А: без этого беты нет7.1 Изоляция разбора: каждая задача в одноразово7.2 Загрузка потоком на диск с пределом по ходу7.3 Номер задачи 128 бит вместо 247.4 Страж приёма: частота, объём, очередь, место7.5 Заголовки безопасности и предел времени на з7.6 Корпус злых файлов и прогон по немуstage 7 · Этап Б: до широкого анонса7.7 TLS и обратный прокси: предел тела, тайм-аут7.8 Отдельный источник для скачивания результато7.9 Токен в форме решения (CSRF)7.10 Отключить сетевые драйверы GDAL и расширения7.11 Обезвредить формулы в CSV на выходе7.12 Несколько исполнителей: один файл не блокиру7.13 Наблюдение: живость, диск, очередь, страница7.14 Текст лендинга: экран за экраном, до всякой 7.15 Дизайн-система в репозитории: токены и компо7.16 Лендинг свёрстан и показан прототипом для об7.17 Мобильная вёрстка проверена на узком экране 7.18 Адреса латиницей7.19 Письмо как резерв к уведомлению браузера; пи7.20 Отказ по числу объектов до работы, числом, в7.21 Ни одного стиля и скрипта в разметке: CSP sc7.22 Настроить отправку почты: SMTP-сервис и ключ7.23 Админка: вход ключом, сессия печенькой, огла7.24 Телеграм включён: ключ бота на стенде, номерstage 4 · Стенд4.1 Очередь задач, TTL, согласие на сервере, уда4.2 Прогон надвое: сначала цена в каждом формате4.3 Живое обновление без перезагрузки, оповещени4.4 Ход работы наружу, пока ступень идёт4.5 Отказ чтения человеческими словами и одним оstage 4 · Картинки4.6 Схема ступеней: где мы сейчас, включая ступе4.7 Схема потока данных: что с чем стало, разлож4.8 Поток: несколько файлов на входе одной задач4.9 Поток: колонка преобразования, когда классиф4.13 Одна шапка на все страницы: приём, задачи, п4.14 Страница задач стенда: видно «идёт» и видно,4.15 Схема потока: до выбора формата, с типом гео4.16 Приём ZIP: достать чертёж или таблицу со спу4.17 Ход отправки файла и оповещение, которое вид4.18 Схема потока для нескольких входных файлов и4.19 Числа задачи считаются таблицей и сводом; со4.20 Концепт и бук: имя, одна строка, знак, палит4.21 Слово владельца по концепции и знаку4.22 Страница для тестировщиков: что просим попроstage 4 · Готовность к людям4.10 Учётные записи или хотя бы лимит на гостя4.11 Предел на размер и на число задач, защита от4.12 Где хостится: решение владельца о площадке иstage 5 · Выход к людям5.1 Отчёт для чужого человека — есть и работает5.2 Выбрать площадки и людей, кому писать5.3 Пять содержательных ответов практиков, двое stage 6 · Текст6.1 Прогон описан файлом, неизвестный ключ — отк6.2 Примеры двухэтапного прогона в pipelines/6.3 Классификация обратно в двухэтапный путьstage 6 · Канвас6.4 Вертикальный канвас как представление того жstage 7 · Платное7.1 Тарифы и что в них входит7.2 Хранилище файлов пользователяstage 8 · Библиотека8.1 Короткие ссылки а: на схему и на живой резул8.1b Постоянные ссылки на результат — вместе с хр8.2 Библиотека схем а: только чтение, наши перен8.2b Библиотека схем б: публикация пользователями8.3 Реестр известных наборов: издатель, отпечато8.4 Опознание набора по содержимому: слепок имён8.5 Публичная страница «наборы, которые мы уже з8.6 Накопитель отпечатков: счётчик без читаемых 8.7 Строка в тексте согласия: что от разбора у н8.8 Хранение совпадает с обещанием: после срока 8.9 HTTP API конверсии, первая версия: файл + оп8.10 Выгрузка одним архивом с паспортом внутри; н8.11 Параметры выдачи по формату (кодировка, 2D/38.12 Сводка входа одним блоком до выбора формата:8.13 СК: кандидаты по охвату координат и обзорная8.14 Просьба оставить отзыв о сервисе на сторонни8.15 Термин «конвертация» вместо «перевод» (источstage 9 · Расширения9.1 API плагинов и песочница исполнения; свои тр9.2 Расширять библиотеку встроенных трансформероstage 9 · Каркас — перестройка по аудиту 2026-09-259.3 guard.prune_log без блокировки теряет свежие9.4 pytest в образе: машина состояний очереди, р9.5 План как артефакт: forecast пишет plan.json,9.6 Результат ступени в JSON (stage-<name>.json)9.7 Версии формата: паспорт, features.jsonl, job9.8 Разрезать web.py: бренд и лендинг отдельно, 9.9 Слои и расширяемость: общий модуль имён/геом9.10 Находки 9.6: слияние с одним прочитанным ист9.11 Хвост 9.3: задача навсегда «идёт» без катало9.12 Разбор загрузки (распознавание, листинг и ра9.13 Язык по домену, версии разделены: отдельные 9.14 Три тупика очереди из повторного аудита: веч9.15 Пределы величины у всех чисел и тел запросов9.16 После каждого шага трансформера паспорт и сч9.17 Машинные решения по тексту человеку (4 в про9.18 Граница шага пользователя: трансформер видит9.19 Пределы на текстовые поля загрузки во время 9.20 Потери приёма из ревью данных: дуги DXF, M, 9.21 Что прощает сверка: подмена СК выхода, сдвиг9.22 Проба предела числа слоёв: 100/1000/10000 сл9.23 Цена записи на слой: GPKG 1000×1 — 95 с, MapU1 Брендбук и бриф по словарю 1.2: строка про «U2 Прототип инженерной схемы: карточки в CSS grU3 Строки интерфейса ru по словарю 1.2 (включае9.24 Уровни возможностей: бесплатно / платно / пл9.25 Печать в письме: растеризатор SVG в образе, U6 Отчёт о конвертации в PDF: то же содержание,U4a Несколько форматов в одной задаче: запись, сU4b Вид «Простой» по v5: три шага, одна страницаU5 Вид «Инженерный» на основе прототипа U2: панU7 Страница для тестировщиков (4.22), просьба о9.26 KML на Roads_CAD: потери формата названы (In9.27 Упавшая задача не шлёт письма: письмо «не заU5b «Инженерный» на 2000+ слоях с уникальными имU8 Книга интерфейса 1.0 со снимков живого стенд
No.task queue whostate
Stage 0. Правильность измерима
0.1Страница разметки: все слои файла, наш ответ скрыт, ответ «не знаю» отдельноИнструмент разметкирольсделана
0.2Счётчик правильности по слоям и по объектам, с разбором источника ошибкиИнструмент разметкирольсделана
0.3Переделка после отзыва: русские имена классов, слой на фоне чертежа, таблица длин, «своё значение», «выбрал наугад»
Первая разметка мерила нашу страницу, а не правила: 25% оказались оценкой интерфейса
Инструмент разметкирольсделана
0.4Приближение и сдвиг карты, GPKG рядом со страницей для QGIS
after: 0.3
Инструмент разметкирольсделана
0.5Roads_CAD размечен (первая попытка, на старой странице)Разметка владельцемвладелецсделана
0.6Roads_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.8API плагинов и конвертеров как спецификация
Звать чужих разработчиков без спецификации нельзя
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.6FlatGeobuf на большом файле: расхождение геометрии у 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.7TLS и обратный прокси: предел тела, тайм-ауты (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.9HTTP 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.1API плагинов и песочница исполнения; свои трансформеры на Python/JS: запуск в задаче бесплатно, сохранение — платный тариф/опция или публикация с передачей прав в публичную библиотеку
after: 8.2, 9.9
Расширениярольне начата
9.2Расширять библиотеку встроенных трансформеров — в простой, когда нет срочного
Владелец 2026-09-24: «когда есть время и простой — расширять либы встроенных трансформеров». Каждый — по контракту docs/TRANSFORMERS.md, с контрольными числами и замером памяти
Расширениярольв работе
9.3guard.prune_log без блокировки теряет свежие строки журнала приёма (найдено 9.4); Очередь: переход состояния задачи под flock, уникальный tmp, lock с владельцем, перечитать после mkdir(lock), атомарный допуск guard→put
Аудит В3; К1 и К2 уже закрыты 2026-09-25. docs/REBUILD.md
Каркас — перестройка по аудиту 2026-09-25рольсделана
9.4pytest в образе: машина состояний очереди, разбор [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.26KML на 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.