Andrey Antukh 464756ec59 ✨ Rework the import dialog
The import wizard now opens with a Check/Upload/Import stepper derived
from the dialog status, plus a phase title and description per stage,
and its file rows follow the new design: folder icon, file name and a
size-plus-extension subtitle.

The step reflects the real state: analyze is Check, a milestone in the
upload stage is Upload, and queue, start and job milestones are Import.
While checking, the dialog shows no rows and no spinner, and the exact
files inside a binfile appear once the analysis resolves.

Each row paints a progress bar: the upload stage drives it with the
real chunk counter, and every import stage keeps the animated bar,
because the client cannot know a global percentage of the work. The
queued label joins the same status line as the milestone text and now
reads "Waiting job slot".

The change also drops the context-notification wrapper and the legacy
loader around file names, and documents the two CSS pitfalls found on
the way: a logical inline-size wins over an inline physical width, and
Rumext does not convert dynamic :style maps for plain elements, so
inline styles leave CLJS as #js objects.

AI-assisted-by: glm-5.3-flash

🔧 Enable NativeMemoryTracking in the backend devenv

Add -XX:NativeMemoryTracking=summary to JAVA_OPTS so the backend and
REPL JVMs expose native memory breakdowns through jcmd.

Useful to diagnose non-heap growth (metaspace, code cache, GC, thread)
while working with imports and other JVM-heavy paths.

AI-assisted-by: deepseek-v4.1-flash

✨ Rework the import wizard progress and the size of its files

The milestone in course is written once, in the header, where the
message of the phase was: every file of a container reports the same
one, so a row repeated it. A row keeps its name and its size, and the
button to drop a file only while the wizard still offers its import
step, which is where dropping one makes sense.

The title counts the files and counts them done with what the job
reports about the file it is working on, so the number moves while a
container rebuilds its files one by one. The bar measures the whole
import: the real bytes of every container while they are uploaded, and
animated while the wizard checks, waits for a slot or rebuilds.

A file of a version 3 package shows what it occupies inside its
container: its own entries plus the storage objects its media and its
thumbnails reference, which the container keeps shared under
`objects/`. What the container itself occupies stays in
`:container-size`, the size the upload of the package is measured on.

The ready step waited for every known file instead of for the end of
the analysis, so Continue left the files that arrived later out of the
import, with a row that never showed anything. The upload step was
recognized only once a row carried a milestone, so the wizard said it
was importing during the first chunk; it now holds until every file
leaves the upload behind.

Also fixes a misspelled design system token that left the success
color unset.

AI-assisted-by: deepseek-v4.1-flash

✨ Cover the import sizes and the done counter with tests

The size a file of a version 3 package shows is its own entries plus
the storage objects its media and its thumbnails reference, and what
the container occupies stays apart: the test drives the analysis with a
fake container that has both, and checks that the manifest is not
charged to any file.

The done counter of the header counts the files the job left behind:
all of them for a container that finished, the ones before the file it
is working on for a container in course, none for one that waits for a
slot, and the files of every container add up.

The test that answers one entry per file also needed the mock of the
entries of a container, which the analysis now reads.

AI-assisted-by: deepseek-v4.1-flash

✨ Say the wait for a slot in the header, not in every row

A row of the import wizard no longer paints a waiting state: while no
job of the import has started, the header says it waits for a free
slot, and the rows keep their name and their size. Only a file whose
container already finished uploading says something of its own
("Ready"), plus the error text when it fails.

The clock icon and the `dashboard.import.status.waiting` key of both
locales go away with it.

The notes of the redesign come along: the description of the wizard in
`mem:frontend/dashboard-viewer-subtleties`, and a new
`mem:clojure/promesa` with the call styles of the library and how they
bridge to rx.

AI-assisted-by: deepseek-v4.1-flash
2026-10-21 12:01:33 +02:00
..
2026-10-21 12:01:33 +02:00
2023-11-13 18:33:28 +01:00
2026-09-22 10:22:31 +02:00
run
2026-09-22 10:22:31 +02:00
2026-09-22 10:22:31 +02:00