Commit Graph

398 Commits

Author SHA1 Message Date
Mega Yu
1ce19817d5 add markdown table test 2026-05-14 21:26:41 +08:00
Mega Yu
c09944870e refactor(mldoc): enhance inline parsing to preserve cell content on failure 2026-05-14 21:02:39 +08:00
Mega Yu
ebb003e51c fix(graph-parser): normalize markdown table cells with escaped/code-span pipes 2026-05-14 18:22:16 +08:00
Cory Donnelly
2169a86f03 fix: honor documented repeater cookie semantics (#12523)
* fix: honor the three documented repeater cookie semantics

Logseq's documented repeater semantics (per docs.logseq.com and
`logseq/docs` `Tasks.md`) define three org-mode-style cookies for
recurring tasks:

  `.+`: repeats from the last completion date
  `++`: advances from scheduled, skipping in whole intervals to future
  `+`:  advances from scheduled by the declared interval (can stack)

The scheduler in `worker/commands.cljs` has been ignoring the cookie
entirely and applying a single, `++`-like semantic for every
recurring task. A user who wrote `.+1w` in markdown — expecting "a
week from when I actually finished" — silently got `++1w` behavior
("a week from the original scheduled date, skipped to future"),
which for a weekly task scheduled 2026-04-01 and completed on
2026-04-05 returns the next occurrence on 2026-04-08 rather than
the documented 2026-04-12.

This change:

  * Adds a closed-values `:logseq.property.repeat/repeat-type` property
    with values `:dotted-plus` / `:plus` / `:double-plus`. Default is
    `:double-plus` so existing recurring tasks see no behavior change
    on upgrade.
  * Rewrites the scheduler to branch on repeat-type and implement each
    semantic: `.+` anchors on now; `+` advances from original once (can
    stack overdue, per org-mode); `++` iterates in whole intervals
    until strictly after now. The `++` path is mathematically
    equivalent to the previous scheduler, so default-path behavior is
    preserved.
  * Guards against frequency <= 0 — the old code would silently produce
    nonsense and, under the new `++` loop, would spin forever. The
    guard short-circuits to `nil`.
  * Extracts `resolve-recur-frequency` and fixes the previous
    `(or [A B] [C D])` pattern in `compute-reschedule-property-tx` —
    any 2-vector is truthy in Clojure, so the default-value branch
    was unreachable and entities without an explicit
    `:recur-frequency` silently fell through to `frequency = nil`.
    `if-let` makes both branches reachable so default-to-1 actually
    works at migration time.
  * Restores the cookie-type selector that was removed from the
    date-time popover in `0a5b88467` (Nov 2020) — in-code support for
    all three cookies has been present but not user-pickable for the
    last ~5.5 years.
  * Adds `docs/recurring-tasks.md` — a technical spec for contributors
    and users that restates and augments the upstream `Tasks.md` text,
    adds decision guidance, and documents the implementation surface.
  * Extends the file-graph → DB-graph migration (built on top of
    `44d6bd49c4` "fix: preserve repeated schedule import") to also
    carry the cookie kind via a new `repeat-types` map in
    `graph-parser/exporter.cljs`, so an imported `.+1w` task lands in
    the DB-graph with `:repeat-type.dotted-plus` rather than picking
    up the `:double-plus` default. Test updated to assert this.
  * Adds deftests covering each cookie's distinctive behavior plus
    boundary cases (non-positive frequency, unknown unit, frequency > 1
    variants, `++` at month/year units, and both branches of
    `resolve-recur-frequency`).

The preexisting `get-next-time-test` passes unchanged under the
`:double-plus` default, preserving the existing regression contract.
Tests pin `t/now` via `with-redefs` for determinism.

Refs #7731, #11260, #6715, #8531. Folds in the small remaining delta
from #12532 (now closed as superseded by `44d6bd49c4`).

* fix: harden recurring task repeat type

* fix: contain repeat type selector

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: handle clamped monthly repeats

