<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rekeeply Specification on Rekeeply Spec</title><link>https://rekeeply.github.io/spec/ru/</link><description>Recent content in Rekeeply Specification on Rekeeply Spec</description><generator>Hugo</generator><language>ru</language><atom:link href="https://rekeeply.github.io/spec/ru/index.xml" rel="self" type="application/rss+xml"/><item><title>book</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/book/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/book/</guid><description>&lt;h1 id="book"&gt;book&lt;a class="anchor" href="#book"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;author&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - основной автор книги.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;published_year&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - год публикации используемого издания.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;original_title&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название на языке оригинала.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;co_authors&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;long_text&lt;/code&gt;) - дополнительные авторы/соавторы.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;language&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - язык конкретного издания/материала.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;original_language&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - исходный язык произведения.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;publisher&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - издательство.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;publication_place&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - город/место издания.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;edition&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - обозначение или номер издания.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isbn&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - идентификатор ISBN.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pages_total&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - общее количество страниц.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;translator&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - имя(имена) переводчика.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;volume&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;integer&lt;/code&gt;) - номер/обозначение тома для многотомных изданий.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;series&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название книжной серии.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reference_scope&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - уточнение scope для записей &lt;code&gt;book/reference&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>article</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/article/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/article/</guid><description>&lt;h1 id="article"&gt;article&lt;a class="anchor" href="#article"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;author&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - основной автор статьи.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;published_year&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - год публикации.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;journal_or_source&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - источник публикации (журнал/сайт/платформа).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;publication_date&lt;/code&gt; (&lt;code&gt;date&lt;/code&gt;) - точная дата публикации.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;doi&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - DOI идентификатор.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;volume&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;integer&lt;/code&gt;) - номер/обозначение тома.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;issue&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;integer&lt;/code&gt;) - номер/обозначение выпуска.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pages&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - диапазон страниц (например, &lt;code&gt;97-111&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;language&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - язык статьи.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;original_title&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название на языке оригинала.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;co_authors&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;long_text&lt;/code&gt;) - дополнительные авторы/соавторы.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;peer_reviewed&lt;/code&gt; (&lt;code&gt;boolean&lt;/code&gt;) - маркер рецензируемой публикации.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;publisher&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - издатель/организация.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;publication_place&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - место публикации.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примечания по подтипам:&lt;/p&gt;</description></item><item><title>Модель Raw</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/raw-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/raw-model/</guid><description>&lt;h1 id="модель-raw"&gt;Модель Raw&lt;a class="anchor" href="#%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-raw"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="назначение"&gt;Назначение&lt;a class="anchor" href="#%d0%bd%d0%b0%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d0%b5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; выделен в отдельный домен, потому что часть пользовательских данных должна храниться в неструктурированном виде до последующей обработки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; обеспечивает быстрый capture без обязательной классификации и без немедленного размещения в &lt;code&gt;Library&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="контракт"&gt;Контракт&lt;a class="anchor" href="#%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%b0%d0%ba%d1%82"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Реализация core ДОЛЖНА включать &lt;code&gt;Raw&lt;/code&gt; как домен хранения уровня аккаунта для неструктурированного capture.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН поддерживать быстрое сохранение без выбора активной библиотеки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН поддерживать разбор и отложенную обработку сохраненных элементов.&lt;/li&gt;
&lt;li&gt;Элементы &lt;code&gt;Raw&lt;/code&gt; ДОЛЖНЫ поддерживать явный последующий перенос в &lt;code&gt;Library&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="поддерживаемые-payload-типы"&gt;Поддерживаемые payload-типы&lt;a class="anchor" href="#%d0%bf%d0%be%d0%b4%d0%b4%d0%b5%d1%80%d0%b6%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc%d1%8b%d0%b5-payload-%d1%82%d0%b8%d0%bf%d1%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН поддерживать payload-типы &lt;code&gt;text&lt;/code&gt;, &lt;code&gt;link&lt;/code&gt;, &lt;code&gt;mixed&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; МОЖЕТ поддерживать &lt;code&gt;file_ref&lt;/code&gt; как reference-only payload.&lt;/li&gt;
&lt;li&gt;Типы &lt;code&gt;image&lt;/code&gt;, &lt;code&gt;video&lt;/code&gt;, &lt;code&gt;audio&lt;/code&gt; не входят в обязательный baseline scope.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="модель-хранения-raw-item"&gt;Модель хранения Raw Item&lt;a class="anchor" href="#%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-%d1%85%d1%80%d0%b0%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f-raw-item"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Хранение ДОЛЖНО быть ориентировано на typed-columns-first для горячих read-path.&lt;/li&gt;
&lt;li&gt;Реализация НЕ ДОЛЖНА опираться на JSON-only хранение для горячих list/filter-path.&lt;/li&gt;
&lt;li&gt;Каждый &lt;code&gt;RawItem&lt;/code&gt; ДОЛЖЕН содержать: &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;account_id&lt;/code&gt;, &lt;code&gt;payload_type&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;created_at&lt;/code&gt;, &lt;code&gt;updated_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Реализация ДОЛЖНА/РЕКОМЕНДУЕТСЯ хранить легкие поля для быстрых списков (&lt;code&gt;title_preview&lt;/code&gt;, source/type/status).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="каналы-записи-capture"&gt;Каналы записи (capture)&lt;a class="anchor" href="#%d0%ba%d0%b0%d0%bd%d0%b0%d0%bb%d1%8b-%d0%b7%d0%b0%d0%bf%d0%b8%d1%81%d0%b8-capture"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН принимать capture из ручного ввода и буфера обмена/paste.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН/МОЖЕТ принимать external share/import при поддержке клиентом/рантаймом.&lt;/li&gt;
&lt;li&gt;Capture НЕ ДОЛЖЕН зависеть от сетевой доступности.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="обогащение-метаданными"&gt;Обогащение метаданными&lt;a class="anchor" href="#%d0%be%d0%b1%d0%be%d0%b3%d0%b0%d1%89%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bc%d0%b5%d1%82%d0%b0%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d0%bc%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Для &lt;code&gt;link&lt;/code&gt; metadata enrichment МОЖЕТ выполняться асинхронно после capture.&lt;/li&gt;
&lt;li&gt;Ошибки получения метаданных НЕ ДОЛЖНЫ блокировать завершение capture.&lt;/li&gt;
&lt;li&gt;Если метаданные недоступны, реализация ДОЛЖНА использовать детерминированный fallback-preview.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="lifecycle-и-операции"&gt;Lifecycle и операции&lt;a class="anchor" href="#lifecycle-%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Реализация ДОЛЖНА поддерживать состояния, эквивалентные &lt;code&gt;new | triaged | promoted | archived&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Реализация ДОЛЖНА поддерживать list и смену статусов для triage.&lt;/li&gt;
&lt;li&gt;Реализация ДОЛЖНА поддерживать явную операцию &lt;code&gt;promote&lt;/code&gt; из &lt;code&gt;Raw&lt;/code&gt; в &lt;code&gt;Library&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="требования-к-promote-flow"&gt;Требования к promote-flow&lt;a class="anchor" href="#%d1%82%d1%80%d0%b5%d0%b1%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%ba-promote-flow"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;promote&lt;/code&gt; ДОЛЖЕН валидировать, что &lt;code&gt;target_library_id&lt;/code&gt; принадлежит тому же &lt;code&gt;account_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;promote&lt;/code&gt; ДОЛЖЕН быть идемпотентным для одного &lt;code&gt;RawItem&lt;/code&gt; и НЕ ДОЛЖЕН создавать дубли при retry.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;promote&lt;/code&gt; ДОЛЖЕН сохранять связь с созданной сущностью библиотеки (&lt;code&gt;promoted_content_id&lt;/code&gt; или эквивалент origin-link).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mapping-правила-promote"&gt;Mapping-правила promote&lt;a class="anchor" href="#mapping-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-promote"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Raw:text&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Типизация контента</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/content-typing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/content-typing/</guid><description>&lt;h1 id="типизация-контента"&gt;Типизация контента&lt;a class="anchor" href="#%d1%82%d0%b8%d0%bf%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%bd%d1%82%d0%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="базовые-правила"&gt;Базовые правила&lt;a class="anchor" href="#%d0%b1%d0%b0%d0%b7%d0%be%d0%b2%d1%8b%d0%b5-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;content_type&lt;/code&gt; является обязательным полем; создание записи без типа НЕ ДОПУСКАЕТСЯ.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content_subtype&lt;/code&gt; является необязательным полем.&lt;/li&gt;
&lt;li&gt;При ручном создании записи выбор начинается с &lt;code&gt;content_type&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;После выбора типа подтип и остальные поля могут быть заполнены позже.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="набор-по-умолчанию-и-рекомендуемый-набор"&gt;Набор по умолчанию и рекомендуемый набор&lt;a class="anchor" href="#%d0%bd%d0%b0%d0%b1%d0%be%d1%80-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-%d0%b8-%d1%80%d0%b5%d0%ba%d0%be%d0%bc%d0%b5%d0%bd%d0%b4%d1%83%d0%b5%d0%bc%d1%8b%d0%b9-%d0%bd%d0%b0%d0%b1%d0%be%d1%80"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Следующий набор типов/подтипов доступен в системе по умолчанию и рекомендуется на основе практического личного опыта использования.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="book"&gt;&lt;code&gt;book&lt;/code&gt;&lt;a class="anchor" href="#book"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Назначение: длинные письменные материалы и справочные книги.&lt;/p&gt;
&lt;p&gt;Поля: см. &lt;a href="type-specific-fields/"&gt;Поля по типам&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>game</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/game/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/game/</guid><description>&lt;h1 id="game"&gt;game&lt;a class="anchor" href="#game"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;platform&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - основная платформа/среда запуска (например, PC, PlayStation, Xbox, Nintendo, board).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;release_year&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - год первоначального релиза.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;developer&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - разработчик/студия.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;publisher&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - издатель игры.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;distribution_source&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;enum&lt;/code&gt;) - источник/магазин, где игра доступна или приобретена (например, Steam, Epic Games Store, PS Store, Xbox Store, Nintendo eShop).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;genre&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;multi_enum&lt;/code&gt;) - жанровая классификация (например, RPG, strategy, puzzle).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mode&lt;/code&gt; (&lt;code&gt;enum&lt;/code&gt; или &lt;code&gt;multi_enum&lt;/code&gt;) - режим игры (single-player, multiplayer, co-op).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;playtime_hours&lt;/code&gt; (&lt;code&gt;decimal&lt;/code&gt;) - оценочная или фактическая длительность игры в часах.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;players_count&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;integer&lt;/code&gt;) - поддерживаемое/типичное количество игроков.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;edition&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - обозначение издания/версии.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;region&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - региональная версия/доступность.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Поля контента</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/content-fields/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/content-fields/</guid><description>&lt;h1 id="поля-контента"&gt;Поля контента&lt;a class="anchor" href="#%d0%bf%d0%be%d0%bb%d1%8f-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%bd%d1%82%d0%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="классы-полей"&gt;Классы полей&lt;a class="anchor" href="#%d0%ba%d0%bb%d0%b0%d1%81%d1%81%d1%8b-%d0%bf%d0%be%d0%bb%d0%b5%d0%b9"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Поля класса &lt;code&gt;system&lt;/code&gt; управляются core и НЕ ДОЛЖНЫ редактироваться пользователем вручную.&lt;/li&gt;
&lt;li&gt;Поля класса &lt;code&gt;user_editable&lt;/code&gt; видимы и редактируемы пользователем.&lt;/li&gt;
&lt;li&gt;Поля класса &lt;code&gt;computed&lt;/code&gt; вычисляются core и ДОЛЖНЫ рассматриваться как read-only.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="базовый-набор-общих-полей"&gt;Базовый набор общих полей&lt;a class="anchor" href="#%d0%b1%d0%b0%d0%b7%d0%be%d0%b2%d1%8b%d0%b9-%d0%bd%d0%b0%d0%b1%d0%be%d1%80-%d0%be%d0%b1%d1%89%d0%b8%d1%85-%d0%bf%d0%be%d0%bb%d0%b5%d0%b9"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="system"&gt;&lt;code&gt;system&lt;/code&gt;&lt;a class="anchor" href="#system"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; - неизменяемый идентификатор записи.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library_id&lt;/code&gt; - идентификатор библиотеки-владельца.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;created_at&lt;/code&gt; - момент создания.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;updated_at&lt;/code&gt; - момент последнего изменения.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status_changed_at&lt;/code&gt; - момент последней смены статуса.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="user_editable"&gt;&lt;code&gt;user_editable&lt;/code&gt;&lt;a class="anchor" href="#user_editable"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;content_type&lt;/code&gt; - обязательный ключ типа.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content_subtype&lt;/code&gt; - опциональный ключ подтипа.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt; - заголовок записи.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt; - &lt;code&gt;inbox | todo | in_progress | skimmed | done | dropped&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;priority&lt;/code&gt; - &lt;code&gt;low | medium | high&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rating&lt;/code&gt; - опциональная целочисленная оценка в диапазоне &lt;code&gt;1..10&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;recommendation&lt;/code&gt; - опциональный маркер рекомендации: &lt;code&gt;recommended | neutral | not_recommended&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;favorite&lt;/code&gt; - независимый флаг избранного.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;archived&lt;/code&gt; - независимый флаг архивирования.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;parent_content_id&lt;/code&gt; - опциональная родительская связь.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source_url&lt;/code&gt; - опциональная ссылка на источник.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;summary&lt;/code&gt; - опциональное краткое описание.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="computed"&gt;&lt;code&gt;computed&lt;/code&gt;&lt;a class="anchor" href="#computed"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;search_text&lt;/code&gt; - нормализованный текстовый индекс для быстрого поиска.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;last_activity_at&lt;/code&gt; - вычисляемое время последней активности.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;is_completed&lt;/code&gt; - вычисляемый флаг завершенности по статусу.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="модель-вложений"&gt;Модель вложений&lt;a class="anchor" href="#%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-%d0%b2%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b9"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Записи контента МОГУТ иметь несколько связанных вложений.&lt;/li&gt;
&lt;li&gt;Связи вложений моделируются как связанные сущности, а не как единичные фиксированные поля.&lt;/li&gt;
&lt;li&gt;Базовые поля вложения: &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;content_id&lt;/code&gt;, &lt;code&gt;uri&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt; (optional), &lt;code&gt;mime&lt;/code&gt; (optional), &lt;code&gt;size&lt;/code&gt; (optional), &lt;code&gt;created_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Baseline файл датасета для export/import вложений: &lt;code&gt;attachments.ndjson&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="правила"&gt;Правила&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Клиенты ДОЛЖНЫ запрещать редактирование полей классов &lt;code&gt;system&lt;/code&gt; и &lt;code&gt;computed&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Core ДОЛЖЕН поддерживать консистентность всех &lt;code&gt;computed&lt;/code&gt; полей.&lt;/li&gt;
&lt;li&gt;При создании записи &lt;code&gt;status&lt;/code&gt; РЕКОМЕНДУЕТСЯ автоматически устанавливать в &lt;code&gt;inbox&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;При создании записи &lt;code&gt;priority&lt;/code&gt; РЕКОМЕНДУЕТСЯ оставлять пустым по умолчанию, если значение явно не задано.&lt;/li&gt;
&lt;li&gt;При смене статуса ДОЛЖЕН обновляться &lt;code&gt;status_changed_at&lt;/code&gt;, при этом &lt;code&gt;updated_at&lt;/code&gt; НЕ ДОЛЖЕН обновляться.&lt;/li&gt;
&lt;li&gt;При изменении флага &lt;code&gt;favorite&lt;/code&gt; поле &lt;code&gt;updated_at&lt;/code&gt; НЕ ДОЛЖНО обновляться.&lt;/li&gt;
&lt;li&gt;При изменении флага &lt;code&gt;archived&lt;/code&gt; поле &lt;code&gt;updated_at&lt;/code&gt; НЕ ДОЛЖНО обновляться.&lt;/li&gt;
&lt;li&gt;Если &lt;code&gt;rating&lt;/code&gt; задан, значение ДОЛЖНО находиться в диапазоне &lt;code&gt;1..10&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Пользовательские поля, кроме &lt;code&gt;content_type&lt;/code&gt; и &lt;code&gt;status&lt;/code&gt;, не обязательны в момент создания и могут заполняться позже.&lt;/li&gt;
&lt;li&gt;Type-specific поля не являются обязательными в baseline и становятся обязательными только если пользовательская схема помечает их как required.&lt;/li&gt;
&lt;li&gt;Реализация МОЖЕТ добавлять дополнительные поля любого класса как implementation-defined расширения.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="связанные-разделы"&gt;Связанные разделы&lt;a class="anchor" href="#%d1%81%d0%b2%d1%8f%d0%b7%d0%b0%d0%bd%d0%bd%d1%8b%d0%b5-%d1%80%d0%b0%d0%b7%d0%b4%d0%b5%d0%bb%d1%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="field-types/"&gt;Типы полей&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="type-specific-fields/"&gt;Поля по типам&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>screen</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/screen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/screen/</guid><description>&lt;h1 id="screen"&gt;screen&lt;a class="anchor" href="#screen"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;release_year&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - год релиза.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;format&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;enum&lt;/code&gt;) - формат экранного контента (например, film/series/anime/animation).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;original_title&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название на языке оригинала.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;country&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - страна производства.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;director&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - режиссер.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writers&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;long_text&lt;/code&gt;) - сценаристы.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cast&lt;/code&gt; (&lt;code&gt;long_text&lt;/code&gt;) - основной актерский состав.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;studio_or_network&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - студия/канал/платформа.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;season_number&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - номер сезона (особенно для &lt;code&gt;screen/episode&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;episode_number&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - номер эпизода (для &lt;code&gt;screen/episode&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;duration_minutes&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - длительность в минутах.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;release_date&lt;/code&gt; (&lt;code&gt;date&lt;/code&gt;) - точная дата релиза.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;age_rating&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - возрастной рейтинг.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;imdb_id&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - идентификатор IMDb.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;franchise&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название франшизы/вселенной.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примечания по подтипам:&lt;/p&gt;</description></item><item><title>Типы полей</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/field-types/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/field-types/</guid><description>&lt;h1 id="типы-полей"&gt;Типы полей&lt;a class="anchor" href="#%d1%82%d0%b8%d0%bf%d1%8b-%d0%bf%d0%be%d0%bb%d0%b5%d0%b9"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="область-действия"&gt;Область действия&lt;a class="anchor" href="#%d0%be%d0%b1%d0%bb%d0%b0%d1%81%d1%82%d1%8c-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Раздел фиксирует разрешенные значения &lt;code&gt;field_type&lt;/code&gt; для пользовательских полей.&lt;/li&gt;
&lt;li&gt;Для всех типов полей параметр &lt;code&gt;required&lt;/code&gt; настраиваемый (&lt;code&gt;true | false&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Значения по умолчанию настраиваются там, где это поддерживается типом поля.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="разрешенные-типы-полей"&gt;Разрешенные типы полей&lt;a class="anchor" href="#%d1%80%d0%b0%d0%b7%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%bd%d1%8b%d0%b5-%d1%82%d0%b8%d0%bf%d1%8b-%d0%bf%d0%be%d0%bb%d0%b5%d0%b9"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;text&lt;/code&gt; - короткий текст.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Валидация: &lt;code&gt;min_length&lt;/code&gt; (опционально), &lt;code&gt;max_length&lt;/code&gt; (опционально), &lt;code&gt;pattern&lt;/code&gt; (опционально), &lt;code&gt;trim_on_save&lt;/code&gt; (опционально).&lt;/li&gt;
&lt;li&gt;По умолчанию: &lt;code&gt;default_value&lt;/code&gt; (опциональная строка).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;long_text&lt;/code&gt; - длинный многострочный текст.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Валидация: &lt;code&gt;min_length&lt;/code&gt; (опционально), &lt;code&gt;max_length&lt;/code&gt; (опционально), &lt;code&gt;trim_on_save&lt;/code&gt; (опционально).&lt;/li&gt;
&lt;li&gt;По умолчанию: &lt;code&gt;default_value&lt;/code&gt; (опциональная строка).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;boolean&lt;/code&gt; - логическое значение true/false.&lt;/p&gt;</description></item><item><title>video</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/video/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/video/</guid><description>&lt;h1 id="video"&gt;video&lt;a class="anchor" href="#video"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;creator_or_channel&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - основной автор/креатор или канал.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;release_year&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - год релиза/публикации.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;original_title&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название на языке оригинала.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;duration_minutes&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - длительность видео в минутах.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;platform&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - платформа размещения (например, YouTube, Vimeo, Twitch).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;series_name&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название серии/шоу, если видео серийное.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;episode_label&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - обозначение выпуска/части.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;language&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - язык контента/озвучки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subtitles&lt;/code&gt; (&lt;code&gt;multi_enum&lt;/code&gt;) - языки/наличие субтитров.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;published_at&lt;/code&gt; (&lt;code&gt;datetime&lt;/code&gt;) - точное время публикации.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;age_rating&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - маркер возрастных ограничений.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;view_count_snapshot&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - сохраненный срез количества просмотров.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примечания по подтипам:&lt;/p&gt;</description></item><item><title>quote</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/quote/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/quote/</guid><description>&lt;h1 id="quote"&gt;quote&lt;a class="anchor" href="#quote"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;quote_text&lt;/code&gt; (&lt;code&gt;long_text&lt;/code&gt;) - зафиксированный текст цитаты или формулировка идеи.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;quoted_author&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - автор/персона, которой принадлежит цитата.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source_title&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название источника.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source_locator&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - указатель в источнике (страница, таймкод, глава, фрагмент URL).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;language&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - язык цитаты.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;original_text&lt;/code&gt; (&lt;code&gt;long_text&lt;/code&gt;) - текст на языке оригинала, если используется перевод.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;context_note&lt;/code&gt; (&lt;code&gt;long_text&lt;/code&gt;) - пояснение контекста/интерпретации.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;quote_date&lt;/code&gt; (&lt;code&gt;date&lt;/code&gt;) - дата высказывания/публикации, если известна.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примечания по подтипам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;quote/text&lt;/code&gt; обычно использует &lt;code&gt;source_locator&lt;/code&gt; и &lt;code&gt;quoted_author&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;quote/dialogue&lt;/code&gt; обычно использует &lt;code&gt;source_title&lt;/code&gt; и контекстные примечания.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;quote/idea&lt;/code&gt; обычно использует &lt;code&gt;context_note&lt;/code&gt; с краткой привязкой к источнику.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Теги</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/tags/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/tags/</guid><description>&lt;h1 id="теги"&gt;Теги&lt;a class="anchor" href="#%d1%82%d0%b5%d0%b3%d0%b8"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="место-в-модели"&gt;Место в модели&lt;a class="anchor" href="#%d0%bc%d0%b5%d1%81%d1%82%d0%be-%d0%b2-%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Tag&lt;/code&gt; является отдельной сущностью уровня библиотеки и НЕ является &lt;code&gt;field_type&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Записи контента связываются с тегами через ассоциацию many-to-many.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="сущность-tag"&gt;Сущность Tag&lt;a class="anchor" href="#%d1%81%d1%83%d1%89%d0%bd%d0%be%d1%81%d1%82%d1%8c-tag"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - неизменяемый идентификатор тега.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library_id&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - библиотека-владелец.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;key&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt; или managed) - стабильный внутренний ключ.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;label&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;) - отображаемое пользователю имя тега.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;color&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - визуальный цветовой маркер.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;icon&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - визуальный икон-маркер.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;created_at&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - момент создания.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;updated_at&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - момент обновления.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="связь-с-контентом"&gt;Связь с контентом&lt;a class="anchor" href="#%d1%81%d0%b2%d1%8f%d0%b7%d1%8c-%d1%81-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%bd%d1%82%d0%be%d0%bc"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Связь контента с тегами ДОЛЖНА поддерживать несколько тегов на одну запись.&lt;/li&gt;
&lt;li&gt;Core ДОЛЖЕН поддерживать назначение существующих тегов записям и снятие тегов с записей.&lt;/li&gt;
&lt;li&gt;Core РЕКОМЕНДУЕТСЯ поддерживать создание тега и его назначение в рамках одной логической операции.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="правила-редактирования"&gt;Правила редактирования&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d1%80%d0%b5%d0%b4%d0%b0%d0%ba%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Переименование тега обновляет &lt;code&gt;label&lt;/code&gt; без переписывания записей контента.&lt;/li&gt;
&lt;li&gt;Удаление тега ДОЛЖНО удалять связи с контентом, но НЕ ДОЛЖНО удалять контент.&lt;/li&gt;
&lt;li&gt;Объединение тегов МОЖЕТ поддерживаться и ДОЛЖНО сохранять связи с контентом.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="importexport-и-синхронизация"&gt;Import/Export и синхронизация&lt;a class="anchor" href="#importexport-%d0%b8-%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Таксономия тегов ДОЛЖНА переноситься вместе с экспортом/импортом библиотеки.&lt;/li&gt;
&lt;li&gt;Данные тегов и связи тег-контент ДОЛЖНЫ синхронизироваться в sync-режиме.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>person</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/person/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/person/</guid><description>&lt;h1 id="person"&gt;person&lt;a class="anchor" href="#person"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - основное имя персоны.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;full_name&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - полное имя.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aliases&lt;/code&gt; (&lt;code&gt;long_text&lt;/code&gt;) - альтернативные имена/псевдонимы.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;born_year&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - год рождения.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;died_year&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - год смерти (если применимо).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nationality&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - национальность/страновая принадлежность.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;roles&lt;/code&gt; (&lt;code&gt;multi_enum&lt;/code&gt;) - роли/профессии.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;known_for&lt;/code&gt; (&lt;code&gt;long_text&lt;/code&gt;) - краткое описание, чем известен.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;official_site&lt;/code&gt; (&lt;code&gt;url&lt;/code&gt;) - официальный сайт/профиль.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;external_ids&lt;/code&gt; (&lt;code&gt;json&lt;/code&gt;) - внешние идентификаторы (например, ORCID, Wikidata, IMDb).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примечания по подтипам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;person/author&lt;/code&gt; обычно использует &lt;code&gt;roles&lt;/code&gt;, &lt;code&gt;known_for&lt;/code&gt; и ссылки на публикации.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;person/speaker&lt;/code&gt; обычно использует медиа/профильные ссылки и тематические заметки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;person/researcher&lt;/code&gt; обычно использует &lt;code&gt;external_ids&lt;/code&gt; и исследовательский контекст в заметках.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;person/creator&lt;/code&gt; обычно использует ссылки на платформы/профили.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Действия библиотеки</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/library-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/library-actions/</guid><description>&lt;h1 id="действия-библиотеки"&gt;Действия библиотеки&lt;a class="anchor" href="#%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d0%b8"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="область-действия"&gt;Область действия&lt;a class="anchor" href="#%d0%be%d0%b1%d0%bb%d0%b0%d1%81%d1%82%d1%8c-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Действия определяют baseline операций для записей библиотеки и тегов библиотеки.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="действия-для-записей"&gt;Действия для записей&lt;a class="anchor" href="#%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-%d0%b4%d0%bb%d1%8f-%d0%b7%d0%b0%d0%bf%d0%b8%d1%81%d0%b5%d0%b9"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;create&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Начинается с выбора &lt;code&gt;content_type&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Core автоматически заполняет системные поля (&lt;code&gt;id&lt;/code&gt;, &lt;code&gt;library_id&lt;/code&gt;, &lt;code&gt;created_at&lt;/code&gt;, &lt;code&gt;updated_at&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Core устанавливает &lt;code&gt;status=inbox&lt;/code&gt; и пустой &lt;code&gt;priority&lt;/code&gt; по умолчанию.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;edit&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Обновляет пользовательские поля.&lt;/li&gt;
&lt;li&gt;Обновляет &lt;code&gt;updated_at&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;set-subtype&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Устанавливает или очищает &lt;code&gt;content_subtype&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;НЕ ДОЛЖЕН менять &lt;code&gt;content_type&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Обновляет &lt;code&gt;updated_at&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;set-status&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Устанавливает &lt;code&gt;status&lt;/code&gt; из разрешенного набора.&lt;/li&gt;
&lt;li&gt;Переходы свободные (без жесткой state-machine).&lt;/li&gt;
&lt;li&gt;ДОЛЖЕН обновлять &lt;code&gt;status_changed_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;НЕ ДОЛЖЕН обновлять &lt;code&gt;updated_at&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;set-priority&lt;/code&gt;&lt;/p&gt;</description></item><item><title>resource</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/resource/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/resource/</guid><description>&lt;h1 id="resource"&gt;resource&lt;a class="anchor" href="#resource"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;resource_name&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - основное название ресурса.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resource_kind&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;enum&lt;/code&gt;) - уточняющий вид ресурса в контексте подтипа.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;provider&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - владелец/провайдер ресурса.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;official_url&lt;/code&gt; (&lt;code&gt;url&lt;/code&gt;) - основная ссылка на ресурс.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;access_model&lt;/code&gt; (&lt;code&gt;enum&lt;/code&gt;) - модель доступа (free/paid/freemium/private).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;license&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - лицензия/условия использования.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pricing_note&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - краткое описание модели оплаты.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;api_available&lt;/code&gt; (&lt;code&gt;boolean&lt;/code&gt;) - признак доступности API.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;repo_host&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - хост-платформа репозитория (например, GitHub, GitLab).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;language&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - основной язык контента/интерфейса.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;last_checked_at&lt;/code&gt; (&lt;code&gt;datetime&lt;/code&gt;) - момент последней проверки ресурса.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примечания по подтипам:&lt;/p&gt;</description></item><item><title>Действия схемы</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/schema-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/schema-actions/</guid><description>&lt;h1 id="действия-схемы"&gt;Действия схемы&lt;a class="anchor" href="#%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-%d1%81%d1%85%d0%b5%d0%bc%d1%8b"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="область-действия"&gt;Область действия&lt;a class="anchor" href="#%d0%be%d0%b1%d0%bb%d0%b0%d1%81%d1%82%d1%8c-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Действия определяют lifecycle-операции для library-scoped сущностей схемы: пользовательские типы, пользовательские подтипы и пользовательские поля.&lt;/li&gt;
&lt;li&gt;Сущности схемы используют внутренние стабильные &lt;code&gt;key&lt;/code&gt;, уникальные в рамках одной библиотеки.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="действия-для-типов"&gt;Действия для типов&lt;a class="anchor" href="#%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-%d0%b4%d0%bb%d1%8f-%d1%82%d0%b8%d0%bf%d0%be%d0%b2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;create-type&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Создает пользовательский тип контента в текущей библиотеке.&lt;/li&gt;
&lt;li&gt;Внутренний &lt;code&gt;key&lt;/code&gt; ДОЛЖЕН быть уникальным в библиотеке.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;edit-type&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Обновляет редактируемые свойства типа.&lt;/li&gt;
&lt;li&gt;Внутренний &lt;code&gt;key&lt;/code&gt; ДОЛЖЕН оставаться неизменяемым.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;archive-type&lt;/code&gt; / &lt;code&gt;unarchive-type&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Отключает/включает тип для активного использования в новых записях.&lt;/li&gt;
&lt;li&gt;Существующие записи с этим типом остаются валидными.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;delete-type&lt;/code&gt;&lt;/p&gt;</description></item><item><title>music</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/music/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/music/</guid><description>&lt;h1 id="music"&gt;music&lt;a class="anchor" href="#music"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;artist&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - основной артист/исполнитель/композитор.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;original_title&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название на языке оригинала.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;album_title&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название родительского альбома.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;release_year&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - год релиза.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;duration_seconds&lt;/code&gt; (&lt;code&gt;duration&lt;/code&gt;) - длительность трека/записи.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;genre&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt; или &lt;code&gt;multi_enum&lt;/code&gt;) - музыкальный жанр.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;label&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - музыкальный лейбл.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isrc&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - идентификатор ISRC.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;platform&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - платформа/сервис прослушивания.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;track_number&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - номер трека в альбоме/EP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;disc_number&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - номер диска для многодисковых релизов.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примечания по подтипам:&lt;/p&gt;</description></item><item><title>audio</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/audio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/audio/</guid><description>&lt;h1 id="audio"&gt;audio&lt;a class="anchor" href="#audio"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;speaker_or_author&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - основной спикер/автор/ведущий.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;original_title&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - название на языке оригинала.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;release_year&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;) - год релиза/публикации.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;duration_seconds&lt;/code&gt; (&lt;code&gt;duration&lt;/code&gt;) - длительность аудио.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;language&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - язык речи.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;publisher_or_show&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - издатель/шоу/сеть.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;episode_label&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - обозначение эпизода/главы.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;narrator&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - диктор/озвучивающий.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;platform&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - платформа распространения/прослушивания.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isbn_or_external_id&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - внешний идентификатор при необходимости.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примечания по подтипам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;audio/audiobook&lt;/code&gt; обычно использует &lt;code&gt;narrator&lt;/code&gt;, &lt;code&gt;publisher_or_show&lt;/code&gt;, &lt;code&gt;isbn_or_external_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;audio/podcast_episode&lt;/code&gt; обычно использует &lt;code&gt;episode_label&lt;/code&gt;, &lt;code&gt;publisher_or_show&lt;/code&gt;, &lt;code&gt;platform&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;audio/podcast_show&lt;/code&gt; обычно использует метаинформацию уровня шоу/платформы.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;audio/lecture_audio&lt;/code&gt; и &lt;code&gt;audio/interview_audio&lt;/code&gt; обычно используют &lt;code&gt;speaker_or_author&lt;/code&gt;, &lt;code&gt;duration_seconds&lt;/code&gt;, &lt;code&gt;language&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;audio/voice_note&lt;/code&gt; обычно использует минимальную метаинформацию и контекстные заметки.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Пресеты</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/search-presets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/search-presets/</guid><description>&lt;h1 id="пресеты"&gt;Пресеты&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b5%d1%81%d0%b5%d1%82%d1%8b"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="контракт"&gt;Контракт&lt;a class="anchor" href="#%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%b0%d0%ba%d1%82"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Preset&lt;/code&gt; — это сохраненное определение поиска в scope библиотеки.&lt;/li&gt;
&lt;li&gt;Preset хранит только условия поиска.&lt;/li&gt;
&lt;li&gt;Preset НЕ ДОЛЖЕН хранить сортировку и layout отображаемых полей.&lt;/li&gt;
&lt;li&gt;Preset МОЖЕТ быть вложенным через &lt;code&gt;parent_preset_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Preset МОЖЕТ задавать &lt;code&gt;inherit_query&lt;/code&gt; (&lt;code&gt;true|false&lt;/code&gt;) для наследования запроса родителя.&lt;/li&gt;
&lt;li&gt;Preset МОЖЕТ включать визуальные метаданные (&lt;code&gt;color&lt;/code&gt;, &lt;code&gt;icon&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="операции"&gt;Операции&lt;a class="anchor" href="#%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;create-preset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update-preset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rename-preset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete-preset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;run-preset&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="правила-иерархии"&gt;Правила иерархии&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d0%b8%d0%b5%d1%80%d0%b0%d1%80%d1%85%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Циклы в иерархии пресетов запрещены.&lt;/li&gt;
&lt;li&gt;Если &lt;code&gt;inherit_query=true&lt;/code&gt;, итоговый запрос объединяется с запросом родителя через baseline-композицию &lt;code&gt;AND&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Если &lt;code&gt;inherit_query=false&lt;/code&gt;, родительская связь является только организационной.&lt;/li&gt;
&lt;li&gt;При удалении родительского пресета дочерние пресеты РЕКОМЕНДУЕТСЯ переносить на корневой уровень.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="управление-пользователем"&gt;Управление пользователем&lt;a class="anchor" href="#%d1%83%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d1%82%d0%b5%d0%bb%d0%b5%d0%bc"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Пользователь может задавать и менять названия пресетов.&lt;/li&gt;
&lt;li&gt;Пользователь может задавать порядок пресетов.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>misc</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/misc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/type-specific-fields/misc/</guid><description>&lt;h1 id="misc"&gt;misc&lt;a class="anchor" href="#misc"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Поля:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kind_note&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - короткое пояснение, что представляет запись.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;external_id&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;) - опциональный внешний идентификатор.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;extra_metadata&lt;/code&gt; (&lt;code&gt;json&lt;/code&gt;) - расширенный произвольный объект метаданных.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примечания по подтипам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;misc&lt;/code&gt; не имеет подтипов по умолчанию.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Коллекции</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/collections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/collections/</guid><description>&lt;h1 id="коллекции"&gt;Коллекции&lt;a class="anchor" href="#%d0%ba%d0%be%d0%bb%d0%bb%d0%b5%d0%ba%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="контракт"&gt;Контракт&lt;a class="anchor" href="#%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%b0%d0%ba%d1%82"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Collection&lt;/code&gt; — ручная группировка записей в scope библиотеки.&lt;/li&gt;
&lt;li&gt;Collection НЕ хранит условия поиска.&lt;/li&gt;
&lt;li&gt;Одна запись контента МОЖЕТ входить в несколько коллекций.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="поля-collection"&gt;Поля Collection&lt;a class="anchor" href="#%d0%bf%d0%be%d0%bb%d1%8f-collection"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - неизменяемый идентификатор коллекции.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library_id&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - библиотека-владелец.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;) - название коллекции.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;description&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - описание коллекции.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;color&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - визуальный цветовой маркер.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;icon&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - визуальный икон-маркер.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;parent_collection_id&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - родительская коллекция для иерархии.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;created_at&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - момент создания.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;updated_at&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - момент обновления.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="операции"&gt;Операции&lt;a class="anchor" href="#%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;create-collection&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rename-collection&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete-collection&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add-to-collection&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;remove-from-collection&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reorder-collections&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="правила-иерархии"&gt;Правила иерархии&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d0%b8%d0%b5%d1%80%d0%b0%d1%80%d1%85%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Родительская коллекция МОЖЕТ иметь несколько дочерних.&lt;/li&gt;
&lt;li&gt;Одна коллекция МОЖЕТ иметь не более одного родителя.&lt;/li&gt;
&lt;li&gt;Циклы в иерархии коллекций запрещены.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Модель исполнения</title><link>https://rekeeply.github.io/spec/ru/core-api/execution-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/execution-model/</guid><description>&lt;h1 id="модель-исполнения"&gt;Модель исполнения&lt;a class="anchor" href="#%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="режимы-исполнения"&gt;Режимы исполнения&lt;a class="anchor" href="#%d1%80%d0%b5%d0%b6%d0%b8%d0%bc%d1%8b-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;embedded&lt;/code&gt; (по умолчанию): core выполняется в одном процессе с клиентским приложением для минимальной задержки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;service&lt;/code&gt;: core выполняется как локальный отдельный процесс и доступен клиентам через локальный IPC-канал.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;remote&lt;/code&gt;: клиент подключается к удаленному backend core по защищенному сетевому каналу.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="общие-правила"&gt;Общие правила&lt;a class="anchor" href="#%d0%be%d0%b1%d1%89%d0%b8%d0%b5-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;одна и та же доменная логика core;&lt;/li&gt;
&lt;li&gt;обязательная аутентификация;&lt;/li&gt;
&lt;li&gt;одна активная сессия привязана к одному аккаунту;&lt;/li&gt;
&lt;li&gt;операции в контексте библиотеки работают только с одной активной базой;&lt;/li&gt;
&lt;li&gt;клиент обращается к core-контракту, а не к файлу БД напрямую.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="жизненный-цикл-сессии"&gt;Жизненный цикл сессии&lt;a class="anchor" href="#%d0%b6%d0%b8%d0%b7%d0%bd%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-%d1%86%d0%b8%d0%ba%d0%bb-%d1%81%d0%b5%d1%81%d1%81%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;init&lt;/code&gt;: первичная инициализация локального vault и создание первой базы;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unlock&lt;/code&gt;: аутентификация пользователя и открытие рабочей сессии;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;active&lt;/code&gt;: выполнение команд в контексте активной сессии (library-scoped или account-scoped);&lt;/li&gt;
&lt;li&gt;&lt;code&gt;switch-library&lt;/code&gt;: явная смена активной базы внутри сессии;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auto-lock&lt;/code&gt;: автоматическая блокировка по таймауту неактивности;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;manual lock/logout&lt;/code&gt;: ручная блокировка или завершение сессии.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="модель-синхронизации-верхний-уровень"&gt;Модель синхронизации (верхний уровень)&lt;a class="anchor" href="#%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b8-%d0%b2%d0%b5%d1%80%d1%85%d0%bd%d0%b8%d0%b9-%d1%83%d1%80%d0%be%d0%b2%d0%b5%d0%bd%d1%8c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;локальная база является источником пользовательской работы по умолчанию;&lt;/li&gt;
&lt;li&gt;синхронизация выполняется асинхронно и не блокирует пользовательские операции;&lt;/li&gt;
&lt;li&gt;синхронизация поддерживает как данные уровня библиотеки, так и данные уровня аккаунта;&lt;/li&gt;
&lt;li&gt;при оффлайне core продолжает работать, синхронизация откладывается;&lt;/li&gt;
&lt;li&gt;конфликты разрешаются детерминированной политикой (уточняется отдельным разделом);&lt;/li&gt;
&lt;li&gt;передача данных для sync выполняется только по защищенному каналу.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Поведение поиска</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/search-behavior/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/search-behavior/</guid><description>&lt;h1 id="поведение-поиска"&gt;Поведение поиска&lt;a class="anchor" href="#%d0%bf%d0%be%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d0%be%d0%b8%d1%81%d0%ba%d0%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="базовое-правило"&gt;Базовое правило&lt;a class="anchor" href="#%d0%b1%d0%b0%d0%b7%d0%be%d0%b2%d0%be%d0%b5-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%be"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Search&lt;/code&gt; и &lt;code&gt;Preset&lt;/code&gt; ДОЛЖНЫ использовать один и тот же query-движок и одинаковую семантику.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="search-vs-preset"&gt;Search vs Preset&lt;a class="anchor" href="#search-vs-preset"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Search&lt;/code&gt; по умолчанию является временным (ephemeral) и не сохраняется, пока пользователь явно его не сохранит.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Preset&lt;/code&gt; — явно сохраненное определение поиска.&lt;/li&gt;
&lt;li&gt;При изменении текущего поиска или перезапуске сессии библиотеки предыдущий временный результат поиска удаляется.&lt;/li&gt;
&lt;li&gt;Между сессиями сохраняются только явно сохраненные пресеты.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="измерения-поиска"&gt;Измерения поиска&lt;a class="anchor" href="#%d0%b8%d0%b7%d0%bc%d0%b5%d1%80%d0%b5%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be%d0%b8%d1%81%d0%ba%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Поиск ДОЛЖЕН поддерживать структурные условия по &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;priority&lt;/code&gt;, &lt;code&gt;rating&lt;/code&gt;, &lt;code&gt;recommendation&lt;/code&gt;, &lt;code&gt;favorite&lt;/code&gt;, &lt;code&gt;archived&lt;/code&gt;, &lt;code&gt;content_type&lt;/code&gt;, &lt;code&gt;content_subtype&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Lifecycle библиотеки</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/library-lifecycle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/library-model/library-lifecycle/</guid><description>&lt;h1 id="lifecycle-библиотеки"&gt;Lifecycle библиотеки&lt;a class="anchor" href="#lifecycle-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d0%b8"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="атрибуты-библиотеки"&gt;Атрибуты библиотеки&lt;a class="anchor" href="#%d0%b0%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d1%8b-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; - уникальный неизменяемый идентификатор.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt; - редактируемое название библиотеки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;icon&lt;/code&gt; - редактируемый визуальный маркер.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="lifecycle-операции"&gt;Lifecycle-операции&lt;a class="anchor" href="#lifecycle-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;create-library&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Создает новую библиотеку с &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;icon&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rename-library&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Обновляет только &lt;code&gt;name&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; остается неизменяемым.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;update-library-icon&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Обновляет только &lt;code&gt;icon&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;archive-library&lt;/code&gt; / &lt;code&gt;unarchive-library&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Архивная библиотека НЕ ДОЛЖНА выбираться как активная до восстановления.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;delete-library&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hard delete требует явного подтверждения.&lt;/li&gt;
&lt;li&gt;Перед удалением система РЕКОМЕНДУЕТСЯ показывать сводку объема связанных данных.&lt;/li&gt;
&lt;li&gt;Если удаляемая библиотека активна:
&lt;ul&gt;
&lt;li&gt;активная библиотека переключается на fallback при наличии;&lt;/li&gt;
&lt;li&gt;иначе активная библиотека очищается до следующего выбора/создания.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="инварианты"&gt;Инварианты&lt;a class="anchor" href="#%d0%b8%d0%bd%d0%b2%d0%b0%d1%80%d0%b8%d0%b0%d0%bd%d1%82%d1%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lifecycle-операции являются account-scoped.&lt;/li&gt;
&lt;li&gt;Cross-account lifecycle-операции запрещены.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; библиотеки стабилен и не переиспользуется в рамках одного account scope.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Граница аутентификации</title><link>https://rekeeply.github.io/spec/ru/core-api/authentication-boundary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/authentication-boundary/</guid><description>&lt;h1 id="граница-аутентификации"&gt;Граница аутентификации&lt;a class="anchor" href="#%d0%b3%d1%80%d0%b0%d0%bd%d0%b8%d1%86%d0%b0-%d0%b0%d1%83%d1%82%d0%b5%d0%bd%d1%82%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;правила аутентификации определяет core;&lt;/li&gt;
&lt;li&gt;проверку учетных данных и выпуск сессии выполняет core;&lt;/li&gt;
&lt;li&gt;клиент только передает аутентификационные данные в core-контракт и хранит клиентские артефакты сессии;&lt;/li&gt;
&lt;li&gt;доступ к данным без активной валидной сессии запрещен.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Модель аккаунта</title><link>https://rekeeply.github.io/spec/ru/core-api/account-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/account-model/</guid><description>&lt;h1 id="модель-аккаунта"&gt;Модель аккаунта&lt;a class="anchor" href="#%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-%d0%b0%d0%ba%d0%ba%d0%b0%d1%83%d0%bd%d1%82%d0%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="контракт"&gt;Контракт&lt;a class="anchor" href="#%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%b0%d0%ba%d1%82"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Реализация core ДОЛЖНА включать &lt;code&gt;Account&lt;/code&gt; как доменную сущность первого класса.&lt;/li&gt;
&lt;li&gt;Один аккаунт ДОЛЖЕН владеть нулем или более библиотек; каждая библиотека ДОЛЖНА принадлежать ровно одному аккаунту.&lt;/li&gt;
&lt;li&gt;Одна активная сессия ДОЛЖНА быть привязана ровно к одному аккаунту.&lt;/li&gt;
&lt;li&gt;Операции в контексте библиотеки в одной активной сессии ДОЛЖНЫ работать ровно с одной активной библиотекой.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="атрибуты-аккаунта"&gt;Атрибуты аккаунта&lt;a class="anchor" href="#%d0%b0%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d1%8b-%d0%b0%d0%ba%d0%ba%d0%b0%d1%83%d0%bd%d1%82%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; ДОЛЖЕН существовать и ДОЛЖЕН быть неизменяемым.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt; ДОЛЖЕН существовать и задавать границу блокировки (&lt;code&gt;locked&lt;/code&gt;/&lt;code&gt;unlocked&lt;/code&gt; или эквивалент).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;security_policy_ref&lt;/code&gt; ДОЛЖЕН существовать и НЕ ДОЛЖЕН содержать секреты в открытом виде.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;default_library_id&lt;/code&gt; МОЖЕТ присутствовать; если задан, он ДОЛЖЕН ссылаться на библиотеку того же аккаунта.&lt;/li&gt;
&lt;li&gt;Дополнительные метаданные МОГУТ присутствовать и являются implementation-defined.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="жизненный-цикл"&gt;Жизненный цикл&lt;a class="anchor" href="#%d0%b6%d0%b8%d0%b7%d0%bd%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-%d1%86%d0%b8%d0%ba%d0%bb"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;init&lt;/code&gt; ДОЛЖЕН создавать ровно один локальный аккаунт в новом vault.&lt;/li&gt;
&lt;li&gt;Повторный &lt;code&gt;init&lt;/code&gt; для инициализированного vault ДОЛЖЕН отклоняться, если не запущен явный reset/force flow.&lt;/li&gt;
&lt;li&gt;Runtime-состояния ДОЛЖНЫ быть эквивалентны &lt;code&gt;uninitialized -&amp;gt; locked -&amp;gt; unlocked -&amp;gt; locked&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="правила-сессии-и-доступа"&gt;Правила сессии и доступа&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d1%81%d0%b5%d1%81%d1%81%d0%b8%d0%b8-%d0%b8-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;После &lt;code&gt;unlock&lt;/code&gt; сессия ДОЛЖНА быть привязана к одному &lt;code&gt;account_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Операции уровня Raw МОГУТ выполняться без выбора активной библиотеки.&lt;/li&gt;
&lt;li&gt;Cross-account операции в одной активной сессии ДОЛЖНЫ отклоняться.&lt;/li&gt;
&lt;li&gt;Операции записи в доменные сущности ДОЛЖНЫ отклоняться, пока сессия заблокирована.&lt;/li&gt;
&lt;li&gt;Операции export/import ДОЛЖНЫ выполняться в контексте активного аккаунта.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="что-не-входит-в-модель-аккаунта"&gt;Что не входит в модель аккаунта&lt;a class="anchor" href="#%d1%87%d1%82%d0%be-%d0%bd%d0%b5-%d0%b2%d1%85%d0%be%d0%b4%d0%b8%d1%82-%d0%b2-%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-%d0%b0%d0%ba%d0%ba%d0%b0%d1%83%d0%bd%d1%82%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Нет требований по email/username/avatar.&lt;/li&gt;
&lt;li&gt;Нет требований по OAuth или social identity.&lt;/li&gt;
&lt;li&gt;Нет client/device UI-настроек в core-схеме аккаунта.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Формат переноса библиотеки</title><link>https://rekeeply.github.io/spec/ru/core-api/library-transfer-format/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/library-transfer-format/</guid><description>&lt;h1 id="формат-переноса-библиотеки"&gt;Формат переноса библиотеки&lt;a class="anchor" href="#%d1%84%d0%be%d1%80%d0%bc%d0%b0%d1%82-%d0%bf%d0%b5%d1%80%d0%b5%d0%bd%d0%be%d1%81%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d0%b8"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="baseline"&gt;Baseline&lt;a class="anchor" href="#baseline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Экспорт/импорт библиотеки ДОЛЖЕН использовать расширение &lt;code&gt;*.rkl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Контейнер &lt;code&gt;*.rkl&lt;/code&gt; ДОЛЖЕН использовать &lt;code&gt;tar.zst&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Текстовые датасеты внутри &lt;code&gt;*.rkl&lt;/code&gt; ДОЛЖНЫ использовать кодировку UTF-8.&lt;/li&gt;
&lt;li&gt;Базовый scope экспорта библиотеки включает только данные уровня библиотеки.&lt;/li&gt;
&lt;li&gt;Данные &lt;code&gt;Raw&lt;/code&gt; исключаются из baseline scope экспорта/импорта библиотеки.&lt;/li&gt;
&lt;li&gt;Пакет переноса ДОЛЖЕН включать manifest-метаданные, версию формата и данные целостности.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="baseline-структуры-пакета"&gt;Baseline структуры пакета&lt;a class="anchor" href="#baseline-%d1%81%d1%82%d1%80%d1%83%d0%ba%d1%82%d1%83%d1%80%d1%8b-%d0%bf%d0%b0%d0%ba%d0%b5%d1%82%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;manifest.json&lt;/code&gt; (required)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library.json&lt;/code&gt; (required)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;taxonomy.json&lt;/code&gt; (required)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content.ndjson&lt;/code&gt; (required)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tags.json&lt;/code&gt; (required)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tag_links.ndjson&lt;/code&gt; (required)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;attachments.ndjson&lt;/code&gt; (required)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;progress.ndjson&lt;/code&gt; (optional)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;notes.ndjson&lt;/code&gt; (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="baseline-manifest"&gt;Baseline manifest&lt;a class="anchor" href="#baseline-manifest"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;manifest.json&lt;/code&gt; ДОЛЖЕН включать: &lt;code&gt;format&lt;/code&gt;, &lt;code&gt;version&lt;/code&gt;, &lt;code&gt;encoding&lt;/code&gt;, &lt;code&gt;container&lt;/code&gt;, &lt;code&gt;exported_at&lt;/code&gt;, &lt;code&gt;library&lt;/code&gt;, &lt;code&gt;datasets&lt;/code&gt;, &lt;code&gt;integrity&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;format&lt;/code&gt; ДОЛЖЕН быть &lt;code&gt;rkl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;encoding&lt;/code&gt; ДОЛЖЕН быть &lt;code&gt;utf-8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;container&lt;/code&gt; ДОЛЖЕН быть &lt;code&gt;tar.zst&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library&lt;/code&gt; ДОЛЖЕН включать &lt;code&gt;id&lt;/code&gt; и &lt;code&gt;name&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;datasets&lt;/code&gt; ДОЛЖЕН включать путь и checksum для каждого включенного датасета.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;integrity&lt;/code&gt; ДОЛЖЕН включать алгоритм checksum и checksum manifest.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="baseline-датасетов"&gt;Baseline датасетов&lt;a class="anchor" href="#baseline-%d0%b4%d0%b0%d1%82%d0%b0%d1%81%d0%b5%d1%82%d0%be%d0%b2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;library.json&lt;/code&gt; ДОЛЖЕН включать &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;icon&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;taxonomy.json&lt;/code&gt; ДОЛЖЕН включать таксономию типов/подтипов и определения схем полей.&lt;/li&gt;
&lt;li&gt;Строки &lt;code&gt;content.ndjson&lt;/code&gt; ДОЛЖНЫ включать &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;created_at&lt;/code&gt;, &lt;code&gt;updated_at&lt;/code&gt;, &lt;code&gt;status_changed_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tags.json&lt;/code&gt; ДОЛЖЕН включать метаданные тегов.&lt;/li&gt;
&lt;li&gt;Строки &lt;code&gt;tag_links.ndjson&lt;/code&gt; ДОЛЖНЫ включать &lt;code&gt;content_id&lt;/code&gt;, &lt;code&gt;tag_id&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="правило-переноса-таксономии"&gt;Правило переноса таксономии&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%be-%d0%bf%d0%b5%d1%80%d0%b5%d0%bd%d0%be%d1%81%d0%b0-%d1%82%d0%b0%d0%ba%d1%81%d0%be%d0%bd%d0%be%d0%bc%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Таксономия ДОЛЖНА переноситься вместе с библиотекой при export/import.&lt;/li&gt;
&lt;li&gt;В scope таксономии входят: типы контента, подтипы контента, схемы полей, теги и связи тег-контент.&lt;/li&gt;
&lt;li&gt;Импорт ДОЛЖЕН восстанавливать таксономию до или одновременно с контентными датасетами, чтобы ссылки контента оставались валидными.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="примечание-по-датасетам"&gt;Примечание по датасетам&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%87%d0%b0%d0%bd%d0%b8%d0%b5-%d0%bf%d0%be-%d0%b4%d0%b0%d1%82%d0%b0%d1%81%d0%b5%d1%82%d0%b0%d0%bc"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Формат переноса библиотеки ДОЛЖЕН поддерживать датасеты вложений (метаданные вложений и связи с контентом).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="baseline-датасета-вложений"&gt;Baseline датасета вложений&lt;a class="anchor" href="#baseline-%d0%b4%d0%b0%d1%82%d0%b0%d1%81%d0%b5%d1%82%d0%b0-%d0%b2%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b9"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Имя файла датасета метаданных вложений: &lt;code&gt;attachments.ndjson&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Каждая строка вложения ДОЛЖНА включать: &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;content_id&lt;/code&gt;, &lt;code&gt;uri&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Опциональные поля строки вложения: &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;mime&lt;/code&gt;, &lt;code&gt;size&lt;/code&gt;, &lt;code&gt;created_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content_id&lt;/code&gt; в &lt;code&gt;attachments.ndjson&lt;/code&gt; ДОЛЖЕН ссылаться на существующую запись контента.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="правила-валидации-и-безопасности"&gt;Правила валидации и безопасности&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d0%b2%d0%b0%d0%bb%d0%b8%d0%b4%d0%b0%d1%86%d0%b8%d0%b8-%d0%b8-%d0%b1%d0%b5%d0%b7%d0%be%d0%bf%d0%b0%d1%81%d0%bd%d0%be%d1%81%d1%82%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Импорт ДОЛЖЕН отклонять пакет при отсутствии любого required датасета.&lt;/li&gt;
&lt;li&gt;Импорт ДОЛЖЕН отклонять пакет при ошибке checksum любого датасета.&lt;/li&gt;
&lt;li&gt;Импорт ДОЛЖЕН отклонять небезопасные пути в архиве (&lt;code&gt;../&lt;/code&gt;, абсолютные пути и эквиваленты path traversal).&lt;/li&gt;
&lt;li&gt;Импорт ДОЛЖЕН валидировать схему и ссылки до финального commit.&lt;/li&gt;
&lt;li&gt;Импорт ДОЛЖЕН быть атомарным: при критической ошибке валидации частичное финальное состояние не фиксируется.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="baseline-порядка-импорта"&gt;Baseline порядка импорта&lt;a class="anchor" href="#baseline-%d0%bf%d0%be%d1%80%d1%8f%d0%b4%d0%ba%d0%b0-%d0%b8%d0%bc%d0%bf%d0%be%d1%80%d1%82%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Сначала выполняется проверка контейнера пакета и целостности &lt;code&gt;manifest&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Затем восстанавливаются метаданные библиотеки (&lt;code&gt;library.json&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Таксономия восстанавливается до контентных датасетов.&lt;/li&gt;
&lt;li&gt;Затем восстанавливаются контентные датасеты.&lt;/li&gt;
&lt;li&gt;Затем восстанавливаются теги и связи тег-контент.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;attachments.ndjson&lt;/code&gt; восстанавливается после контентных датасетов.&lt;/li&gt;
&lt;li&gt;После этого выполняется финальная проверка ссылочной целостности и атомарный commit импорта.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Модель настроек</title><link>https://rekeeply.github.io/spec/ru/core-api/settings-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/settings-model/</guid><description>&lt;h1 id="модель-настроек"&gt;Модель настроек&lt;a class="anchor" href="#%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b5%d0%ba"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="группы-scope"&gt;Группы scope&lt;a class="anchor" href="#%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-scope"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;account-scoped&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library-scoped&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="настройки-уровня-библиотеки"&gt;Настройки уровня библиотеки&lt;a class="anchor" href="#%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b8-%d1%83%d1%80%d0%be%d0%b2%d0%bd%d1%8f-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;default_status_on_create&lt;/code&gt; (&lt;code&gt;enum&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;default_priority_on_create&lt;/code&gt; (&lt;code&gt;enum|null&lt;/code&gt;, default &lt;code&gt;null&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allow_parent_links&lt;/code&gt; (&lt;code&gt;boolean&lt;/code&gt;, default &lt;code&gt;true&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;archived_visible_by_default&lt;/code&gt; (&lt;code&gt;boolean&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="настройки-уровня-аккаунта"&gt;Настройки уровня аккаунта&lt;a class="anchor" href="#%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b8-%d1%83%d1%80%d0%be%d0%b2%d0%bd%d1%8f-%d0%b0%d0%ba%d0%ba%d0%b0%d1%83%d0%bd%d1%82%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;default_library_id&lt;/code&gt; (optional)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;last_active_library_restore&lt;/code&gt; (&lt;code&gt;boolean&lt;/code&gt;, default &lt;code&gt;true&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auto_lock_timeout_minutes&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;, default &lt;code&gt;15&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt; означает отключение)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;require_unlock_on_start&lt;/code&gt; (&lt;code&gt;boolean&lt;/code&gt;, default &lt;code&gt;true&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sync_enabled&lt;/code&gt; (&lt;code&gt;boolean&lt;/code&gt;, default &lt;code&gt;false&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sync_mode&lt;/code&gt; (&lt;code&gt;enum: manual|auto&lt;/code&gt;, default &lt;code&gt;manual&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sync_interval_minutes&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;, default &lt;code&gt;15&lt;/code&gt;, используется при &lt;code&gt;sync_mode=auto&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export_compression_enabled&lt;/code&gt; (&lt;code&gt;boolean&lt;/code&gt;, default &lt;code&gt;true&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backup_enabled&lt;/code&gt; (&lt;code&gt;boolean&lt;/code&gt;, default &lt;code&gt;false&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backup_interval_hours&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;, default &lt;code&gt;24&lt;/code&gt;, используется при включенном backup)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backup_retention_count&lt;/code&gt; (&lt;code&gt;integer&lt;/code&gt;, default &lt;code&gt;10&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timezone&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;, default системная таймзона)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt; (&lt;code&gt;text&lt;/code&gt;, default locale аккаунта или fallback клиента/системы)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="правила-fallback"&gt;Правила fallback&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-fallback"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Если &lt;code&gt;default_library_id&lt;/code&gt; невалиден или удален, fallback: &lt;code&gt;last_active&lt;/code&gt; при наличии, иначе явный выбор библиотеки.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>TODO</title><link>https://rekeeply.github.io/spec/ru/clients/cli/todo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/clients/cli/todo/</guid><description>&lt;h1 id="todo"&gt;TODO&lt;a class="anchor" href="#todo"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;TODO: команды CLI;&lt;/li&gt;
&lt;li&gt;TODO: жизненный цикл сессии в CLI;&lt;/li&gt;
&lt;li&gt;TODO: конфигурация и локальное хранение;&lt;/li&gt;
&lt;li&gt;TODO: ошибки и коды выхода;&lt;/li&gt;
&lt;li&gt;TODO: требования безопасности на уровне клиента.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Глоссарий</title><link>https://rekeeply.github.io/spec/ru/appendices/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/appendices/glossary/</guid><description>&lt;h1 id="глоссарий"&gt;Глоссарий&lt;a class="anchor" href="#%d0%b3%d0%bb%d0%be%d1%81%d1%81%d0%b0%d1%80%d0%b8%d0%b9"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Фиксированные канонические термины, используемые в спецификации.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Account&lt;/code&gt; — верхнеуровневый пользовательский доменный контекст в core.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Session&lt;/code&gt; — аутентифицированный runtime-контекст, привязанный к одному &lt;code&gt;account_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Library&lt;/code&gt; — структурированный домен хранения для организованной работы.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; — домен неструктурированного capture уровня аккаунта.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;active_library_id&lt;/code&gt; — выбранная библиотека для &lt;code&gt;library-scoped&lt;/code&gt; операций.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library-scoped&lt;/code&gt; — операция/данные, требующие активный контекст библиотеки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;account-scoped&lt;/code&gt; — операция/данные, требующие только контекст аккаунта в сессии.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unlock&lt;/code&gt; — открытие сессии после валидации учетных данных.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sync&lt;/code&gt; — асинхронная синхронизация данных между локальным и удаленным runtime.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;promote&lt;/code&gt; — явный перенос данных из &lt;code&gt;Raw&lt;/code&gt; в &lt;code&gt;Library&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Политика версионирования</title><link>https://rekeeply.github.io/spec/ru/appendices/versioning-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/appendices/versioning-policy/</guid><description>&lt;h1 id="политика-версионирования"&gt;Политика версионирования&lt;a class="anchor" href="#%d0%bf%d0%be%d0%bb%d0%b8%d1%82%d0%b8%d0%ba%d0%b0-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%be%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="scope"&gt;Scope&lt;a class="anchor" href="#scope"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Политика определяет правила версионирования для спецификации, core API и проектных репозиториев.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="домены-версий"&gt;Домены версий&lt;a class="anchor" href="#%d0%b4%d0%be%d0%bc%d0%b5%d0%bd%d1%8b-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Spec Version&lt;/code&gt; - версия текущей спецификации.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Core API Version&lt;/code&gt; - версия runtime-контракта между клиентами и core.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Project Version&lt;/code&gt; - версия конкретного репозитория/пакета (&lt;code&gt;core&lt;/code&gt;, &lt;code&gt;cli&lt;/code&gt;, другие клиенты).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="схема"&gt;Схема&lt;a class="anchor" href="#%d1%81%d1%85%d0%b5%d0%bc%d0%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Для всех доменов версий ДОЛЖНА использоваться схема Semantic Versioning: &lt;code&gt;MAJOR.MINOR.PATCH&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="правила-semver"&gt;Правила SemVer&lt;a class="anchor" href="#%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-semver"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MAJOR&lt;/code&gt;: breaking-изменение контракта.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MINOR&lt;/code&gt;: обратно-совместимое добавление функциональности.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PATCH&lt;/code&gt;: обратно-совместимый фикс/редакционное исправление.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="baseline-совместимости"&gt;Baseline совместимости&lt;a class="anchor" href="#baseline-%d1%81%d0%be%d0%b2%d0%bc%d0%b5%d1%81%d1%82%d0%b8%d0%bc%d0%be%d1%81%d1%82%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Клиенты ДОЛЖНЫ объявлять поддерживаемый диапазон &lt;code&gt;Core API Version&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Core runtime ДОЛЖЕН отдавать текущую &lt;code&gt;Core API Version&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;При старте/handshake совместимость client-core ДОЛЖНА проверяться до выполнения обычных операций.&lt;/li&gt;
&lt;li&gt;Несовместимые версии ДОЛЖНЫ завершаться явной ошибкой совместимости.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mapping-релизов"&gt;Mapping релизов&lt;a class="anchor" href="#mapping-%d1%80%d0%b5%d0%bb%d0%b8%d0%b7%d0%be%d0%b2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Spec Version&lt;/code&gt; МОЖЕТ развиваться независимо от версий проектных пакетов.&lt;/li&gt;
&lt;li&gt;Breaking-изменения core-контракта в спецификации РЕКОМЕНДУЕТСЯ сопровождать повышением major-версии и &lt;code&gt;Spec Version&lt;/code&gt;, и &lt;code&gt;Core API Version&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Версии проектных пакетов МОГУТ следовать собственному релизному ритму, но НЕ ДОЛЖНЫ обходить проверки API-совместимости.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="версионирование-формата-rkl"&gt;Версионирование формата RKL&lt;a class="anchor" href="#%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%be%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%84%d0%be%d1%80%d0%bc%d0%b0%d1%82%d0%b0-rkl"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Версия формата &lt;code&gt;*.rkl&lt;/code&gt; независима и ДОЛЖНА указываться в &lt;code&gt;manifest&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Импорт ДОЛЖЕН валидировать указанную версию &lt;code&gt;rkl&lt;/code&gt; до обработки датасетов.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>История изменений</title><link>https://rekeeply.github.io/spec/ru/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/changelog/</guid><description>&lt;h1 id="история-изменений"&gt;История изменений&lt;a class="anchor" href="#%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%8f-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b5%d0%bd%d0%b8%d0%b9"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;История изменений спецификации.&lt;/p&gt;</description></item></channel></rss>