<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Library Model on Rekeeply Spec</title><link>https://rekeeply.github.io/spec/en/core-api/storage-model/library-model/</link><description>Recent content in Library Model on Rekeeply Spec</description><generator>Hugo</generator><language>en</language><atom:link href="https://rekeeply.github.io/spec/en/core-api/storage-model/library-model/index.xml" rel="self" type="application/rss+xml"/><item><title>Content Typing</title><link>https://rekeeply.github.io/spec/en/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/en/core-api/storage-model/library-model/content-typing/</guid><description>&lt;h1 id="content-typing"&gt;Content Typing&lt;a class="anchor" href="#content-typing"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="baseline-rules"&gt;Baseline Rules&lt;a class="anchor" href="#baseline-rules"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;content_type&lt;/code&gt; is mandatory; entries MUST NOT be created without a type.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content_subtype&lt;/code&gt; is optional.&lt;/li&gt;
&lt;li&gt;Manual entry creation MUST start with selecting &lt;code&gt;content_type&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;After type selection, subtype and other fields may be filled later.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="default-and-recommended-set"&gt;Default and Recommended Set&lt;a class="anchor" href="#default-and-recommended-set"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The following type/subtype set is available by default and is recommended based on practical personal usage patterns.&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;Purpose: long-form written works and references.&lt;/p&gt;
&lt;p&gt;Fields: see &lt;a href="type-specific-fields/"&gt;Type-Specific Fields&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fiction&lt;/code&gt; - fictional books.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;non_fiction&lt;/code&gt; - non-fictional books.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reference&lt;/code&gt; - lookup/reference-oriented books.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="article"&gt;&lt;code&gt;article&lt;/code&gt;&lt;a class="anchor" href="#article"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Purpose: shorter written materials from web or publication sources.&lt;/p&gt;</description></item><item><title>Content Fields</title><link>https://rekeeply.github.io/spec/en/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/en/core-api/storage-model/library-model/content-fields/</guid><description>&lt;h1 id="content-fields"&gt;Content Fields&lt;a class="anchor" href="#content-fields"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="field-classes"&gt;Field Classes&lt;a class="anchor" href="#field-classes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;system&lt;/code&gt; fields are managed by core and MUST NOT be manually edited by users.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;user_editable&lt;/code&gt; fields are visible and editable by users.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;computed&lt;/code&gt; fields are derived by core and SHOULD be treated as read-only.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="common-field-baseline"&gt;Common Field Baseline&lt;a class="anchor" href="#common-field-baseline"&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; - immutable entry identifier.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library_id&lt;/code&gt; - owning library identifier.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;created_at&lt;/code&gt; - creation timestamp.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;updated_at&lt;/code&gt; - last update timestamp.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status_changed_at&lt;/code&gt; - timestamp of last status change.&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; - required type key.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content_subtype&lt;/code&gt; - optional subtype key.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt; - entry title.&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; - optional integer rating in range &lt;code&gt;1..10&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;recommendation&lt;/code&gt; - optional recommendation marker: &lt;code&gt;recommended | neutral | not_recommended&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;favorite&lt;/code&gt; - independent favorite flag.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;archived&lt;/code&gt; - independent archive flag.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;parent_content_id&lt;/code&gt; - optional parent relation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source_url&lt;/code&gt; - optional source link.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;summary&lt;/code&gt; - optional short description.&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; - normalized text index for fast search.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;last_activity_at&lt;/code&gt; - derived last activity timestamp.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;is_completed&lt;/code&gt; - derived completion flag from status.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="attachment-model"&gt;Attachment Model&lt;a class="anchor" href="#attachment-model"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Content entries MAY have multiple linked attachments.&lt;/li&gt;
&lt;li&gt;Attachment links are modeled as related entities, not as one-off fixed fields.&lt;/li&gt;
&lt;li&gt;Attachment baseline fields: &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;Attachment export/import baseline dataset file: &lt;code&gt;attachments.ndjson&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="rules"&gt;Rules&lt;a class="anchor" href="#rules"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Clients MUST enforce non-editability for &lt;code&gt;system&lt;/code&gt; and &lt;code&gt;computed&lt;/code&gt; fields.&lt;/li&gt;
&lt;li&gt;Core MUST maintain consistency of all &lt;code&gt;computed&lt;/code&gt; fields.&lt;/li&gt;
&lt;li&gt;On creation, &lt;code&gt;status&lt;/code&gt; SHOULD be auto-set to &lt;code&gt;inbox&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On creation, &lt;code&gt;priority&lt;/code&gt; SHOULD be empty by default unless explicitly provided.&lt;/li&gt;
&lt;li&gt;Status changes SHOULD update &lt;code&gt;status_changed_at&lt;/code&gt; and SHOULD NOT update &lt;code&gt;updated_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Favorite flag changes SHOULD NOT update &lt;code&gt;updated_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Archived flag changes SHOULD NOT update &lt;code&gt;updated_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;rating&lt;/code&gt; is provided, value MUST be in range &lt;code&gt;1..10&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;User-editable fields other than &lt;code&gt;content_type&lt;/code&gt; and &lt;code&gt;status&lt;/code&gt; are optional at creation time and may be filled later.&lt;/li&gt;
&lt;li&gt;Type-specific fields are non-mandatory by baseline and become required only when user-defined schema marks them required.&lt;/li&gt;
&lt;li&gt;Implementations MAY add extra fields in any class as implementation-defined extensions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="related-sections"&gt;Related Sections&lt;a class="anchor" href="#related-sections"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="field-types/"&gt;Field Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="type-specific-fields/"&gt;Type-Specific Fields&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Field Types</title><link>https://rekeeply.github.io/spec/en/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/en/core-api/storage-model/library-model/field-types/</guid><description>&lt;h1 id="field-types"&gt;Field Types&lt;a class="anchor" href="#field-types"&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;This section defines allowed &lt;code&gt;field_type&lt;/code&gt; values for user-defined fields.&lt;/li&gt;
&lt;li&gt;For all field types, &lt;code&gt;required&lt;/code&gt; is configurable (&lt;code&gt;true | false&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Default values are configurable when supported by the field type.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="allowed-field-types"&gt;Allowed Field Types&lt;a class="anchor" href="#allowed-field-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;text&lt;/code&gt; - short text value.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validation: &lt;code&gt;min_length&lt;/code&gt; (optional), &lt;code&gt;max_length&lt;/code&gt; (optional), &lt;code&gt;pattern&lt;/code&gt; (optional), &lt;code&gt;trim_on_save&lt;/code&gt; (optional).&lt;/li&gt;
&lt;li&gt;Default: &lt;code&gt;default_value&lt;/code&gt; (optional string).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;long_text&lt;/code&gt; - long multiline text value.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validation: &lt;code&gt;min_length&lt;/code&gt; (optional), &lt;code&gt;max_length&lt;/code&gt; (optional), &lt;code&gt;trim_on_save&lt;/code&gt; (optional).&lt;/li&gt;
&lt;li&gt;Default: &lt;code&gt;default_value&lt;/code&gt; (optional string).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;boolean&lt;/code&gt; - true/false value.&lt;/p&gt;</description></item><item><title>Tags</title><link>https://rekeeply.github.io/spec/en/core-api/storage-model/library-model/tags/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/en/core-api/storage-model/library-model/tags/</guid><description>&lt;h1 id="tags"&gt;Tags&lt;a class="anchor" href="#tags"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="position-in-model"&gt;Position in Model&lt;a class="anchor" href="#position-in-model"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Tag&lt;/code&gt; is a dedicated library-scoped entity and is NOT a &lt;code&gt;field_type&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Content entries are linked to tags via many-to-many association.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tag-entity"&gt;Tag Entity&lt;a class="anchor" href="#tag-entity"&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;) - immutable tag identifier.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library_id&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - owning library scope.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;key&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt; or managed) - stable internal key.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;label&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;) - user-visible tag name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;color&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - visual color marker.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;icon&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - visual icon marker.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;created_at&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - creation timestamp.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;updated_at&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - update timestamp.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="content-association"&gt;Content Association&lt;a class="anchor" href="#content-association"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Content-tag relation MUST support multiple tags per content entry.&lt;/li&gt;
&lt;li&gt;Core MUST support assigning existing tags to content entries and unassigning tags from content entries.&lt;/li&gt;
&lt;li&gt;Core SHOULD support creating tags and assigning them in one logical operation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="editing-rules"&gt;Editing Rules&lt;a class="anchor" href="#editing-rules"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Renaming a tag updates &lt;code&gt;label&lt;/code&gt; without requiring content rewrites.&lt;/li&gt;
&lt;li&gt;Removing a tag MUST remove links from content entries but MUST NOT remove content.&lt;/li&gt;
&lt;li&gt;Merging tags MAY be supported and SHOULD preserve content links.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="importexport-and-sync"&gt;Import/Export and Sync&lt;a class="anchor" href="#importexport-and-sync"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tag taxonomy MUST travel with library export/import.&lt;/li&gt;
&lt;li&gt;Tag data and tag-content links MUST be synchronized in sync-enabled mode.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Library Actions</title><link>https://rekeeply.github.io/spec/en/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/en/core-api/storage-model/library-model/library-actions/</guid><description>&lt;h1 id="library-actions"&gt;Library Actions&lt;a class="anchor" href="#library-actions"&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;These actions define baseline operations for library entries and library tags.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="entry-actions"&gt;Entry Actions&lt;a class="anchor" href="#entry-actions"&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;Starts with selecting &lt;code&gt;content_type&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Core auto-fills system fields (&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 sets default &lt;code&gt;status=inbox&lt;/code&gt; and default empty &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;Updates user-editable fields.&lt;/li&gt;
&lt;li&gt;Updates &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;Sets or clears &lt;code&gt;content_subtype&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;MUST NOT change &lt;code&gt;content_type&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Updates &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;Sets &lt;code&gt;status&lt;/code&gt; from allowed status set.&lt;/li&gt;
&lt;li&gt;Free transition model (no hard state machine).&lt;/li&gt;
&lt;li&gt;MUST update &lt;code&gt;status_changed_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;MUST NOT update &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>Schema Actions</title><link>https://rekeeply.github.io/spec/en/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/en/core-api/storage-model/library-model/schema-actions/</guid><description>&lt;h1 id="schema-actions"&gt;Schema Actions&lt;a class="anchor" href="#schema-actions"&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;These actions define lifecycle operations for library-scoped schema entities: custom types, custom subtypes, and custom fields.&lt;/li&gt;
&lt;li&gt;Schema entities use internal stable &lt;code&gt;key&lt;/code&gt; values that are unique within one library scope.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="type-actions"&gt;Type Actions&lt;a class="anchor" href="#type-actions"&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;Creates a custom content type in current library.&lt;/li&gt;
&lt;li&gt;Internal &lt;code&gt;key&lt;/code&gt; MUST be unique within library.&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;Updates editable type properties.&lt;/li&gt;
&lt;li&gt;Internal &lt;code&gt;key&lt;/code&gt; MUST remain immutable.&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;Disables/enables type for active usage in new entries.&lt;/li&gt;
&lt;li&gt;Existing entries using this type remain valid.&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>Presets</title><link>https://rekeeply.github.io/spec/en/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/en/core-api/storage-model/library-model/search-presets/</guid><description>&lt;h1 id="presets"&gt;Presets&lt;a class="anchor" href="#presets"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="contract"&gt;Contract&lt;a class="anchor" href="#contract"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Preset&lt;/code&gt; is a saved search definition in library scope.&lt;/li&gt;
&lt;li&gt;Preset stores search conditions only.&lt;/li&gt;
&lt;li&gt;Preset MUST NOT store sorting or displayed field layout.&lt;/li&gt;
&lt;li&gt;Preset MAY be nested using &lt;code&gt;parent_preset_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Preset MAY define &lt;code&gt;inherit_query&lt;/code&gt; (&lt;code&gt;true|false&lt;/code&gt;) for parent query inheritance.&lt;/li&gt;
&lt;li&gt;Preset MAY include visual metadata (&lt;code&gt;color&lt;/code&gt;, &lt;code&gt;icon&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operations"&gt;Operations&lt;a class="anchor" href="#operations"&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="hierarchy-rules"&gt;Hierarchy Rules&lt;a class="anchor" href="#hierarchy-rules"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Preset hierarchy cycles are forbidden.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;inherit_query=true&lt;/code&gt;, resulting query is combined with parent query using baseline &lt;code&gt;AND&lt;/code&gt; composition.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;inherit_query=false&lt;/code&gt;, parent relation is organizational only.&lt;/li&gt;
&lt;li&gt;On parent preset deletion, child presets SHOULD be moved to root level.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-control"&gt;User Control&lt;a class="anchor" href="#user-control"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;User can define and edit preset names.&lt;/li&gt;
&lt;li&gt;User can define preset order.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Collections</title><link>https://rekeeply.github.io/spec/en/core-api/storage-model/library-model/collections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/en/core-api/storage-model/library-model/collections/</guid><description>&lt;h1 id="collections"&gt;Collections&lt;a class="anchor" href="#collections"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="contract"&gt;Contract&lt;a class="anchor" href="#contract"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Collection&lt;/code&gt; is a manual library-scoped grouping of content entries.&lt;/li&gt;
&lt;li&gt;Collection does NOT store search conditions.&lt;/li&gt;
&lt;li&gt;One content entry MAY belong to multiple collections.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="collection-fields"&gt;Collection Fields&lt;a class="anchor" href="#collection-fields"&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;) - immutable collection identifier.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;library_id&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - owning library scope.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;) - collection name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;description&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - collection description.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;color&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - visual color marker.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;icon&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - visual icon marker.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;parent_collection_id&lt;/code&gt; (&lt;code&gt;user_editable&lt;/code&gt;, optional) - parent collection for hierarchy.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;created_at&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - creation timestamp.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;updated_at&lt;/code&gt; (&lt;code&gt;system&lt;/code&gt;) - update timestamp.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operations"&gt;Operations&lt;a class="anchor" href="#operations"&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="hierarchy-rules"&gt;Hierarchy Rules&lt;a class="anchor" href="#hierarchy-rules"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Parent collection MAY have multiple child collections.&lt;/li&gt;
&lt;li&gt;One collection MAY have at most one parent.&lt;/li&gt;
&lt;li&gt;Collection hierarchy cycles are forbidden.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Search Behavior</title><link>https://rekeeply.github.io/spec/en/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/en/core-api/storage-model/library-model/search-behavior/</guid><description>&lt;h1 id="search-behavior"&gt;Search Behavior&lt;a class="anchor" href="#search-behavior"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="core-rule"&gt;Core Rule&lt;a class="anchor" href="#core-rule"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Search&lt;/code&gt; and &lt;code&gt;Preset&lt;/code&gt; MUST use the same query engine and semantics.&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; is ephemeral by default and is not persisted unless explicitly saved.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Preset&lt;/code&gt; is an explicitly persisted search definition.&lt;/li&gt;
&lt;li&gt;When current search is changed or library session is restarted, previous ephemeral search result is discarded.&lt;/li&gt;
&lt;li&gt;Only explicitly saved presets remain available across sessions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="searchable-dimensions"&gt;Searchable Dimensions&lt;a class="anchor" href="#searchable-dimensions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Search MUST support structured conditions by &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;, and &lt;code&gt;content_subtype&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Library Lifecycle</title><link>https://rekeeply.github.io/spec/en/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/en/core-api/storage-model/library-model/library-lifecycle/</guid><description>&lt;h1 id="library-lifecycle"&gt;Library Lifecycle&lt;a class="anchor" href="#library-lifecycle"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="library-attributes"&gt;Library Attributes&lt;a class="anchor" href="#library-attributes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; - unique immutable identifier.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt; - editable library name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;icon&lt;/code&gt; - editable visual marker.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="lifecycle-operations"&gt;Lifecycle Operations&lt;a class="anchor" href="#lifecycle-operations"&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;Creates new library with &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, and &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;Updates &lt;code&gt;name&lt;/code&gt; only.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt; remains immutable.&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;Updates &lt;code&gt;icon&lt;/code&gt; only.&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;Archived library MUST NOT be selected as active until restored.&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 requires explicit confirmation.&lt;/li&gt;
&lt;li&gt;Before delete, system SHOULD show related data volume summary.&lt;/li&gt;
&lt;li&gt;If deleted library is active:
&lt;ul&gt;
&lt;li&gt;switch active library to fallback when available;&lt;/li&gt;
&lt;li&gt;otherwise clear active library until next selection/creation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="invariants"&gt;Invariants&lt;a class="anchor" href="#invariants"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lifecycle operations are account-scoped.&lt;/li&gt;
&lt;li&gt;Cross-account lifecycle operations are forbidden.&lt;/li&gt;
&lt;li&gt;Library &lt;code&gt;id&lt;/code&gt; is stable and never reused in same account scope.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>