---------

Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-14 17:53:11 +08:00
megayu
200a6da0d5 deprecated block-ref (#12627)
* feat(graph-parser): convert block-ref syntax to page-ref in titles

* feat(block): deprecate block-ref syntax

* feat(graph-parser): replace block-ref with page-ref in title processing

* fix lint

* chore(i18n): remove deprecated i18n key
2026-05-14 13:21:22 +08:00
megayu
e097ec8cd8 fix(fsrs): cloze macro with superscript/subscript markup and render improvements 2026-05-13 12:00:24 +08:00
Tienson Qin
9c77efda04 [codex] fix import of auto heading pre-blocks (#12612)
* fix(import): handle auto heading pre-blocks (db-test#863, db-test#864)

* fix(import): clean missing OG block refs (db-test#863, db-test#864)

* Revert "fix(import): handle auto heading pre-blocks (db-test#863, db-test#864)"

This reverts commit 08d586a2d8.

* fix(import): propagate missing block ref cleanup

---------

Co-authored-by: Mega Yu <yuhg2310@gmail.com>
2026-05-12 18:07:07 +08:00
ivan-danilov
7c4111b248 Added prettify-url? option to QuickCapture (#12409)
Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
2026-05-12 00:16:03 +08:00
Tienson Qin
f42da95204 fix: preserve imported task statuses 2026-05-11 20:42:53 +08:00
Tienson Qin
ee6b38b9d6 fix: import namespaced inline tags 2026-05-11 20:35:29 +08:00
Tienson Qin
44d6bd49c4 fix: preserve repeated schedule import 2026-05-11 20:16:19 +08:00
megayu
1884911cc8 fix(exporter): preserve mixed quote blocks during DB export (#12610) 2026-05-11 18:08:14 +08:00
rcmerci
8a7ba2f665 fix(import): preserve emails in quote blocks 2026-05-05 21:13:39 +08:00
rcmerci
47407a3d8d fix(import): property value has custom format journal page ref 2026-05-05 12:46:41 +08:00
Mega Yu
69ee9e2f83 chore: change Github to GitHub 2026-04-15 15:43:52 +08:00
megayu
adbaf10abc chore: tech stack upgrade (#12448)
* fix(lint): make worker/frontend separation lint work on Windows

* chore: update cljs:electron-watch script to include test flag

* chore: remove dead root dependencies

* chore(deps): converge better-sqlite3 to 12.6.2 across deps packages

* chore(deps): converge fs-extra to ^11.3.0 across package roots

* fix(test): correct parameters for create-if-not-exists function

* chore(deps): converge cljs-bean to 1.9.0 across deps roots

* fix(tests): escape regex in cljs:run-test script

* chore: pin root packageManager to yarn 1.22.22

* chore(build): replace del with fs.rmSync in gulp clean

* chore(build): replace npm-run-all with npm-run-all2

* chore(security): upgrade dompurify and unify sanitizer path

* chore(observability): upgrade web sentry to 8.x

* chore: remove unused react-draggable dependencies

* chore(ci): fix windows release artifact collection

* fix(build): create static dir before gulp clean scans it

* fix: update nbb-logseq dependency to version feat-db-v33

* fix(test): move start-time initialization after clone repo

* fix(deps): update nbb dependencies and adjust test script paths to compatible with windows path delimiter

* chore(deps): remove dead meander dependency

---------

Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
2026-03-13 13:20:49 +08:00
Gabriel Horner
ae003f1469 fix: clean up template property handling
When new built-in properties are supported in exporter, all-built-in-names
and file-built-in-property-names should be updated. No need
to handle block/properties-order and block/properties-text-values
as those are ignored
2026-03-11 15:44:12 -04:00
Gabriel Horner
fdf1a8f8cc fix: imported Template blocks
Template blocks were being copied instead of updated in place. Would
feel buggy to user as Template blocks would show up twice in search and
would not be where they had defined them
2026-03-11 15:44:12 -04:00
Mega Yu
371b1d5301 feat(exporter): support template import 2026-03-11 15:44:12 -04:00
Mega Yu
935673a860 update path handling in exporter tests to make it compatible with Windows path 2026-03-11 15:44:12 -04:00
Gabriel Horner
5f7885dff5 fix: outdated docs and misc cleanup
Also added the new option to the import CLI,
improved tests that only test one file to only import 1 file
and cleaned up some hard to read code
2026-03-11 15:44:12 -04:00
Mega Yu
7522a87939 skip heavier parsing if code fences in the title
add split-title-by-code-fences test
2026-03-11 15:44:12 -04:00
Mega Yu
ecad45531d feat: add support for Template, Math blocks and Cards in exporter 2026-03-11 15:44:12 -04:00
Mega Yu
309070fda0 fix typo 2026-03-11 15:44:12 -04:00
Mega Yu
e2f98a1507 standalone code blocks and tag them in-place during exporting 2026-03-11 15:44:12 -04:00
Mega Yu
1c351aebff feat: add code snippet extraction functionality in exporter and UI options 2026-03-11 15:44:12 -04:00
Gabriel Horner
3d88cd1fd6 fix: import of multi word tags
Also fixes quirky editor bug for inline multi word tags. Both bugs
reported in https://github.com/logseq/db-test/issues/724
2026-02-16 14:35:53 -05:00
Tienson Qin
603489e379 Merge branch 'master' into feat/worker-sync 2026-02-12 00:43:42 +08:00
Gabriel Horner
e5c0cd036b fix: graph-parser cljs tests 2026-02-11 11:36:32 -05:00
Gabriel Horner
e7b5c9a6b6 fix: CLI import results in invalid nodes
Had to add <get-file-stat w/ changes in #12313
2026-02-11 11:30:58 -05:00
Tienson Qin
2341fb9b7f Merge branch 'master' into feat/worker-sync 2026-02-11 18:12:22 +08:00
megayu
40c9c86129 Fix issues related to importing Zotero (#12313)
* Fix import Zotero not recognized as asset

* Fix the inconsistency between imported Zotero label and actual filename

* Import support for zotero linked file like using zotfile

* Fix zotero highlighting block error after importing from file

* compatible with old configuration

* fix zotero picture highlight block does not consider as asset after importing

* Reconstructed to meet bb requirements

* empty datascript to avoid Conflicting upsert error after importing file to db graph

* use external-file-name instead of adding new property

* fix zotero link file can't open in asset page

* compatible with commit 33db791

* compatible with windows path & support zotero path can be relative for ci testing

* add zotero importing test

* remove prn log

* remove useless line

* Revert commit 45ebb9e

Future imports will be performed in the worker, will no longer encounter these issues

* refactor: update today page check to use async block retrieval

* Revert "refactor: update today page check to use async block retrieval"

This reverts commit 6750333df1.
2026-02-11 17:43:04 +08:00
Gabriel Horner
4cc8ef3ce4 fix: importing property value that changes
from :date to :node. Should fix
https://github.com/logseq/db-test/issues/748
2026-02-10 14:10:04 -05:00
Gabriel Horner
4fbd147f08 Merge branch 'master' into feat/worker-sync 2026-02-04 16:54:56 -05:00
Gabriel Horner
5f34b04faa chore: add test for / property page fix from #12353 2026-02-02 11:23:32 -05:00
Tienson Qin
d169b587f9 fix: graph parser tests 2026-01-30 20:45:02 +08:00
Tienson Qin
0eadb024de Merge branch 'master' into feat/worker-sync 2026-01-30 17:37:29 +08:00
megayu
60297778a8 Fix issues related to importing file to db (#12353)
* fix multiline block containing attributes will be truncated and lose data after importing

* fix the issues with block attribute name contains "/" after importing

* standardize eol, all files except .bat files use lf

* compatible with windows path

* fix multiple line importing issues
2026-01-30 17:36:12 +08:00
Gabriel Horner
e7bfd53a7c fix: import of namespace tags
w/ 2+ levels of namespaces. This should fix
https://github.com/logseq/db-test/issues/679
2026-01-27 16:01:25 -05:00
Gabriel Horner
23d6f1538a fix: import of unlinked pdf annotations
This addresses the importer failing for
https://github.com/logseq/db-test/issues/732
2026-01-26 12:05:44 -05:00
Tienson Qin
729ca7fcbf Merge branch 'master' into feat/worker-sync 2026-01-26 18:52:12 +08:00
Gabriel Horner
538d10a20a fix: rm whiteboard and tldraw from graph-parser
Also disable test block which is causing an intermittent ref issue
to investigate later
2026-01-22 13:19:58 -05:00
Gabriel Horner
05ffa3eeb6 chore: remove fns made unused by OG removal
Found unused ones in deps/common, from unused frontend.db aliases
and from fns that only existed for their corresponding tests
2026-01-22 13:19:58 -05:00
Gabriel Horner
4bb7430682 fix: rm the last file-based namespaces in db dep
Also remove the following related file schema
attributes and their dependent code:
:block/marker, :block/priority, :block/scheduled,
:block/deadline,:block/repeated?, :block/pre-block?,
:block/properties-order, :block/properties-text-values, :block/macros,
:block/invalid-properties
2026-01-22 13:19:58 -05:00
Gabriel Horner
ab137a962a fix: remove file graph imports
Remove mention of removed JSON import in descriptions. Also mv frontend.util.fs
to where they are used instead of keeping an outdated file ns
2026-01-22 13:19:58 -05:00
Gabriel Horner
37d9ebda1f chore: remove file-specific graph-parser code
Also removed file graph code for markdown export as a prereq
2026-01-22 13:19:57 -05:00
Gabriel Horner
2bcc331916 fix: remove gp-db ns, especially since it's unused
or incorrect in case of graph-view. Removed file graph
specific tests that depended on gp-db
2026-01-22 13:19:57 -05:00
Gabriel Horner
b91b892181 chore: remove unused file ns graph-parser.cli 2026-01-22 13:19:57 -05:00
Gabriel Horner
98ab051328 fix: importing journals with tags
Fixes https://github.com/logseq/db-test/issues/588
2026-01-20 10:24:19 -05:00
Gabriel Horner
045cd5f537 enhance: import block tags that are
specified via tags property. Fixes
https://github.com/logseq/db-test/issues/434
2025-12-18 13:35:42 -05:00