-
v2.0.0-rc2
Pre-releasereleased this
2026-09-22 17:38:43 +00:00 | 87 commits to master since this releaseVersion history becomes per profile: two profiles holding the same domain
shared one installation-wide history, so a restore in one account could write
the other's records over it. A record edit or a bulk delete confirmed after
switching zones also acted on the zone that was selected by then.Added in 2.0.0-rc2
- Every profile now has its own version history. Two profiles holding the
same domain shared a single history, so restoring the oldest version of
example.comin one account could write another account's records over it.
The old repository is opened read only and listed under Earlier shared
history with Restore disabled and the reason beside it, rather than being
merged or deleted. - An account summary on the Settings page: the profile, the account email,
how many domains it holds, how many of those are verified, and how many record
sets are cached. The verified count is red when a domain is unverified,
because deSEC stops raising the domain limit while one is, and a token without
the manage tokens permission is now told that rather than being told the
account has not synced yet. - Qt's own messages now reach the Log Console. The Wayland and X11 platform
plugins, QSslSocket and QProcess log through a channel separate from Python's
logging and previously reached only the terminal, which is nowhere at all for
anyone starting this from a desktop menu. - A demo profile says what it is in the Log Console, as the first line there:
the data is generated, and the live delegation and DNSSEC checks do not run,
with every padlock derived from the stored records. "Retrieved N zones from
API" no longer appears on a demo profile either.
Fixed in 2.0.0-rc2
- Help tooltips turned up anywhere on the screen under Wayland, nowhere near
the question mark they belong to, with an opacity warning repeating on the
console. A tooltip is an ordinary child of the window now, clamped to that
window's own edges, which behaves identically on Wayland, on X11 and
offscreen. - A one-word help tooltip was drawn as a wide slab sitting to the left of its
icon. The label is sized from its own text now, capped where it always was
so a long tooltip still wraps exactly as before. - A help tooltip's background was black on some pages and right on others,
depending on whether an ancestor carried its own stylesheet. Every help icon
uses the themed tooltip qfluentwidgets ships. - An apostrophe in a help tooltip was painted as
'. Ampersands and
angle brackets are still escaped. - Every version history entry described a change it did not contain. The
snapshot was taken from the record list the widget was already holding, which
is the state from before the write, and where that list matched what was
already committed the entry was skipped in silence. The commit is taken from
what the API returns on the refresh that follows every mutation now, keyed to
the zone it names. - A zone emptied of all its records could not be recorded at all, which is
the state a user is most likely to want back. - A bulk delete left no version history entry whatsoever. It files one entry
for the batch now, naming up to three records and past that a count with a
sample, and a batch the API refused in part records the accepted count with
the refusals named beside it. - A record opened for editing while its zone was still loading was saved into
the wrong zone. Rows are dropped the moment the selection changes, an answer
for a zone already left is discarded, and every row carries the zone it was
built for. - A bulk delete confirmed after switching zones deleted from the wrong zone.
The confirmation is an overlay rather than a modal dialog, so the sidebar
stays live while it is open; the zone is captured with the rows now. - Everything a queued mutation did afterwards followed the user rather than the
write. Clicking away while the queue waited left the changed zone serving its
old records on the next visit, spent a request re-reading a zone nothing had
happened to, and left the history entry to be absorbed by the next change made
there. Every mutation names the zone it wrote to, and that is the zone
invalidated and read back. - Two bulk deletes running at once shared one set of counters, so the zone
that was emptied got no history entry, the zone that was not touched got
several, and the counts did not match the batch. Each batch owns its own state
now, and a second is refused while one is running, said out loud in a
notification and in the Log Console. - A multi-row Delete went past the API queue and its rate limiter entirely
when it was started with the Delete key, and the toolbar button's guard
re-enabled itself on the next change of selection. Both ways in run one
implementation behind one guard now. - Saving a token could write its name and permissions onto another token's row,
after which deleting that row deleted the wrong token. An API token cannot be
recovered once deleted. The answer is matched to the row carrying the id it
was saved for and does nothing when no row carries it, and a token's policy
panel now carries the token it was opened for. - A refused policy list was displayed as a token having no policies, which in
deSEC means unrestricted, the opposite of the truth for anyone deciding
whether that token is safe to use. A refusal is reported as a refusal now. - A token whose default policy could not be created was still reported as
created, which leaves an unrestricted token with write access to every zone.
That failure is reported now, stays on screen until it is dismissed, and says
what state the token is in and what to do about it. - Leaving Search and Replace mid-search froze the window for two seconds and
then carried on searching, with its callbacks still live, so one landing
afterwards started a fresh search on a page nobody was looking at. Import and
export instead terminated their thread, which for an import can be between two
writes; all three cancel between items now and report what was actually
written, and a cancelled merge import is no longer reported as nothing
written. - Text on the Queue page was unreadable on the light theme. It used one set
of colours for both themes where every other module pairs them, and it reuses
the record editor's pairs now, each checked against the contrast floor that
applies where it is drawn. Links stay blue rather than taking the new red
accent, and one pair serves the About page and both drawers. - Toasts in the profile window cut their own message in half. Two wrapping
mechanisms were fighting and nothing recomputed the height, so only a one-line
message was ever safe. A bar sizes itself to its text first now, caps its
width only when that does not fit, and breaks a long unbroken profile name
across lines instead of pushing out past both edges of the window. - The raw body of a failed API response was printed in the log, where a JSON
error object reads as line noise to someone looking for what went wrong. The
line names the subsystem, what was attempted and the cause, a 404 names the
URL that was not found, and the body moved to a debug line. - A zone created or delegated by a wizard waited up to ten minutes to be
checked. All three wizard modes ask for the check that the plain Add Zone
path has always asked for now, and a new zone is registered rather than merely
enqueued, so its verdict is not discarded for being about a zone the checker
has not heard of. - Nine pixels of misalignment on five pages, wherever a help button faced a
bare caption: Tokens, Queue, History, Search and Replace, and Import and
Export
Technical Improvements in 2.0.0-rc2
- Every record mutation read its zone back twice, one wasted request on every
save, edit and delete, against a daily rate limit this application does reach.
The signal carries its zone now, and carrying it is the promise that the
emitter has already invalidated that zone and read it back. - A restore read the account on the GUI thread, and around the rate limiter
every other call goes through. It is queued now, with the write built and
enqueued from the read's callback, so the read still precedes the write. - The record selection is cleared deliberately when the zone changes, rather
than as a side effect of the table being rebuilt, which is what Delete
Selected had been resting on. Removed alongside it: two guards reading
attributes that are assigned nowhere in this application, and the two methods
under them. - The guard that keeps raw response bodies out of the log could not see most of
them, including every queue callback in this application, which takes its
payload as a parameter. It catches all nine variants now. - Geometry assertions no longer assert which fonts are installed. The ten
text-derived comparisons allow two pixels, which is useless to a real defect
and sufficient for a font; pixmap arithmetic is left exact. - 1394 tests across 46 files, up from 976 across 35
Downloads
-
Source code (ZIP)
19 downloads
-
Source code (TAR.GZ)
17 downloads
- Every profile now has its own version history. Two profiles holding the