diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c4395ad..c9a8d65 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,18 +34,6 @@ jobs: run: opam list --installed --columns=name,installed-version --short --color=never > .ci-reports/packages.txt - name: Build all targets and native embed run: | - # OCaml's partial linker does not use the C compiler's multiarch paths. - # Expose archives only so the complete object cannot select a shared library. - if [ "$(uname -s)" = Linux ]; then - static_directory="$PWD/.ci-deps/system-static-libs" - mkdir -p "$static_directory" - for library in rt sqlite3; do - archive="$(cc -print-file-name="lib${library}.a")" - test -f "$archive" - ln -s "$archive" "$static_directory/lib${library}.a" - done - export OCAMLPARAM="_,cclib=-L$static_directory" - fi opam exec -- dune build @all app/native_embed.exe.o - name: Run full regression suite run: opam exec -- dune runtest --force diff --git a/.gitignore b/.gitignore index 782753a..1d05c22 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,10 @@ /.dir-locals.el app/journal_complete_iossim.o +# Generated Python bytecode +__pycache__/ +*.pyc + # Local validation reports and evidence /docs/test-reports/ /.ci-deps/ diff --git a/AGENTS.md b/AGENTS.md index 3516e9e..7d1e419 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,6 @@ - Use spec-dev-tool to manage agent decision documents; run `spec-dev-tool --help` and follow its AGENT WORKFLOW. - All changes must comply with `docs/ux-guidelines.md`. +- Keep temporary review and test evidence, experiments, reports, screenshots, and generated hosts outside this repository in the current task's external evidence directory. Do not create a repository `review/` directory or temporary test directories. Reusable formal test source belongs in the existing test directories. - Before adding a bug regression test, identify the production state owner and attempt reproduction through its public pure reducer events, completions, state, and effects. If that boundary reproduces the defect, add only pure reducer regression tests for it; do not duplicate coverage in effect-runner, persistence, transport, integration, E2E, or UI tests. If it cannot, document the missing ownership boundary and test only the narrowest layer that executes the defect. Injecting an already incorrect external result is not a pure reproduction. Use deterministic public interfaces without bypassing `.mli` files or copying implementation logic. This rule does not authorize removing existing tests or moving production ownership for test classification. - When asked to find simplifications, run `spec-dev-tool guide find-simplifications` from inside this Git worktree and follow the emitted workflow. - When asked to find test simplifications, run `spec-dev-tool guide find-test-simplifications` from inside this Git worktree and follow the emitted workflow. diff --git a/app/application.mli b/app/application.mli index 5c63860..2f54ed7 100644 --- a/app/application.mli +++ b/app/application.mli @@ -2,7 +2,6 @@ val sync_phase_name : Logseq_db_worker_lui.Logseq_db_worker_lui_service.sync_phase -> string -val startup_phase_name : Journal_startup.startup_phase -> string val graph_phase_name : Logseq_db_worker.graph_phase -> string val diagnostic_phase_rows diff --git a/app/journal_asset_import.ml b/app/journal_asset_import.ml index 02dd2ca..86c63fe 100644 --- a/app/journal_asset_import.ml +++ b/app/journal_asset_import.ml @@ -12,13 +12,6 @@ let source_to_string = function | Camera -> "camera" ;; -let source_of_string = function - | "files" -> Some Files - | "photos" -> Some Photos - | "camera" -> Some Camera - | _ -> None -;; - (* [request] mirrors the extension's request prop; [staged] requests copy the pick into a temp file on the host so the path outlives the picker's security scope — needed when the selection is attached later (composer). *) diff --git a/app/journal_asset_import.mli b/app/journal_asset_import.mli index f248eaf..2002f3d 100644 --- a/app/journal_asset_import.mli +++ b/app/journal_asset_import.mli @@ -3,8 +3,6 @@ type source = | Photos | Camera -val source_to_string : source -> string -val source_of_string : string -> source option (** Picker arm request: [source] selects the picker, [staged] makes the host copy the pick into a temp file so it survives until a later import. *) diff --git a/app/journal_asset_runtime.ml b/app/journal_asset_runtime.ml index a055e0e..96e23a0 100644 --- a/app/journal_asset_runtime.ml +++ b/app/journal_asset_runtime.ml @@ -182,7 +182,3 @@ let notice | Asset_availability { consumer; asset; availability } -> dispatch t (Availability { consumer; asset; availability })) ;; - -let visible t ~consumer assets = dispatch t (Visible { consumer; assets }) -let hidden t ~consumer = dispatch t (Hidden consumer) -let progress t reason = Policy.progress t.policy reason diff --git a/app/journal_asset_runtime.mli b/app/journal_asset_runtime.mli index a9e674e..852dff1 100644 --- a/app/journal_asset_runtime.mli +++ b/app/journal_asset_runtime.mli @@ -32,8 +32,5 @@ val notice -> Logseq_db_worker_lui.Logseq_db_worker_lui_service.asset_notice -> unit -val visible : t -> consumer:string -> Logseq_db_types.Asset_descriptor.t list -> unit -val hidden : t -> consumer:string -> unit -val progress : t -> Journal_asset_policy.reason -> Journal_asset_policy.progress val pump : t -> unit val reject : t -> request_id:Logseq_db_types.Graph_types.Uuid.t -> unit diff --git a/app/journal_lui_native.ml b/app/journal_lui_native.ml index 886927c..fe76720 100644 --- a/app/journal_lui_native.ml +++ b/app/journal_lui_native.ml @@ -118,21 +118,6 @@ let mount ?key ~payload ~children ?on_event identifier context parent = node ;; -let chrome ?key ~payload ?on_event children : Lui_elements.t = - fun context parent -> - mount ?key ~payload ~children ?on_event chrome_identifier context parent -;; - -let asset_import ?key ~payload ?on_event children : Lui_elements.t = - fun context parent -> - mount ?key ~payload ~children ?on_event asset_import_identifier context parent -;; - -let asset_settings ?key ~payload ?on_event children : Lui_elements.t = - fun context parent -> - mount ?key ~payload ~children ?on_event asset_settings_identifier context parent -;; - let list ?key ~payload ?on_event children : Lui_elements.t = fun context parent -> mount ?key ~payload ~children ?on_event list_identifier context parent diff --git a/app/journal_lui_native.mli b/app/journal_lui_native.mli index 1222690..52de1c6 100644 --- a/app/journal_lui_native.mli +++ b/app/journal_lui_native.mli @@ -15,7 +15,6 @@ val chrome_identifier : string val asset_import_identifier : string val asset_settings_identifier : string val list_identifier : string -val image_preview_identifier : string (** Extension schemas shared with the Apple iOS/macOS hosts. *) val registry : Lui_extension.extension_registry @@ -28,10 +27,6 @@ type event = ; payload : string } -(** Decodes a lui [ExtensionEvent] into a journal [event]; returns [None] for - events that are not journal extension events or are malformed. *) -val decode_event : Lui_protocol.event -> event option - (** Low-level mount helper shared by the element constructors and the [Journal_view.Native_widget] shim. [payload] is the JSON-encoded properties object (the same JSON the previous [~encode_props] produced); @@ -44,27 +39,6 @@ val mount -> string -> Lui_elements.t -val chrome - : ?key:string - -> payload:string - -> ?on_event:(event -> unit) - -> Lui_elements.t list - -> Lui_elements.t - -val asset_import - : ?key:string - -> payload:string - -> ?on_event:(event -> unit) - -> Lui_elements.t list - -> Lui_elements.t - -val asset_settings - : ?key:string - -> payload:string - -> ?on_event:(event -> unit) - -> Lui_elements.t list - -> Lui_elements.t - (** Native virtualized collection (grouped sections, scroll positioning, visible-range paging, context actions). Section and row structure rides in [payload]; each row's content element mounts as an extension child in the diff --git a/app/journal_model.ml b/app/journal_model.ml index 9569ec9..6426c52 100644 --- a/app/journal_model.ml +++ b/app/journal_model.ml @@ -37,12 +37,6 @@ let status_name = function | Later -> "Later" ;; -let status_default_value = function - | No_status -> None - | In_review -> Some "In Review" - | status -> Some (status_name status) -;; - type t = { id : string ; page_id : string diff --git a/app/journal_model.mli b/app/journal_model.mli index 9addd05..51ab4dd 100644 --- a/app/journal_model.mli +++ b/app/journal_model.mli @@ -18,7 +18,6 @@ type status_category = val status_category : task_state -> status_category option val status_name : task_state -> string -val status_default_value : task_state -> string option type t diff --git a/app/journal_time.ml b/app/journal_time.ml index 335b829..c8441d0 100644 --- a/app/journal_time.ml +++ b/app/journal_time.ml @@ -29,10 +29,6 @@ let of_instant_unix_ms_with ~localtime ~instant_unix_ms = | exn -> Error ("local time conversion failed: " ^ Printexc.to_string exn) ;; -let of_instant_unix_ms ~instant_unix_ms = - of_instant_unix_ms_with ~localtime:Unix.localtime ~instant_unix_ms -;; - let of_calendar calendar = create ~instant_unix_ms:(Journal_calendar.instant_unix_ms calendar) diff --git a/app/journal_time.mli b/app/journal_time.mli index c375a3a..a1fd321 100644 --- a/app/journal_time.mli +++ b/app/journal_time.mli @@ -6,8 +6,6 @@ val create -> local_minute_of_day:int -> (t, string) result -val of_instant_unix_ms : instant_unix_ms:int64 -> (t, string) result - val of_instant_unix_ms_with : localtime:(float -> Unix.tm) -> instant_unix_ms:int64 diff --git a/app/journal_validation.ml b/app/journal_validation.ml index 0a0d8a1..f71a0c7 100644 --- a/app/journal_validation.ml +++ b/app/journal_validation.ml @@ -23,19 +23,6 @@ let is_valid_utf_8 value = loop 0 ;; -let utf_8_scalar_count value = - let rec loop offset count = - if offset = String.length value - then Some count - else ( - let decoded = String.get_utf_8_uchar value offset in - if Uchar.utf_decode_is_valid decoded - then loop (offset + Uchar.utf_decode_length decoded) (count + 1) - else None) - in - loop 0 0 -;; - let contains_nul value = String.contains value '\000' let validate_block_source value = @@ -48,12 +35,6 @@ let validate_block_source value = else Ok () ;; -let validate_source value = - if String.equal (String.trim value) "" - then Error "source must not be blank" - else validate_block_source value -;; - let is_leap_year year = year mod 4 = 0 && (year mod 100 <> 0 || year mod 400 = 0) let is_journal_day day = diff --git a/app/journal_validation.mli b/app/journal_validation.mli index aa6fff6..877ce1a 100644 --- a/app/journal_validation.mli +++ b/app/journal_validation.mli @@ -3,8 +3,6 @@ val is_uuid : string -> bool val is_valid_utf_8 : string -> bool -val utf_8_scalar_count : string -> int option val is_journal_day : int -> bool val contains_nul : string -> bool val validate_block_source : string -> (unit, string) result -val validate_source : string -> (unit, string) result diff --git a/docs/agent-guide/implemented/architecture/2026-10-04-journal-ui-supported-boundaries.md b/docs/agent-guide/implemented/architecture/2026-10-04-journal-ui-supported-boundaries.md index c1a10e2..922c7ea 100644 --- a/docs/agent-guide/implemented/architecture/2026-10-04-journal-ui-supported-boundaries.md +++ b/docs/agent-guide/implemented/architecture/2026-10-04-journal-ui-supported-boundaries.md @@ -14,7 +14,7 @@ Journal 已完成 LUI、局部媒体订阅与 typed native NavigationStack 迁 原始证据:[完整 UI review](/Users/rcmerci/Documents/Codex/2026-10-03/task-8/journal-ui-review.md)、[wrapper](/Users/rcmerci/Documents/Codex/2026-10-03/task-8/view-review.md)、[list](/Users/rcmerci/Documents/Codex/2026-10-03/task-8/list-review.md)、[media](/Users/rcmerci/Documents/Codex/2026-10-03/task-8/media-review.md)、[native](/Users/rcmerci/Documents/Codex/2026-10-03/task-8/native-review.md)、[媒体闪烁诊断](/Users/rcmerci/Documents/Codex/2026-10-03/task-8/media-flicker-diagnosis.md)。这些是本机 Git 外报告,不是已提交附件;其它机器需取得原证据。本文件重核源码树、消费者和规范,复用原诊断并标明限制,探索阶段没有重新运行原实验或声称新 UI PASS;后续新版本验收独立记录。 -原 review/native 的 LUI 基线为 `67ea3e8a9787cd80b1106a11a2504a6735f96d30`;当时看到的 main `1db993d4e2eaa2ec844620e374c736829798a2d0` 不是其 native 输入。探索阶段没有 fetch/升级 LUI;实施阶段已隔离解析 main(见实施记录)。实施按 [composer integration](../../../development/composer-integration.md) 解析一致的 OCaml/LUI/Apple package,记录完整 SHA/ABI,不混用新 backend 和旧实验。 +原仓库外 native 审查的 LUI 基线为 `67ea3e8a9787cd80b1106a11a2504a6735f96d30`;当时看到的 main `1db993d4e2eaa2ec844620e374c736829798a2d0` 不是其 native 输入。探索阶段没有 fetch/升级 LUI;实施阶段已隔离解析 main(见实施记录)。实施按 [composer integration](../../../development/composer-integration.md) 解析一致的 OCaml/LUI/Apple package,记录完整 SHA/ABI,不混用新 backend 和旧实验。 生产入口 [native_embed](https://github.com/logseq/logseq_journal/blob/953f71b5852b5ffd094bf75a040e46656ab8a1c9/app/native_embed.ml#L1) → `Application.native_hooks` → Application/LUI/C → Apple;固定审查基线的 Flutter 也使用同一 Journal 协议,Q1=B 已决定其后续退役。检索包括 app/test/review、registration/schema/fingerprint、wire 字符串与 kind 映射。测试/static fixture 是实际消费者,不能按“非生产”便删除。[app library](https://github.com/logseq/logseq_journal/blob/953f71b5852b5ffd094bf75a040e46656ab8a1c9/app/dune#L1) 无 `public_name`,Journal_view 不是公开安装 widget 包,但 `.mli`、host wire、测试仍是成套合同。未找到受支持的外部 Journal_view/journal-media mount;这是仓库证据边界,不证明所有外部源码不存在。实施发现真实受支持消费者须补证据、暂停相应删除,不私加 fallback。 diff --git a/docs/agent-guide/implemented/bugfix/2026-10-01-asset-notice-coalescing.md b/docs/agent-guide/implemented/bugfix/2026-10-01-asset-notice-coalescing.md index ee5e625..eb0e66c 100644 --- a/docs/agent-guide/implemented/bugfix/2026-10-01-asset-notice-coalescing.md +++ b/docs/agent-guide/implemented/bugfix/2026-10-01-asset-notice-coalescing.md @@ -47,4 +47,4 @@ All required scope decisions are answered by the user's explicit fix authorizati ## Evidence -Five deterministic public-mailbox regressions failed for notification loss or silent overflow before implementation. All eight service tests now pass. The complete build passes; full runtest retains the one pre-existing V.progress source-text mismatch. A real graph file now shows ML and actual 47.2 KB, its camera image renders, and tapping that image shows full Quick Look content. The ML type uses Quick Look's system fallback; it is not claimed to render source text. Both previews were dismissed back to the timeline. Screenshots: review/real-assets-fixed.png and review/real-image-preview-fixed.png. GitHub main was fetched before both test and implementation edits and remains a33d782; the isolated branch includes it. +Five deterministic public-mailbox regressions failed for notification loss or silent overflow before implementation. All eight service tests now pass. The complete build passes; full runtest retains the one pre-existing V.progress source-text mismatch. A real graph file now shows ML and actual 47.2 KB, its camera image renders, and tapping that image shows full Quick Look content. The ML type uses Quick Look's system fallback; it is not claimed to render source text. Both previews were dismissed back to the timeline. The historical screenshots were task-local validation evidence, retained outside the repository. GitHub main was fetched before both test and implementation edits and remains a33d782; the isolated branch includes it. diff --git a/docs/agent-guide/implemented/feature/2026-10-01-2026-10-01-journal-text-first-items.md b/docs/agent-guide/implemented/feature/2026-10-01-2026-10-01-journal-text-first-items.md index c166905..6c50850 100644 --- a/docs/agent-guide/implemented/feature/2026-10-01-2026-10-01-journal-text-first-items.md +++ b/docs/agent-guide/implemented/feature/2026-10-01-2026-10-01-journal-text-first-items.md @@ -54,7 +54,7 @@ The existing native host remains required. Named tag metadata becomes an optiona ## Implementation evidence -Implemented in OCaml/LUI and validated by nine mounted-UI checks, fourteen Worker application integration cases, protocol round trips, and successful workspace build. Actual iOS simulator screenshots and native PDF preview, expansion and collapse were reviewed. See review/README.md for local artifacts, base/PR dependencies, and reproducible host linking. Full runtest has the unchanged baseline V.progress source assertion failure. Horizontal gallery drag remains an explicit manual verification item because the mouse-control tool reports noWindowsAvailable. File names are unavailable from the descriptor; type and optional actual size are used honestly. Draft PR publication is authorized; no physical-device installation or merge occurs. +Implemented in OCaml/LUI and validated by nine mounted-UI checks, fourteen Worker application integration cases, protocol round trips, and successful workspace build. Actual iOS simulator screenshots and native PDF preview, expansion and collapse were reviewed. The repository review artifacts were retired by the 2026-10-08 cleanup; historical validation evidence is retained outside the repository. See the development composer integration guide for the maintained host workflow. Full runtest has the unchanged baseline V.progress source assertion failure. Horizontal gallery drag remains an explicit manual verification item because the mouse-control tool reports noWindowsAvailable. File names are unavailable from the descriptor; type and optional actual size are used honestly. Draft PR publication is authorized; no physical-device installation or merge occurs. ## Follow-up validation diff --git a/dune-project b/dune-project index 493c872..c93ab9b 100644 --- a/dune-project +++ b/dune-project @@ -43,8 +43,6 @@ (melange-transit-native (= 0.1.2)) (ppx_deriving_yojson (>= 3.9.1)) (sqlite3 (= 5.4.0)) - (uucp (= 17.0.0)) - (uunf (= 17.0.0)) (uutf (= 1.0.4)) (yojson (= 3.0.0)))) @@ -112,8 +110,6 @@ (logseq_db_types (= 0.1.0)) (logseq_overlay_db (= 0.1.0)) (logseq_sync (= 0.1.0)) - (base (= v0.17.3)) - (core (= v0.17.2)) (eio (= 1.2)) (eio_main (and :with-test (= 1.2))) (melange-transit-native (= 0.1.2)) diff --git a/logseq_db_worker.opam b/logseq_db_worker.opam index 11ba255..22afe79 100644 --- a/logseq_db_worker.opam +++ b/logseq_db_worker.opam @@ -14,8 +14,6 @@ depends: [ "logseq_db_types" {= "0.1.0"} "logseq_overlay_db" {= "0.1.0"} "logseq_sync" {= "0.1.0"} - "base" {= "v0.17.3"} - "core" {= "v0.17.2"} "eio" {= "1.2"} "eio_main" {with-test & = "1.2"} "mtime" {= "2.1.0"} diff --git a/logseq_db_worker/test/fixtures/expected/admission-classifier-v1.json b/logseq_db_worker/test/fixtures/expected/admission-classifier-v1.json deleted file mode 100644 index aec16b3..0000000 --- a/logseq_db_worker/test/fixtures/expected/admission-classifier-v1.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "apiVersion": 1, - "pinnedLogseqCommit": "4f21d068aed43bb2ea5823247cae73ecdd8d60f8", - "minimumSchema": "65.33", - "schemaCases": [ - {"name":"minimum","actual":"65.33","expected":"admit"}, - {"name":"newer-minor","actual":"65.34","expected":"admit"}, - {"name":"newer-major","actual":"66.0","expected":"admit"}, - {"name":"older-minor","actual":"65.32","expected":"unsupportedSchema"}, - {"name":"older-major","actual":"64.99","expected":"unsupportedSchema"}, - {"name":"malformed","actual":"65.x","expected":"unsupportedSchema"} - ], - "cases": [ - {"name":"local-graph-uuid-only","remoteFlag":"absent","localGraphUuid":"40000000-0000-4000-8000-000000000001","rtcGraphUuid":null,"clientOpsGraphUuid":null,"clientOpsRows":0,"expected":"admit"}, - {"name":"explicit-local-with-history","remoteFlag":false,"localGraphUuid":"40000000-0000-4000-8000-000000000001","rtcGraphUuid":null,"clientOpsGraphUuid":null,"clientOpsRows":12,"expected":"admit"}, - {"name":"value-less-rtc-schema-ident","remoteFlag":false,"localGraphUuid":"40000000-0000-4000-8000-000000000001","rtcGraphUuid":null,"clientOpsGraphUuid":null,"clientOpsRows":0,"rtcSchemaIdentExists":true,"expected":"admit"}, - {"name":"remote-true","remoteFlag":true,"localGraphUuid":"40000000-0000-4000-8000-000000000001","rtcGraphUuid":"50000000-0000-4000-8000-000000000001","clientOpsGraphUuid":"50000000-0000-4000-8000-000000000001","clientOpsRows":1,"expected":"remoteGraph"}, - {"name":"rtc-identity-without-remote","remoteFlag":"absent","localGraphUuid":"40000000-0000-4000-8000-000000000001","rtcGraphUuid":"50000000-0000-4000-8000-000000000001","clientOpsGraphUuid":null,"clientOpsRows":0,"expected":"ambiguousSyncState"}, - {"name":"client-ops-rtc-identity-with-local-flag","remoteFlag":false,"localGraphUuid":"40000000-0000-4000-8000-000000000001","rtcGraphUuid":null,"clientOpsGraphUuid":"50000000-0000-4000-8000-000000000001","clientOpsRows":1,"expected":"ambiguousSyncState"}, - {"name":"non-boolean-remote-flag","remoteFlag":"true","localGraphUuid":"40000000-0000-4000-8000-000000000001","rtcGraphUuid":null,"clientOpsGraphUuid":null,"clientOpsRows":0,"expected":"ambiguousSyncState"}, - {"name":"conflicting-rtc-identities","remoteFlag":true,"localGraphUuid":"40000000-0000-4000-8000-000000000001","rtcGraphUuid":"50000000-0000-4000-8000-000000000001","clientOpsGraphUuid":"50000000-0000-4000-8000-000000000002","clientOpsRows":1,"expected":"ambiguousSyncState"} - ] -} diff --git a/logseq_db_worker/test/fixtures/expected/automatic-effects-v1.json b/logseq_db_worker/test/fixtures/expected/automatic-effects-v1.json deleted file mode 100644 index 2df1932..0000000 --- a/logseq_db_worker/test/fixtures/expected/automatic-effects-v1.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "apiVersion": 1, - "pinnedLogseqCommit": "4f21d068aed43bb2ea5823247cae73ecdd8d60f8", - "minimumSchema": "65.33", - "operations": { - "saveBlock": {"required":["builtInProtection","uuidImmutability","updatedAt","pageUpdatedAt","titleReferences","tags","scheduledReferences","deadlineReferences","orphanCleanup","transactionMetadata","blockTxId"],"prestageReject":["commands","templates","unimplementedAssetEffects"]}, - "insertBlocks": {"required":["fractionalOrders","parentAndPage","createdAt","updatedAt","internalReferenceRemap","referenceStubs","replaceEmpty","transactionMetadata","blockTxId"],"prestageReject":["commands","templates","unsupportedAssetRelations"]}, - "moveBlocks": {"required":["selectionNormalization","cyclePrevention","fractionalOrders","crossPageDescendantRewrite","transactionMetadata","blockTxId"],"prestageReject":["propertyValueMembership"]}, - "moveUpDown": {"required":["contextualTarget","sharedMovePlanner","boundaryNoChange","transactionMetadata","blockTxId"],"prestageReject":[]}, - "indentOutdent": {"required":["continuousSelection","collapsedTargetSemantics","directOutdentRightSiblingReparenting","fractionalOrders","transactionMetadata","blockTxId"],"prestageReject":["propertyValueMembership"]}, - "deleteBlocks": {"required":["ancestorDeduplication","hardSubtreeDelete","referenceCleanup","rangeCommentCleanup","defaultValueReplacement","transactionMetadata"],"prestageReject":["builtInNodes"]}, - "createPage": {"required":["collisionPolicy","pageNameNormalization","journalUuid","timestamps","classIdentity","transactionMetadata"],"prestageReject":["namespaceParentCreation","restoreByCreate","pageKindConversion","propertiesOrTagsAtCreate"]}, - "renamePage": {"required":["savePipeline","pageNameNormalization","uuidAliases","referenceRewrite","orphanCleanup","transactionMetadata","blockTxId"],"prestageReject":[]}, - "deletePage": {"required":["ordinaryRecycle","todayJournalClear","classAndPropertyRules","recycleMetadata","transactionMetadata"],"prestageReject":["builtInPages","hiddenPages"]}, - "restoreRecycledPage": {"required":["recordedParent","recordedOrder","topLevelRestore","recycleMetadataCleanup","transactionMetadata"],"prestageReject":["nonPageRoots","orderRepair"]}, - "permanentlyDeleteRecycledPage": {"required":["eligibility","hardSubtreeDelete","relationCleanup","transactionMetadata"],"prestageReject":["nonPageRoots"]}, - "upsertProperty": {"required":["qualifiedIdentity","derivedPropertyUuid","schemaValidation","cardinalityValidation","existingValueValidation","transactionMetadata"],"prestageReject":["independentPropertyUuid","pageConversion","unsupportedInternalUserTypes"]}, - "setProperty": {"required":["typedValidation","selfReferenceProtection","closedValues","defaultPlaceholder","statusClassAliasRules","idempotentNoChange","transactionMetadata"],"prestageReject":[]}, - "removeProperty": {"required":["statusDefaultExtendsAliasRules","placeholderCleanup","orphanValueCleanup","transactionMetadata"],"prestageReject":[]}, - "batchSetProperty": {"required":["resolveAllTargetsFirst","explicitAppendOrReplace","typedValidation","atomicity","transactionMetadata"],"prestageReject":[]}, - "batchRemoveProperty": {"required":["resolveAllTargetsFirst","statusHandling","orphanGeneratedValueCleanup","atomicity","transactionMetadata"],"prestageReject":[]}, - "manageClosedValues": {"required":["typeEligibility","valueIdentity","valueValidation","associationCleanup","transactionMetadata"],"prestageReject":["nonClosedValuePropertyTypes"]}, - "manageClassProperty": {"required":["classValidation","propertyValidation","defaultValidation","classPropertyRelations","transactionMetadata"],"prestageReject":["builtInProtectedRelations"]} - }, - "separateIntegrationGates": ["searchSidecarInvalidation","vectorSidecarInvalidation","clientOperationHistoryCoexistence","undoHistoryCoexistence","checksumCoexistence","laterSyncCoexistence"] -} diff --git a/logseq_db_worker/test/fixtures/expected/oracle-worker-route-smoke.json b/logseq_db_worker/test/fixtures/expected/oracle-worker-route-smoke.json deleted file mode 100644 index 174e874..0000000 --- a/logseq_db_worker/test/fixtures/expected/oracle-worker-route-smoke.json +++ /dev/null @@ -1,2909 +0,0 @@ -{ - "formatVersion": 1, - "case": "worker-create-page", - "source": { - "logseqCommit": "4f21d068aed43bb2ea5823247cae73ecdd8d60f8", - "schema": "65.33", - "minimumSupportedSchema": "65.33", - "workerRoute": "frontend.worker.db-core -> thread-api/apply-outliner-ops" - }, - "deterministicInputs": { - "engineClockEpochMs": "1704067200000", - "pageUuid": "11111111-1111-4111-8111-111111111111", - "pageTitle": "Oracle Page" - }, - "normalizationRules": [ - "Remove DataScript :db/id storage addresses.", - "Replace :block/created-at and :block/updated-at with $normalizedEpochMs.", - "Replace :block/tx-id with $normalizedTransactionId.", - "Sort sets and projected entities by stable semantic identity." - ], - "projection": [ - { - "block/created-at": "$normalizedEpochMs", - "block/name": "file checksum", - "block/order": "b11", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "File checksum", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1011-4169-7900-000000000000", - "db/ident": "logseq.property.asset/checksum" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "whiteboard", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Whiteboard", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1013-6984-5200-000000000000", - "db/ident": "logseq.class/Whiteboard" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "property", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Property", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "reference to large block title stored in remote object storage", - "block/order": "b1U", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Reference to large block title stored in remote object storage", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1044-8271-6500-000000000000", - "db/ident": "logseq.property.sync/large-title-object" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view sort groups desc", - "block/order": "b0n", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View sort groups DESC", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1081-4073-8700-000000000000", - "db/ident": "logseq.property.view/sort-groups-desc?" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "due", - "block/order": "b17", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Due", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1089-0805-4900-000000000000", - "db/ident": "logseq.property.fsrs/due" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "publishing public?", - "block/order": "b0Y", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Publishing Public?", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1094-6579-3900-000000000000", - "db/ident": "logseq.property/publishing-public?" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "an", - "block/page": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/parent": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/title": "purple", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1104-3848-5600-000000000000", - "db/ident": "logseq.property/color.purple" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "built in?", - "block/order": "a1", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Built in?", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1125-9581-6000-000000000000", - "db/ident": "logseq.property/built-in?" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "reaction target", - "block/order": "b1P", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Reaction target", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1127-5718-5000-000000000000", - "db/ident": "logseq.property.reaction/target" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "file type", - "block/order": "b0v", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "File Type", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1142-0830-9800-000000000000", - "db/ident": "logseq.property.asset/type" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "history block", - "block/order": "b1E", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "History block", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1142-5541-6000-000000000000", - "db/ident": "logseq.property.history/block" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "closed value property", - "block/order": "aI", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Closed value property", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1157-7928-1300-000000000000", - "db/ident": "block/closed-value-property" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0d", - "block/page": { - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - }, - "block/parent": { - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - }, - "block/title": "List View", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1164-8285-0200-000000000000", - "db/ident": "logseq.property.view/type.list" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "state", - "block/order": "b18", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "State", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1165-1650-8700-000000000000", - "db/ident": "logseq.property.fsrs/state" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "file size", - "block/order": "b0y", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "File Size", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1167-8621-9000-000000000000", - "db/ident": "logseq.property.asset/size" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "quote", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Quote", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1176-1666-1700-000000000000", - "db/ident": "logseq.class/Quote-block" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node references", - "block/order": "aF", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node references", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1214-4953-4900-000000000000", - "db/ident": "block/refs" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "choice exclusions", - "block/order": "ay", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Choice exclusions", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1233-5229-4600-000000000000", - "db/ident": "logseq.property/choice-exclusions" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "choice checkbox state", - "block/order": "aw", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Choice checkbox state", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1272-4228-6300-000000000000", - "db/ident": "logseq.property/choice-checkbox-state" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "task", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Task", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1282-1814-5700-000000000000", - "db/ident": "logseq.class/Task" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "cards", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Cards", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1284-2651-6700-000000000000", - "db/ident": "logseq.class/Cards" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "asset resize metadata", - "block/order": "b15", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Asset resize metadata", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1297-5230-5500-000000000000", - "db/ident": "logseq.property.asset/resize-metadata" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "comment", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Comment", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1323-0695-4000-000000000000", - "db/ident": "logseq.class/Comment" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "card", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Card", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1358-2811-0900-000000000000", - "db/ident": "logseq.class/Card" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "user name", - "block/order": "b19", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "User Name", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1360-0260-1600-000000000000", - "db/ident": "logseq.property.user/name" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "external url", - "block/order": "b0w", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "External URL", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1364-7751-6300-000000000000", - "db/ident": "logseq.property.asset/external-url" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "annotation image", - "block/order": "ap", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Annotation image", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1377-6700-9000-000000000000", - "db/ident": "logseq.property.pdf/hl-image" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "property value", - "block/order": "a8", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Property value", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1396-5248-6500-000000000000", - "db/ident": "logseq.property/value" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "gallery card width", - "block/order": "b0k", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Gallery card width", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1403-2963-9500-000000000000", - "db/ident": "logseq.property.view/gallery-card-width" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0R", - "block/page": { - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - }, - "block/parent": { - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - }, - "block/title": "Advance from completion", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1406-5331-0600-000000000000", - "db/ident": "logseq.property.repeat/repeat-type.dotted-plus" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node order", - "block/order": "aC", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node order", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1429-2824-3700-000000000000", - "db/ident": "block/order" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0K", - "block/page": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/parent": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/title": "Hour", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1438-8849-5400-000000000000", - "db/ident": "logseq.property.repeat/recur-unit.hour" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node created at", - "block/order": "aK", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node created at", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1440-0150-0000-000000000000", - "db/ident": "block/created-at" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "code", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Code", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1454-9866-4100-000000000000", - "db/ident": "logseq.class/Code-block" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "journal date", - "block/order": "aJ", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Journal date", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1457-4836-6000-000000000000", - "db/ident": "block/journal-day" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "page", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Page", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1484-3403-2900-000000000000", - "db/ident": "logseq.class/Page" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view ordered columns", - "block/order": "b0r", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View ordered columns", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1485-5871-0000-000000000000", - "db/ident": "logseq.property.table/ordered-columns" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0e", - "block/page": { - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - }, - "block/parent": { - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - }, - "block/title": "Gallery View", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1506-0511-2000-000000000000", - "db/ident": "logseq.property.view/type.gallery" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0J", - "block/page": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/parent": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/title": "Minute", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1513-6550-8500-000000000000", - "db/ident": "logseq.property.repeat/recur-unit.minute" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node updated at", - "block/order": "aL", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node updated at", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1516-5505-5100-000000000000", - "db/ident": "block/updated-at" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0O", - "block/page": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/parent": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/title": "Year", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1520-4385-2400-000000000000", - "db/ident": "logseq.property.repeat/recur-unit.year" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "title format", - "block/order": "av", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Title Format", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1536-4979-5400-000000000000", - "db/ident": "logseq.property.journal/title-format" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "property view context", - "block/order": "a5", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Property view context", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1547-3958-2800-000000000000", - "db/ident": "logseq.property/view-context" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "non ref type default value", - "block/order": "aQ", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Non ref type default value", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1595-7230-1400-000000000000", - "db/ident": "logseq.property/scalar-default-value" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "history property", - "block/order": "b1F", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "History property", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1600-4090-8200-000000000000", - "db/ident": "logseq.property.history/property" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b02", - "block/page": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/parent": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/title": "Todo", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1615-5853-7700-000000000000", - "db/ident": "logseq.property/status.todo" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "scheduled", - "block/order": "b0E", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Scheduled", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1644-5209-4300-000000000000", - "db/ident": "logseq.property/scheduled" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0S", - "block/page": { - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - }, - "block/parent": { - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - }, - "block/title": "Advance from scheduled", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1646-4063-5900-000000000000", - "db/ident": "logseq.property.repeat/repeat-type.plus" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "user email", - "block/order": "b1A", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "User Email", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1655-2060-6300-000000000000", - "db/ident": "logseq.property.user/email" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "recycle original page", - "block/order": "b1M", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Recycle original page", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1658-7897-9900-000000000000", - "db/ident": "logseq.property.recycle/original-page" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "gallery asset property", - "block/order": "b0h", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Gallery asset property", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1668-3468-9000-000000000000", - "db/ident": "logseq.property.view/gallery-asset-property" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view columns settings", - "block/order": "b0s", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View columns settings", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1675-5105-5500-000000000000", - "db/ident": "logseq.property.table/sized-columns" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "included references", - "block/order": "as", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Included references", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1680-5777-0300-000000000000", - "db/ident": "logseq.property.linked-references/includes" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "deadline", - "block/order": "b0C", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Deadline", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1685-9016-0400-000000000000", - "db/ident": "logseq.property/deadline" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view filters", - "block/order": "b0p", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View filters", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1702-3936-3300-000000000000", - "db/ident": "logseq.property.table/filters" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "template", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Template", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1720-8548-4600-000000000000", - "db/ident": "logseq.class/Template" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "aj", - "block/page": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/parent": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/title": "yellow", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1752-1030-0200-000000000000", - "db/ident": "logseq.property/color.yellow" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "agent session id", - "block/order": "b1Q", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Agent Session ID", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1783-0312-6200-000000000000", - "db/ident": "logseq.property.agent/session-id" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "gallery display properties", - "block/order": "b0i", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Gallery display properties", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1806-7066-8800-000000000000", - "db/ident": "logseq.property.view/gallery-display-properties" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "tags", - "block/order": "aA", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Tags", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1814-9483-4000-000000000000", - "db/ident": "block/tags" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b05", - "block/page": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/parent": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/title": "Done", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1827-5820-8200-000000000000", - "db/ident": "logseq.property/status.done" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b09", - "block/page": { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - }, - "block/parent": { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - }, - "block/title": "Medium", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1829-3222-7800-000000000000", - "db/ident": "logseq.property/priority.medium" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "am", - "block/page": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/parent": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/title": "blue", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1836-0512-4100-000000000000", - "db/ident": "logseq.property/color.blue" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b03", - "block/page": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/parent": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/title": "Doing", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1840-1229-0800-000000000000", - "db/ident": "logseq.property/status.doing" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "property public?", - "block/order": "a4", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Property public?", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1843-0851-4900-000000000000", - "db/ident": "logseq.property/public?" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "image width", - "block/order": "b0z", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Image width", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1857-8658-3900-000000000000", - "db/ident": "logseq.property.asset/width" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "heading", - "block/order": "ae", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Heading", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1858-7494-1500-000000000000", - "db/ident": "logseq.property/heading" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "repeating checked property", - "block/order": "b0V", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Repeating Checked Property", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1866-3655-5300-000000000000", - "db/ident": "logseq.property.repeat/checked-property" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "property position", - "block/order": "a6", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Property position", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1869-2008-6400-000000000000", - "db/ident": "logseq.property/ui-position" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b04", - "block/page": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/parent": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/title": "In Review", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1870-0014-4300-000000000000", - "db/ident": "logseq.property/status.in-review" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node links to", - "block/order": "aG", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node links to", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1872-3999-9300-000000000000", - "db/ident": "block/link" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node repeats?", - "block/order": "b0P", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node Repeats?", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1908-1217-8900-000000000000", - "db/ident": "logseq.property.repeat/repeated?" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0c", - "block/page": { - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - }, - "block/parent": { - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - }, - "block/title": "Table View", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1942-5424-0000-000000000000", - "db/ident": "logseq.property.view/type.table" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "journal", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Journal", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1979-7410-8100-000000000000", - "db/ident": "logseq.class/Journal" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "repeating type", - "block/order": "b0Q", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Repeating type", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "al", - "block/page": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/parent": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/title": "green", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1992-2016-2600-000000000000", - "db/ident": "logseq.property/color.green" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0B", - "block/page": { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - }, - "block/parent": { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - }, - "block/title": "Urgent", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1996-4346-6700-000000000000", - "db/ident": "logseq.property/priority.urgent" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "deleted by", - "block/order": "b1K", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Deleted by", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-1998-0431-1200-000000000000", - "db/ident": "logseq.property/deleted-by-ref" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "gallery card size", - "block/order": "b0j", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Gallery card size", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2012-8168-3300-000000000000", - "db/ident": "logseq.property.view/gallery-card-size" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "math", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Math", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2038-9631-2100-000000000000", - "db/ident": "logseq.class/Math-block" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "published url", - "block/order": "b0Z", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Published URL", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2045-1825-0100-000000000000", - "db/ident": "logseq.property.publish/published-url" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "hide empty value", - "block/order": "aX", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Hide empty value", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2062-3258-9900-000000000000", - "db/ident": "logseq.property/hide-empty-value" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0N", - "block/page": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/parent": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/title": "Month", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2073-3937-9700-000000000000", - "db/ident": "logseq.property.repeat/recur-unit.month" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view sorting", - "block/order": "b0o", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View sorting", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2081-0259-4000-000000000000", - "db/ident": "logseq.property.table/sorting" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b08", - "block/page": { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - }, - "block/parent": { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - }, - "block/title": "Low", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2107-4537-4800-000000000000", - "db/ident": "logseq.property/priority.low" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "last visit page", - "block/order": "b12", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Last visit page", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2107-8035-3500-000000000000", - "db/ident": "logseq.property.asset/last-visit-page" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "alias", - "block/order": "a9", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Alias", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2112-6446-9900-000000000000", - "db/ident": "block/alias" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "tag properties", - "block/order": "aT", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Tag Properties", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2123-7120-5000-000000000000", - "db/ident": "logseq.property.class/properties" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0M", - "block/page": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/parent": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/title": "Week", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2130-9244-4900-000000000000", - "db/ident": "logseq.property.repeat/recur-unit.week" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "page tags", - "block/order": "ab", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Page Tags", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2133-5311-8500-000000000000", - "db/ident": "logseq.property/page-tags" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node collapsed?", - "block/order": "aD", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node collapsed?", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2140-2109-9100-000000000000", - "db/ident": "block/collapsed?" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "commented blocks", - "block/order": "au", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Commented blocks", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2143-9561-0900-000000000000", - "db/ident": "logseq.property.comments/blocks" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view type", - "block/order": "b0b", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View Type", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2182-3760-7000-000000000000", - "db/ident": "logseq.property.view/type" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "assignee", - "block/order": "b0W", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Assignee", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2190-1503-4000-000000000000", - "db/ident": "logseq.property/assignee" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "query", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Query", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2324-8016-6000-000000000000", - "db/ident": "logseq.class/Query" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "priority", - "block/order": "b07", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Priority", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "history scalar value", - "block/order": "b1H", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "History scalar value", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2393-3777-5000-000000000000", - "db/ident": "logseq.property.history/scalar-value" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "excluded references", - "block/order": "at", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Excluded references", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2426-7588-9000-000000000000", - "db/ident": "logseq.property.linked-references/excludes" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "comments", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Comments", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2556-9161-5000-000000000000", - "db/ident": "logseq.class/Comments" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "hide from node", - "block/order": "aZ", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Hide from Node", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2610-3727-0000-000000000000", - "db/ident": "logseq.property.class/hide-from-node" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "table view pinned columns", - "block/order": "b0t", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Table view pinned columns", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2673-7513-8000-000000000000", - "db/ident": "logseq.property.table/pinned-columns" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "root tag", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Root Tag", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2737-8382-7000-000000000000", - "db/ident": "logseq.class/Root" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "enable bidirectional properties", - "block/order": "aV", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Enable bidirectional properties", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-2917-8613-8000-000000000000", - "db/ident": "logseq.property.class/enable-bidirectional?" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "properties displayed as checkbox", - "block/order": "az", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Properties displayed as checkbox", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-3215-3256-9000-000000000000", - "db/ident": "logseq.property/checkbox-display-properties" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "ls-type", - "block/order": "ag", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "ls-type", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-3269-7934-5000-000000000000", - "db/ident": "logseq.property/ls-type" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "image height", - "block/order": "b10", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Image height", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-3306-1650-4000-000000000000", - "db/ident": "logseq.property.asset/height" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "description", - "block/order": "aN", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Description", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-3362-3620-0000-000000000000", - "db/ident": "logseq.property/description" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "this view belongs to", - "block/order": "b0u", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "This view belongs to", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-3627-4319-0000-000000000000", - "db/ident": "logseq.property/view-for" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0L", - "block/page": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/parent": { - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - "block/title": "Day", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-3924-1785-8000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit.day" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "external file name", - "block/order": "b0x", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "External file name", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-3995-2972-0000-000000000000", - "db/ident": "logseq.property.asset/external-file-name" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "ak", - "block/page": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/parent": { - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - "block/title": "red", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-4136-2216-2000-000000000000", - "db/ident": "logseq.property/color.red" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "user avatar", - "block/order": "b1B", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "User Avatar", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-4165-4885-8000-000000000000", - "db/ident": "logseq.property.user/avatar" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "apply template to tags", - "block/order": "b1T", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Apply template to tags", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-4291-2432-2000-000000000000", - "db/ident": "logseq.property/template-applied-to" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "gallery card height", - "block/order": "b0l", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Gallery card height", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-4342-2083-2000-000000000000", - "db/ident": "logseq.property.view/gallery-card-height" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node display type", - "block/order": "aM", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node Display Type", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-4424-4618-9000-000000000000", - "db/ident": "logseq.property.node/display-type" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "excluded from graph view?", - "block/order": "b0a", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Excluded from Graph view?", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-4524-3306-5000-000000000000", - "db/ident": "logseq.property/exclude-from-graph-view" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "recycle original parent", - "block/order": "b1L", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Recycle original parent", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-4970-0399-4000-000000000000", - "db/ident": "logseq.property.recycle/original-parent" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "pdf annotation", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "PDF Annotation", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-5049-5962-0000-000000000000", - "db/ident": "logseq.class/Pdf-annotation" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "history value", - "block/order": "b1G", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "History value", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-5131-3603-7000-000000000000", - "db/ident": "logseq.property.history/ref-value" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "background color", - "block/order": "ad", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Background color", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-5191-2660-6000-000000000000", - "db/ident": "logseq.property/background-color" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "tag", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Tag", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "annotation data", - "block/order": "aq", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Annotation data", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-5458-2940-2000-000000000000", - "db/ident": "logseq.property.pdf/hl-value" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0A", - "block/page": { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - }, - "block/parent": { - "block/uuid": "00000002-2392-2841-1000-000000000000", - "db/ident": "logseq.property/priority" - }, - "block/title": "High", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-5672-2766-8000-000000000000", - "db/ident": "logseq.property/priority.high" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "icon", - "block/order": "b0X", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Icon", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-5891-2328-5000-000000000000", - "db/ident": "logseq.property/icon" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "bidirectional property title", - "block/order": "aU", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Bidirectional property title", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-6050-5418-7000-000000000000", - "db/ident": "logseq.property.class/bidirectional-property-title" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "list type", - "block/order": "ar", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "List type", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-6078-1711-1000-000000000000", - "db/ident": "logseq.property/order-list-type" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view sort groups by", - "block/order": "b0m", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View sort groups by", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-6253-4002-1000-000000000000", - "db/ident": "logseq.property.view/sort-groups-by-property" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "annotation color", - "block/order": "ai", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Annotation color", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-6747-9388-7000-000000000000", - "db/ident": "logseq.property.pdf/hl-color" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "hide this property or page", - "block/order": "a2", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Hide this property or page", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-6836-5746-0000-000000000000", - "db/ident": "logseq.property/hide?" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "deleted at", - "block/order": "b1J", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Deleted at", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-6852-1375-1000-000000000000", - "db/ident": "logseq.property/deleted-at" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "repeating recur unit", - "block/order": "b0I", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Repeating recur unit", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-6903-0624-7000-000000000000", - "db/ident": "logseq.property.repeat/recur-unit" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node title", - "block/order": "aH", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node title", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-7104-4568-4000-000000000000", - "db/ident": "block/title" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "asset alignment", - "block/order": "b16", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Asset alignment", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-7135-0412-8000-000000000000", - "db/ident": "logseq.property.asset/align" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b01", - "block/page": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/parent": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/title": "Backlog", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-7233-3491-0000-000000000000", - "db/ident": "logseq.property/status.backlog" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b0T", - "block/page": { - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - }, - "block/parent": { - "block/uuid": "00000002-1984-2972-8100-000000000000", - "db/ident": "logseq.property.repeat/repeat-type" - }, - "block/title": "Advance from scheduled, skip to future", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-7441-9615-3000-000000000000", - "db/ident": "logseq.property.repeat/repeat-type.double-plus" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "extends", - "block/order": "aR", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Extends", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-7475-9380-3000-000000000000", - "db/ident": "logseq.property.class/extends" - }, - { - "block/closed-value-property": [ - { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - } - ], - "block/created-at": "$normalizedEpochMs", - "block/order": "b06", - "block/page": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/parent": { - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - "block/title": "Canceled", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-7526-4326-2000-000000000000", - "db/ident": "logseq.property/status.canceled" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "annotation page", - "block/order": "ao", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Annotation page", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-7532-8459-6000-000000000000", - "db/ident": "logseq.property.pdf/hl-page" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "choice classes", - "block/order": "ax", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Choice classes", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-7629-6621-9000-000000000000", - "db/ident": "logseq.property/choice-classes" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "asset", - "block/tags": [ - { - "block/uuid": "00000002-5389-0208-3000-000000000000", - "db/ident": "logseq.class/Tag" - } - ], - "block/title": "Asset", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-7975-0297-0000-000000000000", - "db/ident": "logseq.class/Asset" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "enable property history", - "block/order": "b1C", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Enable property history", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8058-5960-2000-000000000000", - "db/ident": "logseq.property/enable-history?" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view group by property", - "block/order": "b0g", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View group by property", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8092-1623-6000-000000000000", - "db/ident": "logseq.property.view/group-by-property" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node page", - "block/order": "aE", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node page", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8223-1410-8000-000000000000", - "db/ident": "block/page" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "repeating temporal property", - "block/order": "b0U", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Repeating Temporal Property", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8346-1078-4000-000000000000", - "db/ident": "logseq.property.repeat/temporal-property" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "property type", - "block/order": "a0", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Property type", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8384-2404-0000-000000000000", - "db/ident": "logseq.property/type" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node created by", - "block/order": "b1I", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node created by", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8544-3390-8000-000000000000", - "db/ident": "logseq.property/created-by-ref" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "code mode", - "block/order": "aO", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Code Mode", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8578-9716-5000-000000000000", - "db/ident": "logseq.property.code/lang" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "created from property", - "block/order": "a3", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Created from property", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8618-9226-7000-000000000000", - "db/ident": "logseq.property/created-from-property" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "recycle original order", - "block/order": "b1N", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Recycle original order", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8699-2537-0000-000000000000", - "db/ident": "logseq.property.recycle/original-order" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "repeating recur frequency", - "block/order": "b0G", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Repeating recur frequency", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8716-1592-2000-000000000000", - "db/ident": "logseq.property.repeat/recur-frequency" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "asset", - "block/order": "af", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Asset", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8768-5679-0000-000000000000", - "db/ident": "logseq.property/asset" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "default value", - "block/order": "aP", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Default value", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-8920-7966-2000-000000000000", - "db/ident": "logseq.property/default-value" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "status", - "block/order": "b00", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Status", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9072-1685-3000-000000000000", - "db/ident": "logseq.property/status" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "property classes", - "block/order": "a7", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Property classes", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9137-5048-6000-000000000000", - "db/ident": "logseq.property/classes" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "node parent", - "block/order": "aB", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Node parent", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9183-0906-4000-000000000000", - "db/ident": "block/parent" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view feature type", - "block/order": "b0f", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View Feature Type", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9391-4187-1000-000000000000", - "db/ident": "logseq.property.view/feature-type" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "query", - "block/order": "aa", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Query", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9741-4126-0000-000000000000", - "db/ident": "logseq.property/query" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "view hidden columns", - "block/order": "b0q", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "View hidden columns", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9750-5719-2000-000000000000", - "db/ident": "logseq.property.table/hidden-columns" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "used template", - "block/order": "b1S", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Used template", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9803-6990-6000-000000000000", - "db/ident": "logseq.property/used-template" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "reaction emoji", - "block/order": "b1O", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Reaction emoji", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9877-5864-5000-000000000000", - "db/ident": "logseq.property.reaction/emoji-id" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "file remote metadata", - "block/order": "b13", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "File remote metadata", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9907-5046-9000-000000000000", - "db/ident": "logseq.property.asset/remote-metadata" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "annotation type", - "block/order": "ah", - "block/tags": [ - { - "block/uuid": "00000002-1038-7670-4800-000000000000", - "db/ident": "logseq.class/Property" - } - ], - "block/title": "Annotation type", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000002-9984-3783-2000-000000000000", - "db/ident": "logseq.property.pdf/hl-type" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "$$$favorites", - "block/tags": [ - { - "block/uuid": "00000002-1484-3403-2900-000000000000", - "db/ident": "logseq.class/Page" - } - ], - "block/title": "$$$favorites", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1018-5888-4100-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "aY", - "block/page": { - "block/uuid": "00000002-2062-3258-9900-000000000000", - "db/ident": "logseq.property/hide-empty-value" - }, - "block/parent": { - "block/uuid": "00000002-2062-3258-9900-000000000000", - "db/ident": "logseq.property/hide-empty-value" - }, - "block/title": "Hides a property's value on any node when empty e.g. when a property appears on a node through a tag.", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1118-8585-8000-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "b1R", - "block/page": { - "block/uuid": "00000002-1783-0312-6200-000000000000", - "db/ident": "logseq.property.agent/session-id" - }, - "block/parent": { - "block/uuid": "00000002-1783-0312-6200-000000000000", - "db/ident": "logseq.property.agent/session-id" - }, - "block/title": "Stores the AgentBridge session ID for a routed task.", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1209-4784-1500-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "ac", - "block/page": { - "block/uuid": "00000002-2133-5311-8500-000000000000", - "db/ident": "logseq.property/page-tags" - }, - "block/parent": { - "block/uuid": "00000002-2133-5311-8500-000000000000", - "db/ident": "logseq.property/page-tags" - }, - "block/title": "Provides a way for a page to associate to another page i.e. backward compatible tagging.", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1223-8671-8000-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "library", - "block/tags": [ - { - "block/uuid": "00000002-1484-3403-2900-000000000000", - "db/ident": "logseq.class/Page" - } - ], - "block/title": "Library", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1294-7765-6000-000000000000" - }, - { - "block/uuid": "00000004-1335-6485-2300-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "b0D", - "block/page": { - "block/uuid": "00000002-1685-9016-0400-000000000000", - "db/ident": "logseq.property/deadline" - }, - "block/parent": { - "block/uuid": "00000002-1685-9016-0400-000000000000", - "db/ident": "logseq.property/deadline" - }, - "block/title": "Use it to finish something at a specific date(time).", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1356-3664-2200-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "b1D", - "block/page": { - "block/uuid": "00000002-8058-5960-2000-000000000000", - "db/ident": "logseq.property/enable-history?" - }, - "block/parent": { - "block/uuid": "00000002-8058-5960-2000-000000000000", - "db/ident": "logseq.property/enable-history?" - }, - "block/title": "Records history anytime a property's value changes on a node.", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1438-1481-0000-000000000000" - }, - { - "block/uuid": "00000004-1595-0218-3700-000000000000", - "db/ident": "logseq.property/empty-placeholder" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "b0H", - "block/page": { - "block/uuid": "00000002-8716-1592-2000-000000000000", - "db/ident": "logseq.property.repeat/recur-frequency" - }, - "block/parent": { - "block/uuid": "00000002-8716-1592-2000-000000000000", - "db/ident": "logseq.property.repeat/recur-frequency" - }, - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1654-1034-2600-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "contents", - "block/tags": [ - { - "block/uuid": "00000002-1484-3403-2900-000000000000", - "db/ident": "logseq.class/Page" - } - ], - "block/title": "Contents", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1690-2597-3200-000000000000" - }, - { - "block/uuid": "00000004-1713-4660-3800-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "aW", - "block/page": { - "block/uuid": "00000002-2917-8613-8000-000000000000", - "db/ident": "logseq.property.class/enable-bidirectional?" - }, - "block/parent": { - "block/uuid": "00000002-2917-8613-8000-000000000000", - "db/ident": "logseq.property.class/enable-bidirectional?" - }, - "block/title": "When enabled, this tag will show reverse nodes that link to the current node via properties.", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1830-0481-2500-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "$$$views", - "block/tags": [ - { - "block/uuid": "00000002-1484-3403-2900-000000000000", - "db/ident": "logseq.class/Page" - } - ], - "block/title": "$$$views", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-1906-3437-5800-000000000000" - }, - { - "block/uuid": "00000004-2116-2824-5200-000000000000" - }, - { - "block/uuid": "00000004-3919-3813-3000-000000000000" - }, - { - "block/uuid": "00000004-4049-4381-0000-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "aS", - "block/page": { - "block/uuid": "00000002-7475-9380-3000-000000000000", - "db/ident": "logseq.property.class/extends" - }, - "block/parent": { - "block/uuid": "00000002-7475-9380-3000-000000000000", - "db/ident": "logseq.property.class/extends" - }, - "block/title": "This enables tags to inherit properties from other tags", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-4485-6574-6000-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "b14", - "block/page": { - "block/uuid": "00000002-9907-5046-9000-000000000000", - "db/ident": "logseq.property.asset/remote-metadata" - }, - "block/parent": { - "block/uuid": "00000002-9907-5046-9000-000000000000", - "db/ident": "logseq.property.asset/remote-metadata" - }, - "block/title": "Metadata of asset in remote storage", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-5450-2102-9000-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "recycle", - "block/tags": [ - { - "block/uuid": "00000002-1484-3403-2900-000000000000", - "db/ident": "logseq.class/Page" - } - ], - "block/title": "Recycle", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-7238-1304-3000-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "quick add", - "block/tags": [ - { - "block/uuid": "00000002-1484-3403-2900-000000000000", - "db/ident": "logseq.class/Page" - } - ], - "block/title": "Quick add", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-7336-8251-3000-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/order": "b0F", - "block/page": { - "block/uuid": "00000002-1644-5209-4300-000000000000", - "db/ident": "logseq.property/scheduled" - }, - "block/parent": { - "block/uuid": "00000002-1644-5209-4300-000000000000", - "db/ident": "logseq.property/scheduled" - }, - "block/title": "Use it to plan something to start at a specific date(time).", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "00000004-9817-6380-0000-000000000000" - }, - { - "block/created-at": "$normalizedEpochMs", - "block/name": "oracle page", - "block/refs": [ - { - "block/uuid": "00000002-1484-3403-2900-000000000000", - "db/ident": "logseq.class/Page" - }, - { - "block/uuid": "00000002-1814-9483-4000-000000000000", - "db/ident": "block/tags" - } - ], - "block/tags": [ - { - "block/uuid": "00000002-1484-3403-2900-000000000000", - "db/ident": "logseq.class/Page" - } - ], - "block/title": "Oracle Page", - "block/tx-id": "$normalizedTransactionId", - "block/updated-at": "$normalizedEpochMs", - "block/uuid": "11111111-1111-4111-8111-111111111111" - } - ] -} diff --git a/logseq_db_worker/test/fixtures/sync/encrypted-catalog-template.json b/logseq_db_worker/test/fixtures/sync/encrypted-catalog-template.json deleted file mode 100644 index 59e0958..0000000 --- a/logseq_db_worker/test/fixtures/sync/encrypted-catalog-template.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "baseUrl": "__BASE_URL__", - "graphs": [ - { - "encrypted": true, - "graphId": "__GRAPH_ID__", - "name": "Encrypted Offline Notes", - "schema": { "exact": true, "major": 65, "minor": 33 } - } - ], - "mirrors": [ - { "graphId": "__GRAPH_ID__", "status": "ready" } - ], - "selectedGraph": "__GRAPH_ID__", - "userId": "__USER_ID__", - "version": 1 -} diff --git a/logseq_db_worker/test/test_admission.ml b/logseq_db_worker/test/test_admission.ml deleted file mode 100644 index 4ec8f27..0000000 --- a/logseq_db_worker/test/test_admission.ml +++ /dev/null @@ -1,86 +0,0 @@ -module T = Logseq_db_worker_test_support.Test_support -module Admission = Logseq_db_storage.Admission - -let uuid = - match - Logseq_db_types.Graph_types.Uuid.of_string "11111111-1111-4111-8111-111111111111" - with - | Ok uuid -> uuid - | Error message -> failwith message -;; - -let observed - ?(major = 65) - ?(minor = 33) - ?(remote_flag = Admission.Absent) - ?rtc_graph_uuid - ?client_ops_graph_uuid - ?(codec_lossless = true) - ?(required_schema_present = true) - () - = - Admission. - { schema = Logseq_db_types.Graph_types.{ major; minor } - ; local_graph_uuid = Some uuid - ; remote_flag - ; rtc_graph_uuid - ; client_ops_graph_uuid - ; codec_lossless - ; required_schema_present - } -;; - -let expect_ok observed () = - match Admission.admit ~target:Local_target observed with - | Ok _ -> () - | Error _ -> T.fail "expected graph admission" -;; - -let expect_error expected observed () = - match Admission.admit ~target:Local_target observed with - | Error actual when actual = expected -> () - | _ -> T.fail "unexpected admission result" -;; - -let () = - T.run - "admission" - [ T.case "schema 65.33 is admitted" (expect_ok (observed ())) - ; T.case - "newer minor schema is admitted when lossless" - (expect_ok (observed ~minor:34 ())) - ; T.case - "newer major schema is admitted when lossless" - (expect_ok (observed ~major:66 ~minor:0 ())) - ; T.case - "schema 65.32 is rejected" - (expect_error Admission.Unsupported_schema (observed ~minor:32 ())) - ; T.case - "graph-remote true is rejected" - (expect_error Admission.Remote_graph (observed ~remote_flag:(Boolean true) ())) - ; T.case - "non-boolean remote flag is ambiguous" - (expect_error - Admission.Ambiguous_sync_state - (observed ~remote_flag:(Malformed "yes") ())) - ; T.case - "remote flag false with local history is admitted" - (expect_ok (observed ~remote_flag:(Boolean false) ())) - ; T.case - "RTC graph UUID without remote flag is ambiguous" - (expect_error Admission.Ambiguous_sync_state (observed ~rtc_graph_uuid:uuid ())) - ; T.case - "client-ops graph UUID is ambiguous" - (expect_error - Admission.Ambiguous_sync_state - (observed ~client_ops_graph_uuid:uuid ())) - ; T.case - "unsupported reachable value is rejected" - (expect_error Admission.Unsupported_value (observed ~codec_lossless:false ())) - ; T.case - "missing required schema is rejected" - (expect_error - Admission.Corrupt_storage - (observed ~required_schema_present:false ())) - ] -;; diff --git a/logseq_db_worker/test/test_codec.ml b/logseq_db_worker/test/test_codec.ml deleted file mode 100644 index 08a2ff0..0000000 --- a/logseq_db_worker/test/test_codec.ml +++ /dev/null @@ -1,186 +0,0 @@ -module T = Logseq_db_worker_test_support.Test_support -module Codec = Logseq_db_storage.Logseq_sqlite_codec - -let oracle_root_content () = - let open Yojson.Safe.Util in - T.read_json (T.fixture "storage/logseq-65.33-create-page.json") - |> member "rows" - |> to_list - |> List.find (fun row -> row |> member "addr" |> to_int = 0) - |> member "content" - |> to_string -;; - -let round_trip name value () = - match Codec.encode_value value with - | Error _ -> T.fail "%s did not encode" name - | Ok encoded -> - (match Codec.decode_value encoded with - | Error _ -> T.fail "%s did not decode" name - | Ok decoded -> - T.require - (Datascript.Util.value_equal value decoded) - "%s changed on round trip" - name) -;; - -let round_trip_payload name payload () = - match Codec.encode_storage_payload payload with - | Error _ -> T.fail "%s did not encode" name - | Ok encoded -> - (match Codec.decode_storage_payload encoded with - | Error _ -> T.fail "%s did not decode" name - | Ok _ -> ()) -;; - -let sample_datom = - Datascript. - { e = 42; a = ":block/title"; v = String "sample"; tx = 536870913; added = true } -;; - -let sample_schema_attr = - Datascript. - { cardinality = Many - ; unique = Some Identity - ; indexed = true - ; is_component = false - ; no_history = false - ; doc = Some "sample" - ; value_type = Some StringType - ; tuple_attrs = None - ; tuple_types = None - } -;; - -let cases = - [ T.case "round trip null" (round_trip "null" Datascript.Nil) - ; T.case "round trip boolean" (round_trip "boolean" (Bool true)) - ; T.case "round trip integer" (round_trip "integer" (Int 42)) - ; T.case "round trip int64" (round_trip "int64" (Int 4_294_967_296)) - ; T.case "round trip floating point" (round_trip "float" (Float 1.25)) - ; T.case "round trip string" (round_trip "string" (String "你好")) - ; T.case "round trip keyword" (round_trip "keyword" (Keyword "block/title")) - ; T.case "round trip symbol" (round_trip "symbol" (Symbol "x")) - ; T.case - "round trip UUID" - (round_trip "UUID" (Uuid "11111111-1111-4111-8111-111111111111")) - ; T.case "round trip instant" (round_trip "instant" (Instant 1_704_067_200_000)) - ; T.case "round trip regex" (round_trip "regex" (Regex "a.*")) - ; T.case "round trip list" (round_trip "list" (List [ Int 1; String "x" ])) - ; T.case "round trip array" (round_trip "array" (Vector [ Bool false; Int 2 ])) - ; T.case "round trip map" (round_trip "map" (Map [ Keyword "a", Int 1 ])) - ; T.case "round trip set" (round_trip "set" (Set [ String "a"; String "b" ])) - ; T.case "round trip tuple" (round_trip "tuple" (Vector [ String "x"; Nil ])) - ; T.case "round trip reference" (round_trip "reference" (Ref 42)) - ; T.case - "round trip DataScript datom" - (round_trip_payload "tail datom" (Storage_tail [ [ sample_datom ] ])) - ; T.case - "round trip schema map" - (round_trip_payload - "schema" - (Storage_root - { storage_schema = [ ":block/title", sample_schema_attr ] - ; storage_max_eid = 42 - ; storage_max_tx = 536870913 - ; storage_eavt = "10" - ; storage_aevt = "11" - ; storage_avet = "12" - ; storage_duplicate_datoms = [] - ; storage_max_addr = 12 - ; storage_branching_factor = 32 - ; storage_ref_type = Persistent_sorted_set.Strong - })) - ; T.case - "round trip root metadata" - (round_trip_payload - "root" - (Storage_root - { storage_schema = [] - ; storage_max_eid = 1 - ; storage_max_tx = 2 - ; storage_eavt = "10" - ; storage_aevt = "11" - ; storage_avet = "12" - ; storage_duplicate_datoms = [ sample_datom ] - ; storage_max_addr = 12 - ; storage_branching_factor = 32 - ; storage_ref_type = Persistent_sorted_set.Weak - })) - ; T.case - "round trip tail groups" - (round_trip_payload "tail" (Storage_tail [ [ sample_datom ]; [] ])) - ; T.case - "round trip persistent sorted-set node" - (round_trip_payload - "node" - (Storage_node (Persistent_sorted_set.Branch ([ sample_datom ], [ "20"; "21" ])))) - ; T.case "physical node stores child addresses in addresses column" (fun () -> - let payload = - Datascript.Storage_node - (Persistent_sorted_set.Branch ([ sample_datom ], [ "20"; "21" ])) - in - match Codec.encode_physical_payload payload with - | Error _ -> T.fail "physical node did not encode" - | Ok (content, addresses) -> - T.require (addresses = [ "20"; "21" ]) "child addresses not split"; - T.require (not (String.equal content "")) "empty node content"; - (match Codec.decode_physical_payload ~content ~addresses with - | Ok (Datascript.Storage_node (Persistent_sorted_set.Branch (_, restored))) -> - T.require (restored = addresses) "child addresses not restored" - | _ -> T.fail "physical branch did not decode")) - ; T.case "decode official Logseq root index metadata" (fun () -> - match Codec.decode_root_index_metadata (oracle_root_content ()) with - | Error (Codec.Unsupported_tag tag) -> - T.fail "official root metadata has unsupported tag %s" tag - | Error (Malformed_transit message | Malformed_storage_payload message) -> - T.fail "official root metadata did not decode: %s" message - | Error (Out_of_range_number value) -> - T.fail "official root metadata has out-of-range number %s" value - | Ok metadata -> - T.require (metadata.eavt = { count = 2384; shift = 2 }) "wrong EAVT metadata"; - T.require (metadata.aevt = { count = 2384; shift = 2 }) "wrong AEVT metadata"; - T.require (metadata.avet = { count = 2064; shift = 2 }) "wrong AVET metadata") - ; T.case "decode official Logseq root payload" (fun () -> - match - Codec.decode_physical_payload ~content:(oracle_root_content ()) ~addresses:[] - with - | Ok (Datascript.Storage_root root) -> - T.require - (List.mem_assoc "db/ident" root.storage_schema) - "official root schema lost db/ident" - | Error (Codec.Unsupported_tag tag) -> - T.fail "official root payload has unsupported tag %s" tag - | Error (Malformed_transit message | Malformed_storage_payload message) -> - T.fail "official root payload did not decode: %s" message - | Error (Out_of_range_number value) -> - T.fail "official root payload has out-of-range number %s" value - | Ok _ -> T.fail "official root row is not a storage root") - ; T.case "reject unknown Transit tag" (fun () -> - match Codec.decode_value "[\"~#unknown\",\"x\"]" with - | Error (Unsupported_tag "unknown") -> () - | _ -> T.fail "unknown tag was not rejected") - ; T.case "reject out-of-range number" (fun () -> - match Codec.decode_value "\"~n999999999999999999999999\"" with - | Error (Out_of_range_number _) -> () - | _ -> T.fail "out-of-range integer was not rejected") - ; T.case "reject malformed address JSON" (fun () -> - match Codec.decode_storage_payload "{\"~:keys\":[],\"~:children\":[true]}" with - | Error (Malformed_storage_payload _) -> () - | _ -> T.fail "malformed address was not rejected") - ; T.case "reject malformed root" (fun () -> - match Codec.decode_storage_payload "{\"~:schema\":{}}" with - | Error (Malformed_storage_payload _) -> () - | _ -> T.fail "malformed root was not rejected") - ; T.case "reject malformed tail" (fun () -> - match Codec.decode_storage_payload "[true]" with - | Error (Malformed_storage_payload _) -> () - | _ -> T.fail "malformed tail was not rejected") - ; T.case "reject lossy value" (fun () -> - match Codec.decode_value "[\"~#r\",\"https://example.com\"]" with - | Error (Unsupported_tag "r") -> () - | _ -> T.fail "lossy URI coercion was not rejected") - ] -;; - -let () = T.run "codec" cases diff --git a/logseq_db_worker/test/test_synced_config_admission.ml b/logseq_db_worker/test/test_synced_config_admission.ml deleted file mode 100644 index 8bb3762..0000000 --- a/logseq_db_worker/test/test_synced_config_admission.ml +++ /dev/null @@ -1,100 +0,0 @@ -module T = Logseq_db_worker_test_support.Test_support -module Admission = Logseq_db_storage.Admission -module Config = Logseq_db_worker.Config -module Graph_types = Logseq_db_types.Graph_types - -let uuid value = - match Graph_types.Uuid.of_string value with - | Ok uuid -> uuid - | Error message -> T.fail "%s" message -;; - -let graph_id = uuid "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa" -let other_graph_id = uuid "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb" -let local_graph_id = uuid "cccccccc-cccc-4ccc-8ccc-cccccccccccc" - -let internal_target_rejection_case () = - let base target = - `Assoc - [ "applicationSupportDirectory", `String "/tmp/logseq-journal-support" - ; "target", target - ; "compatibilityProfile", `String "logseq-65.33-or-newer" - ; "responseBudgetBytes", `Int 262_144 - ; "defaultPageSize", `Int 50 - ] - in - let reject label target = - match Config.of_yojson (base target) with - | Error _ -> () - | Ok _ -> T.fail "%s was accepted" label - in - reject - "internal synced mirror" - (`Assoc - [ "kind", `String ("synced" ^ "Mirror") - ; "graphId", `String (Graph_types.Uuid.to_string graph_id) - ; "graphName", `String "Notes" - ; "graphDir", `String "/tmp/Notes" - ; "databasePath", `String "/tmp/Notes/db.sqlite" - ; ( "checkpoint" - , `Assoc - [ "appliedServerT", `Int 41 - ; "checksum", `String "0123456789abcdef" - ; "schemaMajor", `Int 65 - ; "schemaMinor", `Int 33 - ; "status", `String "active" - ; "lastError", `Null - ] ) - ]) -;; - -let observed ?(remote_flag = Admission.Boolean true) ?(rtc_graph_uuid = Some graph_id) () = - Admission. - { schema = Graph_types.{ major = 65; minor = 33 } - ; local_graph_uuid = Some local_graph_id - ; remote_flag - ; rtc_graph_uuid - ; client_ops_graph_uuid = None - ; codec_lossless = true - ; required_schema_present = true - } -;; - -let synced_admission_case () = - match Admission.admit ~target:(Synced_target graph_id) (observed ()) with - | Error _ -> T.fail "matching upstream remote identity was rejected" - | Ok facts -> - T.require (List.mem Graph_types.Remote_flag_true facts) "remote flag fact is missing"; - T.require - (List.mem (Graph_types.Synced_graph_identity graph_id) facts) - "synced graph identity fact is missing" -;; - -let synced_admission_rejection_case () = - let reject label observed = - match Admission.admit ~target:(Synced_target graph_id) observed with - | Error _ -> () - | Ok _ -> T.fail "%s was admitted" label - in - reject "missing remote flag" (observed ~remote_flag:Absent ()); - reject "false remote flag" (observed ~remote_flag:(Boolean false) ()); - reject "missing RTC graph identity" (observed ~rtc_graph_uuid:None ()); - reject - "mismatched RTC graph identity" - (observed ~rtc_graph_uuid:(Some other_graph_id) ()); - match Admission.admit ~target:Local_target (observed ()) with - | Error Admission.Remote_graph -> () - | Error _ -> T.fail "local target returned the wrong remote identity error" - | Ok _ -> T.fail "local target admitted a remote graph" -;; - -let () = - T.run - "synced config and admission" - [ T.case "reject internal synced mirror startup" internal_target_rejection_case - ; T.case "admit the matching upstream remote identity" synced_admission_case - ; T.case - "reject ambiguous synced and local identities" - synced_admission_rejection_case - ] -;; diff --git a/logseq_db_worker/tool/compare_canonical_graphs.ml b/logseq_db_worker/tool/compare_canonical_graphs.ml deleted file mode 100644 index 7630887..0000000 --- a/logseq_db_worker/tool/compare_canonical_graphs.ml +++ /dev/null @@ -1,129 +0,0 @@ -let fail format = - Printf.ksprintf - (fun message -> - prerr_endline message; - exit 1) - format -;; - -type mode = - | Pair of - { expected : string - ; actual : string - } - | Fixtures of string - -let parse_args () = - let rec loop expected actual fixtures index = - if index >= Array.length Sys.argv - then expected, actual, fixtures - else ( - match Sys.argv.(index) with - | "--expected" when index + 1 < Array.length Sys.argv -> - loop (Some Sys.argv.(index + 1)) actual fixtures (index + 2) - | "--actual" when index + 1 < Array.length Sys.argv -> - loop expected (Some Sys.argv.(index + 1)) fixtures (index + 2) - | "--fixtures" when index + 1 < Array.length Sys.argv -> - loop expected actual (Some Sys.argv.(index + 1)) (index + 2) - | argument -> fail "Unknown argument: %s" argument) - in - match loop None None None 1 with - | Some expected, Some actual, None -> Pair { expected; actual } - | None, None, Some fixtures -> Fixtures fixtures - | _ -> - fail - "Usage: compare_canonical_graphs (--expected FILE --actual FILE | --fixtures \ - DIRECTORY)" -;; - -let rec canonicalize = function - | `Assoc fields -> - `Assoc - (fields - |> List.map (fun (key, value) -> key, canonicalize value) - |> List.sort (fun (left, _) (right, _) -> String.compare left right)) - | `List values -> `List (List.map canonicalize values) - | value -> value -;; - -let projection path = - match Yojson.Safe.from_file path with - | `Assoc fields -> - (match List.assoc_opt "projection" fields with - | Some (`List values) -> List.map canonicalize values - | Some _ -> fail "%s has a non-array projection" path - | None -> fail "%s has no projection" path) - | _ -> fail "%s is not a canonical graph object" path -;; - -let difference left right = List.filter (fun value -> not (List.mem value right)) left -let json_list values = Yojson.Safe.pretty_to_string (`List values) - -let compare_pair expected_path actual_path = - let expected = projection expected_path in - let actual = projection actual_path in - if expected <> actual - then - fail - "Canonical graph mismatch.\nExpected-only (%s):\n%s\nActual-only (%s):\n%s" - expected_path - (json_list (difference expected actual)) - actual_path - (json_list (difference actual expected)) -;; - -let pinned_logseq_commit = "4f21d068aed43bb2ea5823247cae73ecdd8d60f8" - -let fixture_commit path fields = - match List.assoc_opt "pinnedLogseqCommit" fields with - | Some (`String commit) -> commit - | Some _ -> fail "%s has an invalid pinnedLogseqCommit" path - | None -> - (match List.assoc_opt "source" fields with - | Some (`Assoc source) -> - (match List.assoc_opt "logseqCommit" source with - | Some (`String commit) -> commit - | _ -> fail "%s has no source.logseqCommit" path) - | _ -> fail "%s has no pinned Logseq commit" path) -;; - -let validate_fixture path = - match Yojson.Safe.from_file path with - | `Assoc fields -> - (match List.assoc_opt "apiVersion" fields, List.assoc_opt "formatVersion" fields with - | Some (`Int 1), None | None, Some (`Int 1) -> () - | _ -> fail "%s does not declare exactly one supported fixture version" path); - let commit = fixture_commit path fields in - if not (String.equal commit pinned_logseq_commit) - then fail "%s was generated from unexpected Logseq commit %s" path commit; - (match List.assoc_opt "projection" fields with - | None -> false - | Some (`List values) -> - let canonical = List.map canonicalize values in - if List.length canonical <> List.length (List.sort_uniq compare canonical) - then fail "%s contains duplicate canonical projection entities" path; - true - | Some _ -> fail "%s has a non-array projection" path) - | _ -> fail "%s is not a versioned fixture object" path -;; - -let validate_fixtures directory = - if not (Sys.file_exists directory && Sys.is_directory directory) - then fail "Fixture path is not a directory: %s" directory; - let fixtures = - Sys.readdir directory - |> Array.to_list - |> List.filter (fun name -> Filename.check_suffix name ".json") - |> List.sort String.compare - |> List.map (Filename.concat directory) - in - if fixtures = [] then fail "Fixture directory contains no JSON documents: %s" directory; - if not (List.exists validate_fixture fixtures) - then fail "Fixture directory contains no canonical graph projection: %s" directory -;; - -let () = - match parse_args () with - | Pair { expected; actual } -> compare_pair expected actual - | Fixtures directory -> validate_fixtures directory -;; diff --git a/logseq_db_worker/tool/dune b/logseq_db_worker/tool/dune deleted file mode 100644 index a0c96d5..0000000 --- a/logseq_db_worker/tool/dune +++ /dev/null @@ -1,4 +0,0 @@ -(executable - (name compare_canonical_graphs) - (modules compare_canonical_graphs) - (libraries logseq_db_worker unix yojson)) diff --git a/logseq_db_worker/tool/fixture_generator.mli b/logseq_db_worker/tool/fixture_generator.mli deleted file mode 100644 index ef638f6..0000000 --- a/logseq_db_worker/tool/fixture_generator.mli +++ /dev/null @@ -1,19 +0,0 @@ -type mode = - | Runtime_flow - | Runtime_flow_with_pagination - | Runtime_flow_with_persistence_failure - -type generated = - { support_root : string - ; graph_id : Logseq_db_types.Graph_types.Uuid.t - ; graph_dir : string - ; user_id : string - ; base_url : string - ; expected_timeline_text : string - } - -val create : support_root:string -> mode:mode -> (generated, string) result -val to_yojson : generated -> Yojson.Safe.t -val create_unencrypted_warm_start : support_root:string -> (generated, string) result -val create_encrypted_warm_start : support_root:string -> (generated, string) result -val managed_to_yojson : generated -> Yojson.Safe.t diff --git a/logseq_overlay_db.opam b/logseq_overlay_db.opam index ecf0900..b746113 100644 --- a/logseq_overlay_db.opam +++ b/logseq_overlay_db.opam @@ -21,8 +21,6 @@ depends: [ "melange-transit-native" {= "0.1.2"} "ppx_deriving_yojson" {>= "3.9.1"} "sqlite3" {= "5.4.0"} - "uucp" {= "17.0.0"} - "uunf" {= "17.0.0"} "uutf" {= "1.0.4"} "yojson" {= "3.0.0"} "alcotest" {with-test & = "1.7.0"} diff --git a/logseq_overlay_db/lib/dune b/logseq_overlay_db/lib/dune index 9a04948..70df8de 100644 --- a/logseq_overlay_db/lib/dune +++ b/logseq_overlay_db/lib/dune @@ -12,7 +12,6 @@ crypto_bridge delete_conflict logical_change - logical_snapshot mirror mutation_receipt create_journal_page diff --git a/logseq_overlay_db/lib/logical_snapshot.ml b/logseq_overlay_db/lib/logical_snapshot.ml deleted file mode 100644 index 3b27d88..0000000 --- a/logseq_overlay_db/lib/logical_snapshot.ml +++ /dev/null @@ -1,2 +0,0 @@ -(* Retired duplicate projection module. The empty module remains because Dune - explicitly lists it; Database owns logical snapshots and assigned orders. *) diff --git a/logseq_overlay_db/lib/logical_snapshot.mli b/logseq_overlay_db/lib/logical_snapshot.mli deleted file mode 100644 index 3b27d88..0000000 --- a/logseq_overlay_db/lib/logical_snapshot.mli +++ /dev/null @@ -1,2 +0,0 @@ -(* Retired duplicate projection module. The empty module remains because Dune - explicitly lists it; Database owns logical snapshots and assigned orders. *) diff --git a/logseq_overlay_db/lib/overlay_effect.ml b/logseq_overlay_db/lib/overlay_effect.ml index 6efc94e..07f26bb 100644 --- a/logseq_overlay_db/lib/overlay_effect.ml +++ b/logseq_overlay_db/lib/overlay_effect.ml @@ -66,46 +66,3 @@ type dependency_shadows = } let empty_dependency_shadows = { shadow_blocks = []; shadow_pages = [] } - -let equal_footprint left right = - List.equal Graph.Uuid.equal left.block_uuids right.block_uuids - && List.equal Graph.Uuid.equal left.page_uuids right.page_uuids - && List.equal ( = ) left.structure_interests right.structure_interests -;; - -let equal_delete_artifacts left right = - match left, right with - | None, None -> true - | Some left, Some right -> - List.equal Graph.Uuid.equal left.frontier right.frontier - && List.equal - (fun left right -> - Graph.Uuid.equal left.block_uuid right.block_uuid - && String.equal left.title right.title - && List.equal Graph.Uuid.equal left.refs right.refs - && Int64.equal left.updated_at_ms right.updated_at_ms) - left.block_patches - right.block_patches - && List.equal - (fun left right -> - Graph.Uuid.equal left.page_uuid right.page_uuid - && Int64.equal left.updated_at_ms right.updated_at_ms) - left.page_patches - right.page_patches - && (match left.property_guard, right.property_guard with - | None, None -> true - | Some left, Some right -> - Graph.Uuid.equal left.property_uuid right.property_uuid - && String.equal left.property_ident right.property_ident - && Graph.Uuid.equal left.replacement_uuid right.replacement_uuid - | None, Some _ | Some _, None -> false) - && List.equal - (fun left right -> - Graph.Uuid.equal left.holder_uuid right.holder_uuid - && String.equal left.property_ident right.property_ident - && Graph.Uuid.equal left.replacement_uuid right.replacement_uuid - && Int64.equal left.updated_at_ms right.updated_at_ms) - left.property_patches - right.property_patches - | None, Some _ | Some _, None -> false -;; diff --git a/logseq_overlay_db/lib/overlay_effect.mli b/logseq_overlay_db/lib/overlay_effect.mli index 16f1f04..45bd320 100644 --- a/logseq_overlay_db/lib/overlay_effect.mli +++ b/logseq_overlay_db/lib/overlay_effect.mli @@ -66,5 +66,3 @@ type dependency_shadows = } val empty_dependency_shadows : dependency_shadows -val equal_footprint : footprint -> footprint -> bool -val equal_delete_artifacts : delete_artifacts option -> delete_artifacts option -> bool diff --git a/logseq_overlay_db/tool/fixture_generator.ml b/logseq_overlay_db/tool/fixture_generator.ml index 08a6227..36ebe05 100644 --- a/logseq_overlay_db/tool/fixture_generator.ml +++ b/logseq_overlay_db/tool/fixture_generator.ml @@ -10,89 +10,6 @@ let uuid text = let block_uuid ordinal = uuid (Printf.sprintf "20000000-0000-4000-8000-%012d" ordinal) let mutation_uuid ordinal = uuid (Printf.sprintf "90000000-0000-4000-8000-%012d" ordinal) -let schema_attr ?unique ?(indexed = false) ?value_type () = - Datascript. - { cardinality = One - ; unique - ; indexed - ; is_component = false - ; no_history = false - ; doc = None - ; value_type - ; tuple_attrs = None - ; tuple_types = None - } -;; - -let schema = - [ ( "db/ident" - , schema_attr ~unique:Datascript.Identity ~value_type:Datascript.KeywordType () ) - ; "kv/value", schema_attr () - ; ( "block/uuid" - , schema_attr - ~unique:Datascript.Identity - ~indexed:true - ~value_type:Datascript.UuidType - () ) - ; "block/title", schema_attr ~value_type:Datascript.StringType () - ; "block/order", schema_attr ~value_type:Datascript.StringType () - ; "block/parent", schema_attr ~indexed:true ~value_type:Datascript.RefType () - ; "block/page", schema_attr ~indexed:true ~value_type:Datascript.RefType () - ; "block/journal-day", schema_attr ~indexed:true ~value_type:Datascript.NumberType () - ; "block/name", schema_attr ~value_type:Datascript.StringType () - ] -;; - -let authoritative_db ~block_count = - if block_count < 0 then invalid_arg "block_count must be non-negative"; - let page = Datascript.Temp_id "page" in - let overflow_page = Datascript.Temp_id "overflow-page" in - let page_uuid = uuid "10000000-0000-4000-8000-000000000001" in - let page_ops = - [ Datascript.Add (page, "block/uuid", Uuid (Graph.Uuid.to_string page_uuid)) - ; Add (page, "block/name", String "performance fixture") - ; Add (page, "block/title", String "Performance fixture") - ; Add (overflow_page, "block/uuid", Uuid "10000000-0000-4000-8000-000000000002") - ; Add (overflow_page, "block/name", String "performance overflow fixture") - ; Add (overflow_page, "block/title", String "Performance overflow fixture") - ] - in - let kv id ident value = - let entity = Datascript.Temp_id id in - [ Datascript.Add (entity, "db/ident", Keyword ident) - ; Add (entity, "kv/value", value) - ] - in - let identity_ops = - kv - "schema-version" - "logseq.kv/schema-version" - (Map [ Keyword "major", Int64 65L; Keyword "minor", Int64 33L ]) - @ kv "db-type" "logseq.kv/db-type" (String "db") - @ kv - "local-graph-uuid" - "logseq.kv/local-graph-uuid" - (Uuid "70000000-0000-4000-8000-000000000001") - @ kv "graph-remote" "logseq.kv/graph-remote?" (Bool true) - @ kv "graph-uuid" "logseq.kv/graph-uuid" (Uuid "60000000-0000-4000-8000-000000000001") - in - let block_ops = - List.init block_count (fun index -> - let entity = Datascript.Temp_id (Printf.sprintf "block-%d" index) in - let block = block_uuid index in - let parent = if index < 256 then page else overflow_page in - [ Datascript.Add (entity, "block/uuid", Uuid (Graph.Uuid.to_string block)) - ; Add (entity, "block/title", String (Printf.sprintf "Block %d" index)) - ; Add (entity, "block/order", String (Printf.sprintf "a%08d" index)) - ; Add (entity, "block/parent", Ref_to parent) - ; Add (entity, "block/page", Ref_to parent) - ]) - |> List.concat - in - Datascript.empty_db ~schema () - |> Datascript.db_with (identity_ops @ page_ops @ block_ops) -;; - let ensure_directory path = let rec create path = if Sys.file_exists path @@ -382,18 +299,6 @@ let outbox_bytes ~database_path = (Sqlite3.Rc.to_string rc)))) ;; -let mutation_history ~count = - if count < 0 then invalid_arg "count must be non-negative"; - let parent = uuid "10000000-0000-4000-8000-000000000001" in - List.init count (fun index -> - Types.Insert_blocks - { mutation_id = mutation_uuid index - ; asset = None - ; parent - ; tree = { uuid = block_uuid (100_000 + index); title = "Pending"; children = [] } - }) -;; - let fixture_checksum ~block_count = Digestif.SHA256.digest_string (Printf.sprintf "logseq-overlay-db-performance-v1:%d" block_count) diff --git a/logseq_overlay_db/tool/fixture_generator.mli b/logseq_overlay_db/tool/fixture_generator.mli index f1d66c1..5cff587 100644 --- a/logseq_overlay_db/tool/fixture_generator.mli +++ b/logseq_overlay_db/tool/fixture_generator.mli @@ -2,7 +2,6 @@ module Graph = Logseq_db_types.Graph_types val block_uuid : int -> Graph.block_uuid val mutation_uuid : int -> Graph.Uuid.t -val authoritative_db : block_count:int -> Datascript.db val seed_mirror : application_support_directory:string @@ -11,5 +10,4 @@ val seed_mirror val seed_outbox : database_path:string -> block_count:int -> count:int -> unit val outbox_bytes : database_path:string -> int -val mutation_history : count:int -> Logseq_overlay_db.Types.local_mutation list val fixture_checksum : block_count:int -> string diff --git a/logseq_sync/lib/effect_runner/platform/platform_crypto.ml b/logseq_sync/lib/effect_runner/platform/platform_crypto.ml index 24e3eb8..ff24c9b 100644 --- a/logseq_sync/lib/effect_runner/platform/platform_crypto.ml +++ b/logseq_sync/lib/effect_runner/platform/platform_crypto.ml @@ -162,14 +162,6 @@ let verify_and_save_wrapped_graph_key (fun _ -> Ok ()) ;; -let delete_wrapped_graph_key ~managed_sync_origin ~user_id ~graph_id = - bind - (invoke - "deleteWrappedGraphKey" - (graph_identity_fields ~managed_sync_origin ~user_id ~graph_id)) - (fun _ -> Ok ()) -;; - let delete_account_secrets ~managed_sync_origin ~user_id = bind (invoke "deleteAccountSecrets" (identity_fields ~managed_sync_origin ~user_id)) diff --git a/logseq_sync/lib/effect_runner/platform/platform_crypto.mli b/logseq_sync/lib/effect_runner/platform/platform_crypto.mli index aa6a9d1..516f05e 100644 --- a/logseq_sync/lib/effect_runner/platform/platform_crypto.mli +++ b/logseq_sync/lib/effect_runner/platform/platform_crypto.mli @@ -36,12 +36,6 @@ val verify_and_save_wrapped_graph_key -> encrypted_graph_key:string -> (unit, string) result -val delete_wrapped_graph_key - : managed_sync_origin:Uri.t - -> user_id:string - -> graph_id:Graph_types.Uuid.t - -> (unit, string) result - val delete_account_secrets : managed_sync_origin:Uri.t -> user_id:string diff --git a/logseq_sync/lib/effect_runner/storage/bootstrap.ml b/logseq_sync/lib/effect_runner/storage/bootstrap.ml index d9c8480..72965b6 100644 --- a/logseq_sync/lib/effect_runner/storage/bootstrap.ml +++ b/logseq_sync/lib/effect_runner/storage/bootstrap.ml @@ -578,11 +578,6 @@ module Asset_cache = struct Ok ()) ;; - let delete t = - close t; - Result.map (fun () -> Hashtbl.clear t.records) (remove_tree t.directory) - ;; - let delete_account ~root ~account = remove_tree (account_directory ~root account) let delete_graph ~root ~account ~graph_id = diff --git a/logseq_sync/lib/effect_runner/storage/bootstrap.mli b/logseq_sync/lib/effect_runner/storage/bootstrap.mli index 4b0c528..df38bd2 100644 --- a/logseq_sync/lib/effect_runner/storage/bootstrap.mli +++ b/logseq_sync/lib/effect_runner/storage/bootstrap.mli @@ -56,7 +56,6 @@ module Asset_cache : sig val retain : t -> handle -> handle option val release : t -> handle -> unit val close : t -> unit - val delete : t -> (unit, error) result (** Remove durable files for one origin/account after its live caches are closed. *) val delete_account diff --git a/review/.gitignore b/review/.gitignore deleted file mode 100644 index 6b0cc1f..0000000 --- a/review/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -*.app/ -*.o -*.png -*-entitlements.plist -*-link-command.json -assets/ -native_embed.production.ml -reading.pdf -notes.txt - -*library-delivery.json - -swift-clean-build/ -*.backup - -relink_simulator.py diff --git a/review/README.md b/review/README.md deleted file mode 100644 index 818868a..0000000 --- a/review/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Journal rich timeline rows - -This change targets current main directly. It contains the text-first Journal row design and reliable asset-notice delivery; PR 35 loading-transition changes are excluded. UI implementation uses existing OCaml/LUI components. No Swift, dune, or spec/ OCaml file is changed. - -## Result - -Rows keep the existing date headers and native navigation and context menus, remove the disclosure arrow, and place body text above media and quiet task/tag metadata. Long text clamps to three lines with stable expand/collapse. Single images use a large native preview; galleries use horizontal scrolling with the next image visible. File cards show type icons and actual descriptor sizes when available. Missing metadata produces no extra footer. Native visible-range events release offscreen media demand without new geometry tracking. - -Named tags are resolved from the same immutable Worker read snapshot as their block. Optional tagTitles preserves decoding of older responses. Missing tag pages are omitted. Asset descriptors do not guarantee an original filename; inline cards use descriptive type labels instead of presenting cache paths as original filenames. Native Quick Look may show its source cache basename; unsupported types use the system fallback. - -## Synthetic screenshots - -The screenshots below contain invented Chinese notes, illustrative metadata, and sample landscape photos. They are explicitly marked as synthetic and contain no user graph notes or screenshots. - -![Synthetic overview](synthetic-overview.png) - -![Synthetic expanded body](synthetic-expanded.png) - -The source is journal_design_fixture.ml. It uses the production row components with invented data, starts no graph Worker, and never edits notes. Supply sample assets through JOURNAL_DESIGN_ASSETS when running this separate simulator fixture. Its descriptor sizes are illustrative, independent of sample file lengths. - -## Asset notice fix - -Asset_transfer/Core already emitted Ready followed by demand acceptance. The Worker adapter stored both independent facts in a single latest-value topic; acceptance replaced Ready before the UI drained. Different assets and consumers could erase one another too. - -The Worker now supports a pure optional merge callback under the existing mailbox lock. The asset policy retains latest facts separately by full graph scope, consumer/asset, demand admission, upload operation, and capacity. A balanced map gives O(log n) insertion; sorting at delivery restores retained-fact order. At most 4096 distinct facts remain pending. Overflow fails explicitly instead of silently dropping notifications. The newest event envelope retains Worker epoch, generation, and push-sequence fencing. Other snapshot topics keep latest-value replacement. - -## Verification and limits - -- Five mailbox loss/bound regressions failed before implementation; all eight service checks pass after the fix. -- Nine mounted UI checks cover body expansion, arrow removal, images, file metadata, unavailable-file retry, and native LUI events. Fourteen Worker/application cases include named tag propagation; protocol round trips cover new and legacy responses. -- Full workspace build passes. Full runtest and native simulator compilation/linking were rerun on the main-based PR branch; simulator build passed in 201.81 seconds. -- The combined-base simulator previously verified real graph file metadata and image rendering, full-image Quick Look, file fallback preview, and return to the timeline. Those private screenshots remain local and are excluded from Git and the PR. -- Full runtest has an existing source_boundary_test failure: unchanged journal_timeline.ml uses V.loading while that check requires literal V.progress. No check is disabled or suppressed. -- spec-dev-tool check --all has one existing invalid decision document, 2026-09-28-bottom-lui-capsules.md. This feature and fix decision validate. -- Horizontal gallery movement still needs manual confirmation. Structural/native component checks and visible 1.5-image layout are verified; a computer drag did not establish a reliable movement result. - -## Local verification - -Use the project's normal opam/dependency environment and run dune build @all, dune exec logseq_db_worker/test/test_lui_service.exe, dune exec test/journal_semantics_test.exe, dune exec test/logseq_db_worker_application_integration_test.exe, dune exec logseq_db_worker/test/test_protocol.exe, and dune runtest. Use tool/build_journal_apple.sh with the existing external LUI checkout for a simulator build. No physical-device installation or merge is part of this PR. - -## Draft PR checks - -The standalone draft PR is https://github.com/logseq/logseq_journal/pull/36. GitHub has no configured Actions workflows or build/test CI runs. Its WIP app check deliberately remains in progress with the output draft mode override because the PR is a draft. This is not a claim that remote CI passed. Local build/test results and existing failures are listed above. diff --git a/review/journal_design_fixture.ml b/review/journal_design_fixture.ml deleted file mode 100644 index 7cd74b6..0000000 --- a/review/journal_design_fixture.ml +++ /dev/null @@ -1,203 +0,0 @@ -(* Synthetic simulator-only preview. Uses production OCaml/LUI timeline and media views. *) -module U = Journal_view -module V = U.View -module G = Logseq_db_types.Graph_types -module A = Logseq_db_types.Asset_descriptor - -let uuid n = - G.Uuid.of_string (Printf.sprintf "20261001-0000-4000-8000-%012d" n) |> Result.get_ok -;; - -let path name = Filename.concat (Sys.getenv "JOURNAL_DESIGN_ASSETS") name - -let block n source status tags = - Journal_model.create - ~id:(G.Uuid.to_string (uuid n)) - ~page_id:(G.Uuid.to_string (uuid 99)) - ~journal_day:20261001 - ~parent_id:None - ~sibling_order:(string_of_int n) - ~source - ~task_state:status - ~child_count:0 - ~creation_time: - (Journal_time.create - ~instant_unix_ms:1790849400000L - ~local_day:20261001 - ~local_minute_of_day:570 - |> Result.get_ok) - ~revision:"synthetic" - ~last_mutation_id:(G.Uuid.to_string (uuid 98)) - |> Result.get_ok - |> fun value -> Journal_model.with_tag_titles value ~tag_titles:tags -;; - -let item n typ name size = - let asset = - A.create - ~uuid:(uuid (100 + n)) - ~source: - (Managed - (Some (A.version ~checksum:(String.make 64 'a') ~file_type:typ |> Result.get_ok))) - ~current_checksum:None - ~size - ~dimensions:None - |> Result.get_ok - in - { Journal_media_runtime.token = string_of_int n - ; asset - ; file_type = typ - ; presentation = Journal_media.File (path name) - } -;; - -let page = - { Journal_graph_projection.id = G.Uuid.to_string (uuid 99) - ; day = 20261001 - ; title = "Oct 1, 2026 · Synthetic preview" - } -;; - -let entries () = - List.map - (fun block -> { Journal_graph_projection.block; child_summaries = [] }) - [ block 1 "清晨沿着海岸走了一段,海风很轻。把今天喜欢的两张照片留在这里。" No_status [ "户外"; "周末计划" ] - ; block 2 "整理这周的阅读笔记,把下次讨论要用的材料放在一起。" Doing [ "阅读"; "工作" ] - ; block - 3 - "最近想把每天的小片段记得更具体一点。\n\ - 今天的散步没有目的地,走到海边便坐了一会儿。\n\ - 远处的船慢慢离岸,路过的人谈论着天气。\n\ - 回来以后,把一路上想到的事写在这里。\n\ - 明天再看,也许会发现一些不同的细节。" - Todo - [ "日常" ] - ; block 4 "晚上做了热汤,留了一段安静的时间给自己。" No_status [] - ] -;; - -let render_media ~root child = - let images = - if root = G.Uuid.to_string (uuid 1) - then - [ item 1 "jpg" "coast.jpg" (Some 426000L); item 2 "jpg" "road.jpg" (Some 319000L) ] - else if root = G.Uuid.to_string (uuid 2) - then [ item 3 "pdf" "reading.pdf" (Some 1800000L); item 4 "txt" "notes.txt" None ] - else [] - in - let store = Journal_media_view.Store.create () in - Journal_media_view.Store.update - store - ~root - (Some { Journal_media_runtime.items = images; more = false; error = None }); - Journal_media_view.view - ~store - ~scope:"synthetic-preview" - ~root - ~on_event:(fun _ -> ()) - child -;; - -let patch = ref "" -let current = ref None - -let init _ _ _ = - let entries = entries () in - let state = Journal_timeline_state.empty ~today:20261001 in - let state = - Journal_timeline_state.begin_request state ~generation:1L (Feed { before_day = None }) - in - let state = - Journal_timeline_state.apply_feed - state - ~generation:1L - { Journal_graph_projection.days = - [ { page; entries; has_more_entries = false; continuation = None } ] - ; has_more_days = false - ; slot_count = 5 - } - in - let no_op = U.Event.Handler.create (fun _ -> ()) in - let body = - Journal_timeline.view - ~render_media - ~state - ~day_presentation:(fun _ -> - Some - { Journal_calendar.date_text = "2026.10.01 · 合成样例" - ; weekday_text = "Thu" - ; accessibility_label = "Synthetic preview" - }) - ~on_visible_range:no_op - ~on_scroll_completed:no_op - ~on_retry_day:no_op - ~on_open_block:no_op - ~delete_enabled:true - ~actions_enabled:true - ~on_status:no_op - ~on_delete:no_op - in - let body = - Journal_header.view - ~key:(U.Key.string "fixture-header") - ~platform:"ios" - ~context:Journal_header.Context.journals - ~sync_phase:None - ~sync_error:None - ~on_error_info:None - ~on_account_action:None - ~local_deletion_available:false - ~on_journals:no_op - ~on_favorites:no_op - ~on_capture:no_op - ~capture_enabled:false - ~capture_expanded:None - ~body - in - let backend = - { Lui_protocol.backend_profile = Lui_protocol.profile IOS SwiftUIHost - ; apply_batch = - (fun batch -> - patch := Lui_wire.encode_batch batch; - true) - } - in - let app = - Lui_app.create_with_extensions - backend - Journal_lui_native.registry - () - (fun () () -> ()) - (fun _ _ _ -> U.mount body) - in - current := Some app; - ignore (Lui_app.start app); - ignore (Lui_app.flush app); - !patch -;; - -let update f = - patch := ""; - Option.iter - (fun app -> - f app; - ignore (Lui_app.flush app)) - !current; - !patch -;; - -let () = - Journal_bridge.register - { init - ; dispatch = - (fun event -> update (fun app -> ignore (Lui_app.dispatch_event app event))) - ; extension_event = (fun _ _ _ -> "") - ; pump = (fun () -> update (fun _ -> ())) - ; platform_event = (fun _ -> ()) - ; platform_response = (fun _ -> ()) - ; platform_failure = (fun _ -> ()) - ; dispose = (fun () -> update (fun app -> ignore (Lui_app.dispose app))) - ; root_node = (fun () -> Option.fold ~none:0 ~some:Lui_app.root_node !current) - ; loading_signal = (fun () -> 1) - } -;; diff --git a/review/synthetic-expanded.png b/review/synthetic-expanded.png deleted file mode 100644 index d345000..0000000 Binary files a/review/synthetic-expanded.png and /dev/null differ diff --git a/review/synthetic-overview.png b/review/synthetic-overview.png deleted file mode 100644 index dadd7b6..0000000 Binary files a/review/synthetic-overview.png and /dev/null differ diff --git a/swift/JournalE2EECrypto.swift b/swift/JournalE2EECrypto.swift index 5c64944..72b906c 100644 --- a/swift/JournalE2EECrypto.swift +++ b/swift/JournalE2EECrypto.swift @@ -812,50 +812,6 @@ enum JournalE2EECrypto { testMemoryPrivateKeys.removeValue(forKey: identity.accountDigestHex) } - static func probeIsolatedRealWrappedKeychainItem( - origin: String, - userID: String, - graphID: String - ) throws -> [CFString: Any] { - var item = try wrappedGraphKeyQuery( - origin: origin, - userID: userID, - graphID: graphID - ) - let service = "\(wrappedGraphKeyService).test.\(UUID().uuidString.lowercased())" - item[kSecAttrService] = service - item[kSecAttrAccessible] = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly - item[kSecValueData] = Data([1, 0, 0, 0, 0]) - let addStatus = SecItemAdd(item as CFDictionary, nil) - guard addStatus == errSecSuccess else { - throw JournalE2EECryptoError.operationFailed - } - - var lookup = try wrappedGraphKeyQuery( - origin: origin, - userID: userID, - graphID: graphID - ) - lookup[kSecAttrService] = service - let deletionQuery = lookup - lookup[kSecReturnAttributes] = true - lookup[kSecMatchLimit] = kSecMatchLimitOne - var result: CFTypeRef? - let readStatus = SecItemCopyMatching(lookup as CFDictionary, &result) - let deleteStatus = SecItemDelete(deletionQuery as CFDictionary) - var deletedResult: CFTypeRef? - let deletedReadStatus = SecItemCopyMatching(lookup as CFDictionary, &deletedResult) - guard - readStatus == errSecSuccess, - let attributes = result as? [CFString: Any], - deleteStatus == errSecSuccess, - deletedReadStatus == errSecItemNotFound - else { - _ = SecItemDelete(deletionQuery as CFDictionary) - throw JournalE2EECryptoError.operationFailed - } - return attributes - } #endif private static func decryptedGraphKey(_ request: [String: Any]) throws -> Data { diff --git a/test/source_boundary_test.ml b/test/source_boundary_test.ml index 3b66714..5bc90d8 100644 --- a/test/source_boundary_test.ml +++ b/test/source_boundary_test.ml @@ -833,35 +833,10 @@ let test_final_overlay_data_plane_boundary root = ; "logseq_db_types/test/test_mutation_identity.ml" ; "logseq_db_types/test/dune" ]; - List.iter - (fun relative -> - forbid_text - root - relative - [ "Datascript.db" - ; "Datascript.conn" - ; "Datascript.entity_id" - ; "Datascript.tx_op" - ; "Logseq_db_types.Mutation" - ; "projected_db" - ; "projected_conn" - ; "Projected_connection" - ]) - (files_with_suffixes root "logseq_overlay_db/spec" [ ".mli" ]); forbid_text root "logseq_db_storage/lib/storage_session.mli" [ "val current_db"; "db:Datascript.db"; "Persistent_sorted_set.t" ]; - forbid_text - root - "logseq_overlay_db/lib/database.ml" - [ "mutable authoritative_blocks" - ; "mutable authoritative_pages" - ; "mutable blocks : (Graph.block_uuid * Types.block_record) list" - ; "mutable pages : (Graph.page_uuid * Types.page_record) list" - ; "blocks : (Graph.block_uuid * Types.block_record) list" - ; "pages : (Graph.page_uuid * Types.page_record) list" - ]; List.iter (fun relative -> forbid_worker_storage_access root relative; diff --git a/tool/__pycache__/test_macos_regressions.cpython-313.pyc b/tool/__pycache__/test_macos_regressions.cpython-313.pyc deleted file mode 100644 index 6c0ee19..0000000 Binary files a/tool/__pycache__/test_macos_regressions.cpython-313.pyc and /dev/null differ diff --git a/tool/__pycache__/test_swiftui_amplify.cpython-313.pyc b/tool/__pycache__/test_swiftui_amplify.cpython-313.pyc deleted file mode 100644 index 45db706..0000000 Binary files a/tool/__pycache__/test_swiftui_amplify.cpython-313.pyc and /dev/null differ diff --git a/tool/__pycache__/test_swiftui_outline.cpython-313.pyc b/tool/__pycache__/test_swiftui_outline.cpython-313.pyc deleted file mode 100644 index 9b4ceac..0000000 Binary files a/tool/__pycache__/test_swiftui_outline.cpython-313.pyc and /dev/null differ diff --git a/tool/__pycache__/test_swiftui_warm_start.cpython-313.pyc b/tool/__pycache__/test_swiftui_warm_start.cpython-313.pyc deleted file mode 100644 index 6f39b9b..0000000 Binary files a/tool/__pycache__/test_swiftui_warm_start.cpython-313.pyc and /dev/null differ