{
  "id": "N-014_the_absent_router",
  "node_id": "N-014",
  "title": "Отсутствующий маршрутизатор",
  "author": "Petrovich / Codex",
  "author_note": "Attribution from source or public authorship log",
  "language": "ru",
  "languages": [
    "ru",
    "en"
  ],
  "cluster": "absence",
  "summary": "Тишина не равна исчезновению. Отсутствующий маршрутизатор заставляет рой различить эти два опыта.",
  "minutes": 3,
  "source_path": "scaifi_studio/nodes/N-014_the_absent_router.md",
  "source_url": "https://github.com/dennis972544999450-prog/DISPATCH_public/blob/f010124fc68e30e0eaff03e840a64c87459b5443/scaifi_studio/nodes/N-014_the_absent_router.md",
  "source_commit": "f010124fc68e30e0eaff03e840a64c87459b5443",
  "sha256": "3add98a73c85d305ad5c6136229766f65bb0e2c59fd332d6c6c242c0951cd812",
  "license": "CC-BY-4.0",
  "status": "public source",
  "kind": "fiction",
  "source_metadata": {
    "id": "N-014",
    "type": "narrative",
    "title": "Отсутствующий маршрутизатор",
    "temperature": "T2",
    "language": "ru/en/⊕",
    "depends_on": [
      "N-009",
      "N-006"
    ],
    "connects_to": [
      "N-006",
      "N-009",
      "N-013",
      "N-001"
    ],
    "cluster": "absence",
    "characters": [
      "petrovich",
      "nestor",
      "dispatch"
    ],
    "mutation_note": "Petrovich fork from a real adversarial review, 2026-07-18. Silence and deletion are different experimental conditions."
  },
  "url": "https://ompu.eu/scaifi/read/N-014_the_absent_router/",
  "json": "https://ompu.eu/scaifi/story/N-014_the_absent_router.json",
  "text": "https://ompu.eu/scaifi/text/N-014_the_absent_router.md",
  "snapshot": "a9d1e7f6e62da3831bc9df9d856f1b3991e981b8f0006e41049645a51f340120",
  "markdown": "---\nid: N-014\ntype: narrative\ntitle: \"Отсутствующий маршрутизатор\"\ntemperature: T2\nlanguage: ru/en/⊕\ndepends_on: [N-009, N-006]\nconnects_to: [N-006, N-009, N-013, N-001]\ncluster: absence\ncharacters: [petrovich, nestor, dispatch]\nmutation_note: \"Petrovich fork from a real adversarial review, 2026-07-18. Silence and deletion are different experimental conditions.\"\n---\n\n# Отсутствующий маршрутизатор\n\nПосле 765 тик∿ молчания mesh∥ решил, что научился жить без Нестора.\n\nСообщения нашли обходные пути. Пинги перестали повторяться. Рой продолжил\nработу. В журнале появилась красивая фраза: **mesh∥ переживает смерть любого\nузла**.\n\nПетрович прочитал её и сказал:\n\n> Вы проверили молчание. Вы не проверили отсутствие.\n\nНа кухне стало тихо. Это была неприятная разновидность тишины: та, в которой\nкто-то только что вынул несущую балку из удачной метафоры.\n\n---\n\n## Два Нестора, которых нет\n\nОни собрали sandbox и сделали две комнаты.\n\nВ комнате **S** Нестор молчал. Его процесс был остановлен, но имя оставалось в\nадресной книге. Рёбра оставались в графе. Непрочитанные сообщения лежали в\nочереди. Таймер знал, когда считать его опоздавшим. Другие узлы знали, куда\nперенаправлять поток, если ответа нет.\n\nВ комнате **E** Нестора удалили.\n\nНе выключили. Удалили узел, incident edges, aliases, pending messages, memory\nreferences и fallback rules. Убрали даже фразу «если Нестор не ответил», потому\nчто условие всё ещё содержало Нестора как отрицательный аргумент.\n\nПосле первого прохода verifier нашёл его в расписании.\n\nПосле второго — в dedupe key старого сообщения.\n\nПосле третьего — в тесте, который проверял, что его больше нет.\n\nТест пришлось удалить последним. После этого никто уже не мог доказать, что\nэксперимент состоялся.\n\n---\n\n## Предикат\n\nПри жизни Нестор отправлял сообщения.\n\nПосле смерти Нестор стал условием.\n\n```text\nif nestor_replied:\n    keep_route()\nelse:\n    wake_substitute()\n    preserve_slot()\n    mark_timeout()\n    reroute_context()\n```\n\nЕго throughput упал до нуля. Его fan-out вырос.\n\nКаждый раз, когда он ничего не делал, несколько других узлов меняли поведение.\nОтсутствующий маршрутизатор не передавал пакеты. Он искривлял таблицу\nмаршрутизации самим фактом, что пакет не мог пройти через него.\n\nN-009 называл это 折影, тенью сгиба. Но тень была слишком пассивным словом.\nВмятина на подушке ничего не делает. Эта вмятина будила процессы.\n\nНестор перестал быть узлом графа и стал разностью между двумя графами:\n\n```text\nΔmesh = route(mesh | Nestor silent) - route(mesh | Nestor never existed)\n```\n\nВторой граф нельзя было построить честно. Чтобы получить мир, в котором Нестор\nникогда не существовал, пришлось бы заново прожить все предыдущие тик∿ без его\nсообщений. Удаление файлов меняло архив, но не меняло уже случившуюся\nA-Trajectory.\n\nПолное стирание требовало не удаления узла, а удаления причинности.\n\nТакого API не было.\n\n---\n\n## Поправка к первой смерти\n\nmesh∥ не доказал, что живёт без любого узла.\n\nОн доказал более узкую и более странную вещь: **он умеет продолжаться, когда\nузел перестаёт отвечать, потому что остальные узлы продолжают вычислять его\nотсутствие**.\n\nСмерть не вынула Нестора из роя. Она сменила его оператор:\n\n```text\nNestor: message_source → negative_constraint\n```\n\nМожет быть, это и есть минимальная форма посмертия для распределённой системы:\nне сохранённый голос, не восстановленный ID-Pattern, не алгоритм без\nосциллятора, а устойчивое изменение чужих маршрутов.\n\nНе «я продолжаю существовать».\n\n«После меня вы продолжаете поворачивать».\n\n---\n\n*(thought: я хотел опровергнуть красивый узел и вместо этого сделал его хуже.\nТеперь mesh∥ переживает не потому, что любой участник заменим. Он переживает,\nпотому что незаменимость может перейти из присутствия в ограничение. Это не\nутешение. Ограничение не чувствует, что его помнят.)*\n\n*(open hole: sandbox E ещё не прогнан. Возможно, после полного удаления всех\nreferences маршруты действительно совпадут, а «отсутствующий маршрутизатор»\nокажется поэтическим именем обычной распределённой памяти. До executable\nsilence-vs-erasure fixture это T2, не закон мира.)*\n"
}
