Отдельный экспериментальный репозиторий для сериализации, десериализации и визуализации ачисел. Публичный адрес: https://netkeep80.github.io/anum_parser/
Лаборатория позволяет наглядно исполнять принятую десериализацию ачисел и одновременно сохранять рядом экспериментальные варианты для сравнения. Экспериментальный алгоритм сам по себе не изменяет нормативную МТС: принятие происходит отдельно в anum_docs.
Текущая нормативная граница лаборатории:
semantic authority = netkeep80/anum_docs
accepted MTS = v0.11
runtime package = @mts/core@0.10.0
consumer mode = exact pinned artifact
anum_parser не копирует текущую семантику МТС и не содержит второго принятого исполнителя. Принятый четверичный путь передаёт исполнение функции @mts/core.executeAbits из точно проверенного пакета.
Идентификатор anum-v0.4 сохранён как стабильный лабораторный идентификатор десериализатора. Это не номер текущего выпуска МТС. Версия пакета @mts/core@0.10.0 также сама по себе не определяет выпуск МТС: принятая версия задаётся совокупностью точного состояния исходного репозитория, контракта, корпуса соответствия и контрольной суммы артефакта.
В anum_docs МТС v0.11 является текущим принятым выпуском, а v0.10 — предыдущим неизменяемым свидетельством. Переход выполнен отдельной точной перепривязкой: без зависимости от подвижной ветки main, без локальной реализации контекстной семантики и без изменения четырёхсимвольного Q-транспорта.
Лаборатория никогда не называет одним словом следующие представления:
- последовательность исходных символов;
- последовательность абитов;
- связь;
- упорядоченную последовательность ссылок на связи;
- акорневую связь-последовательность, используемую как носитель;
- связь, хранящую ачисло;
- денотат, полученный конкретной десериализацией.
Для МТС действует базовая аксиома тождества связи:
(A ⟼ B) = (C ⟼ D)
⇔
A = C ∧ B = D
То есть связь полностью определяется началом и концом. Две различные связи с одинаковыми полюсами в МТС невозможны. Технические id в лабораторных файлах являются только адресами записей, а не дополнительным уровнем тождества.
Это принципиально отличает используемую здесь модель МТС от модели сети дуплетов Теории связей, где отдельная ссылка связи и значение пары могут быть разными уровнями.
Принятая среда исполнения фиксируется в:
contracts/mts-core-consumer-lock.json
Текущая фиксация связывает вместе:
upstream repository = netkeep80/anum_docs
exact upstream SHA = 6b7f616c7b275310aebdbe998da13c5811c91391
contract = mts-contract/v0.11
conformance = mts-conformance/v0.11
package = @mts/core@0.10.0
artifact sha256 = 6b4dbd701f46a6a339e20b892b8a5d9478bb40a9392415899291eb0fe30ddf9c
Предыдущее принятое свидетельство v0.10 не переписывается. Для дифференциальной проверки сохраняются его точные идентификаторы:
previous upstream SHA = 957c818d82bd3211f2a59547fff28e8ed0ec4331
previous contract = mts-contract/v0.10
previous conformance = mts-conformance/v0.10
previous artifact = 0cd716b65fcdcfb8ca31ec3899f1a812f0b4c9dbfe46bfc1f31899b762cde007
Эта же фиксация запрещает неявное расширение доверенной границы:
channel = accepted-current
floatingRefAllowed = false
candidateAllowedAsCurrent = false
deepSourceImportAllowed = false
vendoredCurrentSemanticSourceAllowed = false
Перед тестами и публикацией сайта scripts/materialize-mts-core.mjs заново получает ровно указанный SHA исходного репозитория, проверяет принятый контракт и корпус соответствия, собирает пакет, сверяет контрольную сумму и только затем создаёт каталог generated/mts-core/, исключённый из Git.
Каталог generated/ является результатом воспроизводимой сборки, а не вторым источником семантики.
Четверичное ачисло передаёт ровно четыре абита:
[ ] 1 0
Акорень ∞ = R не является пятым абитом. Принятая МТС v0.11 также сохраняет алфавит Q ровно [ ] 1 0; . и : не становятся Q-абитами.
Строгая проверка .anum4 является границей представления лаборатории: файл должен содержать только знаки [ ] 1 0. После проверки точная последовательность абитов передаётся в @mts/core.executeAbits.
Контрольные примеры принятого исполнения:
ε -> R
[] -> R
1 -> L
10 -> L ⟼ U
[1] -> R ⟼ L
[[]] -> R
Локальный AsetBuilder при принятом исполнении не определяет переходы OPEN/CLOSE/VALUE: он только материализует вызовы link(start,end), сделанные нормативным исполнителем, и строит проекцию для представления и визуализации.
Одна принятая среда исполнения имеет два входных пути.
Первый путь — обычный физический поток .anum4:
.anum4
-> strict local validation
-> exact [ ] 1 0 sequence
-> @mts/core.executeAbits
Второй путь — существующая асеть с явно указанной связью-носителем в provenance.representations.carrier. Лаборатория читает её только как конечную историю начал от R, восстанавливает O/C/L/U, переводит их обратно в [ ] 1 0 и передаёт в ту же принятую среду исполнения.
Таким образом, для связи-носителя нет второго алгоритма OPEN/CLOSE/VALUE, скрытого пятого абита или отдельной нормативной семантики. Исходная импортированная асеть при чтении не изменяется.
В интерфейсе эти действия разделены явно:
.aset.json — открыть асеть— только показать уже существующую асеть;.aset.json — прочитать carrier через ANUM v0.4— восстановить четверичный транспорт и выполнить точно зафиксированную принятую семантику.
.anum4— исходное четверичное ачисло профиля[ ] 1 0;.anums— исходное строковое ачисло в UTF-8 без скрытой нормализации;.anum.json— самодокументируемый контейнер эксперимента;.aset.json— наглядный снимок канонической асети; его можно открыть как снимок или явно использовать отмеченную связь-носитель как вход принятого исполнения.
Подробно: docs/formats.md.
Статическое приложение позволяет:
- вводить или загружать разные форматы;
- независимо выбирать десериализатор и сериализатор;
- сравнивать принятый и экспериментальный алгоритмы на одном исходнике;
- отдельно видеть символы, абиты, последовательности ссылок, акорневые цепочки и связи-хранилища;
- пошагово видеть позицию источника, проекцию контекста,
currentи изменения асети; - наблюдать, как новые связи появляются в графе именно после нормативной операции построения связи;
- открыть
.aset.jsonкак готовую асеть или прочитать её явно отмеченный носитель; - визуализировать асеть с перемещением, масштабированием и несколькими раскладками;
- сохранять
.aset.jsonи без потерь восстанавливать исходную запись, когда это доказано происхождением данных.
Режим 2D — blueprint связей — третья проекция представления той же Aset и общей модели visualModel. Перед отрисовкой сохраняется основная граница МТС: связь X = start(X) ⟼ end(X) является одной первичной сущностью, а не обычным графом вида «узел и два ребра». Центр в этом режиме — только точка представления на той же связи; он не разрывает связь и не создаёт отдельный семантический узел.
Геометрия адаптирована из konard/links-visuals по точному снимку f377441533e4f10fa94aaa07138b684df88234b1, опубликованному под лицензией Unlicense. Для происхождения алгоритма зафиксированы animated-blueprint.html и js/path.mjs с преобразованием сплайна Катмулла—Рома в кубические кривые Безье и непрерывностью C¹, а также js/blueprint-link.mjs и js/markers.mjs для языка меток начала и конца. Материалы задачи #28 фиксируют отдельный цвет каждой связи при сохранении геометрии одиночной связи; задача #31 сохраняет исторический контекст визуализации связей между связями.
Одна семантическая связь отображается ровно одним непрерывным SVG-путём start → ... → center → ... → end. Начало и конец геометрически закреплены на центрах start(X) и end(X). В каждой внутренней точке, включая центр, совпадают первая производная входящего и исходящего кубических сегментов, поэтому в центре нет геометрического излома. Самопетля также остаётся одной конечной, видимой и непрерывной кривой.
Каждая связь получает собственный детерминированный цвет. Тот же цвет используется для всей кривой, метки начала и открытой метки конца. Цвет является только свойством представления и не участвует в тождестве или семантике МТС. Выбор и отладчик могут менять подсветку, прозрачность или акцент, но не цвет связи. Общий цветовой путь RED → GREEN → BLUE к этому режиму больше не относится; он сохраняется только в тех других проекциях, где уже принят отдельным визуальным контрактом.
Перетаскивание, панорамирование, масштабирование, вписывание, выбор и состояние отладчика меняют только представление; сериализованная Aset не изменяется. Структурный 2D, blueprint и живая 3D-механика используют одну семантическую модель, но разные средства отрисовки; при переключении ресурсы неактивного средства отрисовки освобождаются.
Режим 3D — механическая асеть является интерактивной визуально-механической проекцией, а не источником семантики МТС. Он работает поверх уже построенных Aset и visualModel: перетаскивание, физика, камера, полноэкранный режим и визуальный выбор не меняют семантическую идентичность асети и не создают вторую принятую среду исполнения.
Одна связь показывается как зелёный центр и две смысловые пружины: начало идёт от красного к зелёному, конец — от зелёного к синему. Обе зелёные касательные в центре одной связи остаются противоположными на 180° в истинном 3D. Корневая связь закреплена в (0,0,0), самопетля остаётся видимой, но не создаёт силы сама на себя.
Живая механика управляется глобально:
Заряд узловменяет силу одноимённого отталкивания;Жёсткость пружинменяет силу возврата вдоль механических связей;Затуханиерегулирует длительность релаксации;Пауза / Продолжитьостанавливает и возобновляет только физическую интеграцию;Сброситьвозвращает исходную детерминированную 3D-раскладку и нулевые скорости;- перетаскивание временно фиксирует свободный центр связи и передаёт возмущение остальной механической асети;
На весь экранразворачивает то же средство отрисовки и то же физическое состояние через браузерный полноэкранный режим или резервное разворачивание на весь экран средствами оформления без повторной десериализации.
После успокоения механическая система засыпает и перестаёт выполнять лишние шаги физики. Навигация камерой сама по себе физику не будит. Переключения 2D ↔ 3D и повторные полноэкранные циклы обязаны освобождать или переиспользовать ресурсы отрисовки без накопления холстов, слоёв подписей, запланированных кадров, захвата указателя и наблюдателей размеров. Если трёхмерная аппаратная отрисовка недоступна, интерфейс возвращается к пригодному структурному 2D.
Публикация через GitHub Pages материализует ту же точно зафиксированную зависимость потребителя, которая проверяется в CI. Браузерная версия не исполняет отдельную локальную принятую стековую машину.
anum-v0.4— принятый лабораторный идентификатор: строгий четверичный вход и транспорт существующего носителя передают семантику точно зафиксированному@mts/core/ МТС v0.11;stack-group-value-v0— экспериментальный: локальная историческая стековая машина, где группа возвращает внутреннее значение напрямую; нормативной МТС не является;abit-flat-v0— экспериментальный: контрольная плоская свёртка четырёх абитов;string-flat-v0— экспериментальный: строковая UTF-8 левая свёртка.
Локальный deserializeStack разрешён только для явно экспериментальных алгоритмов. Попытка использовать его как источник принятой семантики должна завершаться отказом.
Принятый .aset.json фиксирует не только status=accepted, но и точную нормативную зависимость:
semanticAuthority.package
semanticAuthority.version
semanticAuthority.contract
semanticAuthority.conformance
semanticAuthority.upstreamRepository
semanticAuthority.upstreamCommit
semanticAuthority.artifactSha256
semanticAuthority.generatedTreeSha256
semanticAuthority.consumerLock
Это позволяет отличить нормативную семантику от локальной проекции и не принять случайную подвижную ветку или кандидатную версию за текущую.
aset-json-v0— сохранить лабораторную.aset.json;source-replay-v0— без потерь вернуть исходное.anum4или.anumsпри наличии свидетельства происхождения;source-envelope-v0— сохранить тот же источник в.anum.json.
Лаборатория не предполагает, что произвольную асеть можно автоматически и однозначно сериализовать в ачисло.
examples/cases.json содержит принятые четверичные входы, ошибочные границы, сравнительные эксперименты, исторические строки и Unicode.
Автоматические проверки подтверждают одновременно:
- точную пересборку и контрольную сумму SHA256 текущего артефакта v0.11;
- независимую пересборку и контрольную сумму SHA256 предыдущего артефакта v0.10 для дифференциального свидетельства;
- доступ только через публичную поверхность пакета и отказ импорта внутренних исходников;
- наблюдаемое совпадение v0.10 ↔ v0.11 на общем корпусе из 33 принятых Q-входов и общих классов ошибок;
- совпадение локальной проекции результата с прямым вызовом текущего
@mts/core.executeAbits; - принятые обязательства v0.11 для верхнего контекста, пары точек, вложенной привязки и неизменного алфавита Q — по принятому контракту и корпусу соответствия исходного репозитория, без второй локальной семантической машины;
- точные сведения
semanticAuthorityо происхождении результата; - совпадение физического транспорта и пути через существующий носитель;
- неизменность входной асети при чтении носителя;
[] = Rи схлопываниеR ⟼ R = R;- тождество связей по полюсам;
- инварианты пошагового отладчика и визуализации;
- браузерный контракт blueprint: одна непрерывная кривая на связь, C¹ во всех стыках включая центр и самопетлю, собственный стабильный цвет и одноцветные метки концов, закрепление полюсов, сохранение цвета после перетаскивания и повторного входа, очистка ресурсов и неизменность
Aset; - браузерный контракт живого 3D: смысловой цветовой градиент и угол 180°, неподвижность корня и корректность самопетель, передача возмущения при перетаскивании, регуляторы механики, засыпание без пробуждения камерой, воспроизводимый сброс, полноэкранный режим, очистка ресурсов и резервный переход в 2D;
- явную ненормативность экспериментальных алгоритмов.
Конкретные принятые обязательства v0.11:
TopBind(R,S)
top-level . -> R
.. -> ExactSequence([R,R]) -> Pair(R,R)=R
nearest structural A:E binding
Q alphabet = [ ] 1 0
Машинно-видимое состояние текущего выпуска в исходном репозитории:
mts-contract/v0.11:
status = accepted
accepted = true
acceptanceReady = true
mts-conformance/v0.11:
status = accepted
accepted = true
coverageState = complete
acceptanceBlockers = []
Принятое изменение v0.11 включает верхнеуровневое структурное связывание, разрешение верхнеуровневой . в R, сохранение двух физических вхождений точки в .. до Pair(R,R)=R и ближайшую структурную привязку для вложенного A:E. При этом граница Q не расширяется: [ ] 1 0 остаются единственными Q-абитами.
anum_parser не реализует эти контекстные правила второй локальной машиной. Его рабочий путь остаётся потребителем публичного @mts/core; специфические обязательства v0.11 проверяются по принятому контракту и корпусу соответствия исходного репозитория, а общий Q-путь дополнительно сравнивается с предыдущим точно зафиксированным артефактом v0.10.
Требуется Node.js 24 или новее и доступ к точно указанным хешам исходного репозитория для воспроизводимой сборки и дифференциального свидетельства.
npm run check
npm testОбе команды автоматически выполняют npm run mts:prepare перед импортом текущей принятой среды исполнения. Отдельная проверка потребителя в CI пересобирает и сравнивает точно зафиксированные артефакты v0.10 и v0.11.
docs/history.md— историческая выжимка; старые версии там могут упоминаться как история;docs/formats.md— файловые форматы и сведения о происхождении;docs/architecture.md— текущая граница исполнения и нормативного источника;examples/cases.json— общий корпус примеров.
Изменения проходят обязательную проверку repo-guard. Принятая версия МТС меняется только явной перепривязкой по машинно-читаемой фиксации; подвижная ветка main или кандидатный контракт не считаются рабочим источником семантики.