Asset deletion (three independent failures stacked):
- Unlink file on asset-block retract via the existing <unlink-asset
helper at handler/assets.cljs (modules/outliner/pipeline.cljs:74-80).
The block was commented out; deleted-assets was computed but never
consumed, so files leaked indefinitely.
- Reactive existence check in image-icon-cp / avatar-image-cp via
state/sub :db/latest-transacted-entity-uuids. model/sub-block can't
drive this — worker/react.cljs:63-67 calls (d/entity db-after id),
which returns nil for retracted entities, so [::block id] is never
emitted in affected-keys and subscriptions never fire on deletion.
- Force-remount Avatar root via :key on asset-missing? toggle. Radix's
Avatar primitive tracks image-loading status in context; once
AvatarImage reported 'loaded', the status sticks even after the image
unmounts, so AvatarFallback stays hidden.
PR-review cleanup (no behavior change):
- Strip 17+ [DEBUG ...] console statements across icon, block, views,
two editor handlers, and assets.
- Close content.cljs preview gap: pass :preview-target-db-id +
:property to icon-search so the block bullet observes hover preview
consistently with every other surface.
- Scope-correct close-fallback-menu! — use dissoc-icon-preview-field!
instead of unconditional state/set-state! nil.
- Delete dead code: heal-dangling-asset-icon (raced lazy hydrate),
asset-uuid->entity, rgb-string->hex, name->hex (named + css),
format-pairs.
- Hoist icon-grid-cols / custom-tab-cols magic numbers (9 sites).
- Search inputs: add :type "search" and :aria-label (both picker +
asset-picker).
- Replace hardcoded #6B7280 with (colors/variable :gray :09).
- Reconcile recents-cap doc drift in storage.cljc + recents-lane
docstring (cap lives in handler/icon-color/max-recents).
- Remove orphan-asset cleanup from outliner/core save-block-inner. Root
cause (migration 65.27's :url ref-type) is fixed by 65.28/65.29; all
asset writers are atomic (save-image-asset!, new-asset-block,
build-new-asset), and the cleanup ran on every save with a silent-
retract failure mode.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds a hex/HSV picker pane to the icon-picker color popover, plus a
per-graph recents lane and cross-theme contrast adjustment. Hex input
supports named-color autocomplete (148 CSS + 949 XKCD) with a ghost
suffix that Tab/Right-arrow accepts. Picked colors that fail WCAG 3:1
against either light or dark background are auto-shifted in OKLCH per
mode; recents and the trigger swatch render as half-pie splits when the
two modes diverge.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* 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>
For keys with non-ordered collections, use sets to consistently produce
idempotent values. Users can still author with vectors for these keys.
This affects :build/tags, :build/property-classes and
:build/class-extends. Also remove any hacks around making their values
consistent across import->export cycles
An EDN export should consistently produce the same EDN when imported
into a new graph and re-exported. This adds initial fn, cli option and
test to ensure this. There are some known TODOs. diff-graphs script was
removed as it was being used as a subset of the workflow provided by the
--roundtrip option
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
Also remove all file graph references in publishing and
add back publishing.db tests with db graph.
Also remove file graph behavior for cmd-k and files
Previously `tags` doesn't return blocks that have children tag(s).
Also, `tags` support both db/ident and block/title to make it easy
to use:
(tags ?b #{144})
(tags ?b #{"Task"})
(tags ?b #{:logseq.class/Task})
* fix(rtc): batch store and validate db
* fix: logseq.db/transact! shouldn't distinct tx-data
since move-op include 2 steps:
1. insert-block
2. update-attrs
This results in db invalid after step 1.
* refactor: add transact-with-temp-conn!
* bump nbb-logseq and add tests for ldb/transact* fns
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: rcmerci <rcmerci@gmail.com>
Also update validation in DB scripts:
* replace alternative validate-db impl with standard CLI one
* Add validation to import script
* Choose to decouple other DB scripts from validate-db as it may go away
later