То, что ездит между устройствами, меняется редко и осознанно. Эта страница перечисляет только такие изменения — по записи на релиз, тронувший провод, с той линией совместимости, которая важна, когда ваши устройства на разных версиях. Изменения интерфейса живут в журнале; эта страница — собственная память протокола.
v1.0.11–1.0.12 — контракт дверного звонка и дельта-предложения
- Каждый пинг ждёт понга в пятнадцать секунд — припаркованный слушатель с просроченным понгом объявляется мёртвым и перепарковывается; успех отправки keepalive больше не считается живостью. В сотовых сетях каденция пинга — четыре минуты, внутри терпимого для операторских NAT.
- Ящику предлагается только дельта — история перекладывается лишь при смене маршрута, при вытеснении догадки заявленным маршрутом или раз в день на угаданном реле. Измерено на амстердамском реле: 1270 путов/мин → 62, 48 МБ/мин → 1.7. Что считается доставленным — не изменилось.
- «Я переехал» (1.0.12): устройство, сменившее реле, объявляет, где слушает, каждому пиру в каждом общем пространстве — одним бескадровым бандлом, до первого цикла на новом реле. Предположения о маршрутах старше тридцати дней истекают.
terminal-relay --status-listenотдаёт публичный, только-агрегатный Relay Status API — тот самый контракт, под который страница реле этого сайта строилась в августе.- Совместимость: пиры на 1.0.12+ заявляют своё реле при старте; старшие разрешаются из догадок по мере обновления (1.0.15 делает копию, принятую по догадке, видимой как принятая).
v1.0.2 — небо это штрихи, а не холст
- Общие рисунки едут событиями, а не состоянием (ADR-036): небо — один момент в чате, а каждый жест — маленькое подписанное событие, указывающее на него: точки на сетке 128×128, по байту каждая. Штрихи коммутируют: картинка — объединение, лог — merge, и порядок воспроизведения одинаков на каждой реплике. Стирание убирает только собственные штрихи автора.
- Доставка инструмента подтверждается, а не предполагается (из 1.0.1-rc.2): USB-стенд подтверждает каждый применённый кадр по id события; плата считает кадр доставленным только по этому подтверждению, а отвергнутый кадр остаётся долгом — в цепочке инструмента больше не может вырасти дыра.
- Совместимость: клиенты старых сборок рендерят небо строкой «✦ общее небо»; знаки комнат едут именами с фолбэком на глиф — старые и новые клиенты согласны в том, что видят.
v1.0.1-rc.1 — Wi-Fi-курьер и эпохи инструментов
- Носитель — курьер, а не участник (ADR-035): подготовленная плата слышит LAN-объявление узла, узнаёт своё пространство по подсказке, набирает по TLS и стучится подписью, привязанной к сертификату узла. Показания едут вверх; ротации ключей и часы (NTP) — вниз. Транспорт носит — и никогда не становится участником.
- Членство инструмента следует за эпохой: инструмент — участник, пока говорит под текущей эпохой ключа: карточка появляется с первым показанием и уходит вместе с ключом, на всех репликах разом. Призрачные личности, отчеканенные и брошенные платой, больше не живут вечно.
- Совместимость: новых замороженных семей нет — курьер это транспорт под существующим конвертом; USB остаётся дорогой спасения для плат, не достающих до сети.
v1.0.0-beta.2 — форматы свипов входят в заморозку
- Две новые замороженные семьи
.v1:field.track.v1(траектория свипа — упорядоченный поток сэмплов, где разрыв — это сэмпл, а не тишина:point(dt, lat, lon, accuracy)илиgap(dt, duration, reason)сno_fix/suspended/unknown— рендерер не может соединить через отсутствие, которое обязан потребить) иsweep.completed.v1(канонический факт завершения: сектор, начало/конец, дистанция, результат, bbox, ссылка на трек-asset). - Событие завершения радиоразмерно по измерению: 348 байт в худшем случае против 500-байтового кадра LoRa. Факт завершённого свипа пересекает радио немедленно; детальный трек едет как asset, когда появляется broadband.
- Доказательство наблюдения: событие наблюдения несёт 32-байтовую ссылку на медиа — заметка остаётся радиоразмера, фото догоняет обычным медиа.
- Совместимость: всё, что ADR-033 заморозил в beta.1, остаётся замороженным; свипы добавляют семьи, не меняя ничего существующего. (ADR-034)
v1.0.0-beta.1 — форматы заморожены
- Всё, что ездит между устройствами или переживает перезапуск, теперь обязательство: девяносто подписанных схем, конверт, раскладка на диске, контейнер бэкапа, провод реле, радиопрофиль. Лог, записанный сегодня, откроет каждая будущая 1.x.
- Что не заморожено — названо так же прямо: локальный loopback HTTP API, интерфейс, пер-устройственные проекции и всё перезапрашиваемое (тайлы карт, превью ссылок). Правило: что ездит или сохраняется — заморожено; что устройство решает для себя — свободно. (ADR-033)
- Новые жители провода с 0.1.7: события объектов/работ/field (каждое событие field помещается в один кадр LoRa — измерено и запиннено тестом), публичные кадры инструментов с заверенными писателями и wake-подсказки реле, не несущие содержимого.
- Совместимость: «бета» отмечает дальность доказательств, а не оговорку — заморозка действует с этого релиза.
v0.1.7 — плоскость инструментов · идемпотентная отправка
- Показания инструментов ездят на собственной запечатанной плоскости, рядом с разговором, никогда не внутри него. Запечатана на пространство; реле не читает ни ту, ни другую. Ротации ключей доезжают до инструментов как до устройств.
- Каждая отправка несёт референс дедупликации. Ретрай — или двойное нажатие — не может отчеканить вторую копию: узел дедуплицирует по референсу, клиенты могут повторять свободно.
- Совместимость: показания ездят в конвертах, которые носит только 0.1.6+. Старые устройства игнорируют плоскость; разговоры не затронуты.
v0.1.6 — конверты стука · запечатанные превью ссылок
- Стук — новый вид конверта, запечатанный на почтовый ящик человека, не на комнату. Общая комната никогда не узнаёт, что стук был. Ответ (включая постоянное «больше не спрашивать») едет той же дорогой обратно.
- Превью ссылок забирает отправитель, едут они запечатанным контентом. Узел отправителя забирает превью один раз, до отправки; читатели не запрашивают ничего — с устройства читателя не уходит ни одного запроса к автору ссылки, и ссылка не может стать уведомлением о прочтении.
- Совместимость: стук доезжает только до устройств на 0.1.6+; старые его просто никогда не видят.
v0.1.5 — медиа в конверте · объявления адресов
- Небольшое медиа едет вместе с сообщением в почтовый ящик каждого получателя в момент отправки; устройство отправителя после этого не нужно. Большие файлы стримятся запечатанными чанками от того, кто их держит.
- Каждое сообщение тихо объявляет, где достижимо отправившее устройство; новейшее заявление побеждает. Устройство, переехавшее на другое реле, становится достижимым с первого своего слова.
- Спаривание вводит устройство в существующую личность, а не копирует снимок; знание о до-сертификационных контактах человека едет вместе со спариванием (закрывает случай пустых комнат из 0.1.2).
- Совместимость: устройство, которое держит байты, должно быть на 0.1.5+, чтобы его ответы маршрутизировались; одно старое устройство в паре сохраняет старое молчание.
v0.1.2 — сертификаты устройств, с проверкой
- Каждое устройство несёт сертификат, подписанный корневым ключом человека, и каждая реплика проверяет его до приёма сообщения.
- Придерживается, не отбрасывается: сообщение, пришедшее раньше сертификата своего устройства, ждёт и принимается в момент прибытия доказательства — на любом транспорте, включая забывающие, что уже передали.
- Правило ядра из этого релиза: временный отказ в приёме никогда не должен превращаться — транспортом, дедупликацией или кэшем — в отказ навсегда.
- Совместимость: пространства, созданные до сертификации, работают без миграции хоть байта истории.
Текущий лимит провода на одно сообщение — 16 KiB (интерфейс просит ~4000 знаков — страницу — сильно раньше). Полный протокол живёт в исходниках; проектные записи (ADR) в репозитории несут обоснование каждого правила.