# Большие модели: структура и идентичность — Mercury LMS > Как устроить модель `@fiberfx/hypergraph` размером с приложение: модуль на каждую функциональную часть, вызываемые события на входе и производные хранилища на выходе, уникальный `sid` с префиксом части у каждого передаваемого хранилища, каждый внешний вызов внутри эффекта, связи между частями в одном графе. Ни одно приложение репозитория пока не импортирует `@fiberfx/hypergraph`; подробный разбор приложений (echd-os, edu-island-kan, analytics) появится после их этапов миграции. ## Когда читать Если вы делите модель на функциональные модули, выбираете sid, решаете, какие хранилища передавать кадром состояния (frame), или открываете состояние одной части другим частям. ## Контракт (уровень готовности: Shipped — @fiberfx/hypergraph 4.0.0 доступен в npm с 2026-11-05) - Единица Hypergraph (unit) принадлежит поколению кода, которое её создало; все модули приложения загружаются в одно поколение; единицы двух поколений нельзя связывать. - Типы задают интерфейс: `EventCallable` можно вызвать, производный `Event` — нельзя; у `StoreWritable` есть `.on`/`.reset`, у `Store` — нет. Экспорт изменяемого хранилища как `Store` ограничивает запись только при компиляции. - Во время выполнения: вызов производной единицы → `HypergraphError` `derived-call`; производный `target` → `derived-target`. - Sid уникальны в поколении. Загрузка модулей через порт отклоняет повторное использование sid в одном или нескольких модулях, указывая обе единицы; сравнение при замене отклоняет его с `duplicate-sid`. Обычные вызовы `store()` не проверяются; кадр находит повторённый sid как первое хранилище, а судьба второго не определена — никогда на неё не полагайтесь. Используйте префикс функциональной части (`cart/items`). - Эффекты (effect): внешние вызовы только в эффектах; `fork({handlers})` заменяет их для конкретной изолированной области состояния (scope); `attach({effect, source, mapParams})` строит параметры из состояния; обработчик помечает эффект как доступный только в JavaScript, а объявленная спецификация представлена данными (Preview). - Передаются изменяемые хранилища (store) с `sid` и без `serialize: 'ignore'`; значениям вне JSON нужен `serialize: {write, read}`; производные хранилища не передаются никогда. Те же хранилища горячая замена сохраняет или сбрасывает. ## Минимальный пример ```ts import { event, store, type Store } from "@fiberfx/hypergraph"; export const itemAdded = event<{ id: string; price: number }>(); const $items = store<{ id: string; price: number }[]>([], { sid: "cart/items" }) .on(itemAdded, (items, item) => [...items, item]); export const items: Store<{ id: string; price: number }[]> = $items; export const total = $items.map((list) => list.reduce((sum, item) => sum + item.price, 0)); ``` ## Никогда не генерируйте Общий sid для двух хранилищ; передаваемое хранилище без `sid`; fetch или таймер внутри `.on`/`.map`/переданной `sample` функции `fn`; `withFactory`, `createDomain`; любые импорты из `effector` или `@fiberfx/hypergraph/hmr`. ## Дальше - Итоговый пример: /ru/hypergraph/capstone (/ru/hypergraph/capstone/llms.txt) - Эта версия страницы для агентов: /ru/hypergraph/models/llms.txt ## Навигация - [Страница в браузере](/ru/hypergraph/models) - [Индекс для агентов](/ru/llms.txt) - [Все английские текстовые версии](/llms-full.txt) - [Карта сайта](/sitemap.xml) - [Текст курса](/ru/hypergraph/llms.txt)