Repository navigation
Releases: mfahsold/lixity
Release list
v0.4.9
Lixity v0.4.9
Released 16 October 2026. A polish release: the local codebase browser
automation and project configuration guidance become less dependent on
manual location overrides, and the documentation site gains a proper
product presentation on top of the shared design system.
Recent work in this line
- CLI ergonomics. Manuscript-link commands (
link-manuscript,
review-manuscript,find-anchor,reconcile-manuscript) accept the
manuscript path positionally, like the analysis commands, or via
--manuscript PATH; exactly one of the two forms is required. A new
lixity schemacommand exposes the agent metadata already returned by
lixity about --json. - PDF draft notices.
lixity pdfaccepts--title(explicit document
title override) and--draft-notice(a short notice appended to every
layout's running header).draft_noticeis also read from the project
configuration. Neither modifies the manuscript or the archive. - Research anchor assistance. Anchors that changed because the quoted text
was edited reportchanged;reconcile-manuscript --new-quote "…" --link-id ID
resolves and re-pins a uniquely resolvable replacement quote after showing a
diff preview (--accept-moved, without--new-quote, still re-pins only
moved or adjusted anchors). The earlier quote stays in history. - Interface. The staged documentation site shares the app's component
vocabulary, controls use the shared.ctlfamily, and the visual-consistency
suite fails when control radii, badge shapes or sampled text sizes leave the
design-token ladders. Compact controls keep the 44 px touch minimum on touch
devices. - Documentation.
filter_density, modal, passive and nominalisation
densities now state explicitly that they include quoted speech; read them
together withdialog_pct.<|end|><|start|> assistant to=tool_calls.xml<|message|><rfl:parameter name="name">
git status --short | head; make check 2>&1 | tail -1
Full Changelog: v0.4.8...v0.4.9
v0.4.8
Lixity v0.4.8
Released 16 October 2026. A consolidation release: the interface gets one small
design system, the research lists move to a vendored component layer, the
service logs become one findable stream, and the script and stylesheet
monoliths are split along their natural seams. No API, archive or route
contract changed.
Interface
- One design system. Radius, type, weight and spacing values come from one
short ladder indesign-tokens.css; the app and the staged documentation
site share it. The workspace switch and the research sub-tabs use the same
control recipe, badges and tags are one pill family, and compact controls
keep the 44 px touch minimum on touch devices. Thevisual-consistency
browser suite now fails when a value leaves the ladder. - Component layer. The Zotero catalogue results and the four research
record lists (sources, dossiers, claims, decisions) render through vendored
Preact 10 + htm — pinned files, inlined into the single dashboard script, no
build step, CSP-compatible withoutunsafe-eval. Panels mount through
LixityComponents.mount, so the server-rendered loading placeholder no
longer lingers beside the loaded list. - No lost state. Source, dossier and claim cards keep an open details
element and its loaded content across a refresh; a changed record still gets
a fresh card. The claims evidence panel keeps loaded evidence in the list
model instead of the DOM.
Logging
src/lixity/log.pyis the one logging entry point: alixity.*tree, one
UTC line format, standard levels (--debug,LIXITY_DEBUG,
LIXITY_LOG_LEVEL) and a stderr handler that followssys.stderrat emit
time. The managed service rotates an oversizedservice-PORT.logat start
(.1–.3);lixity service statusprints the path. Request logs keep the
route without its query string, and log records never contain manuscript
text.
Structure
assets/components.cssholds the shared vocabulary (panels, status, focus,
tables, badges, controls, layout primitives, utilities) with the layer order
tokens → components → views, asserted for the standalone output.assets/research.js(3,570 lines) is split into seven topic modules; the
concatenated bundle keeps the original statement order.- Spinner, micro-label and table recipes are consolidated to one source each.
Command line
link-manuscript,review-manuscript,find-anchorand
reconcile-manuscriptaccept the manuscript path positionally, like the
analysis commands, or via--manuscript PATH. Exactly one of the two forms
is required.
Documentation
- The interpretation guide and METHODS state that
filter_density, modal,
passive and nominalisation densities include quoted speech, and how to read
them together withdialog_pct. A narrative-only variant of these densities
is recorded as a candidate, not part of the current contract. - The blog article "What's new in Lixity" covers this release line in plain
language, and the public pages ship the current screenshots.
Upgrade
Recompute older reports once before comparing figures (sentence boundaries and
comparability floors changed in v0.4.7). Archives and research records are
readable unchanged. Machine-verified archives, examples and releases remain
available with their published hashes.
Full Changelog: v0.4.7...v0.4.8
v0.4.7
Lixity v0.4.7
Released 16 October 2026. A correctness-and-polish release: sentence metrics
agree across every panel, statistically fragile comparison values are withheld
behind documented floors, manuscript review tolerates edits outside the quoted
text, and the local dashboard server gains a documented security baseline.
Correctness
- Sentence metrics agree. Sentence boundaries never cross a blank line: a
block without terminal punctuation (stage note, salutation, sign) stays one
unit, so chapter ASL, scene measurements, the corpus sentence histogram and
the chapter matrix agree. Recompute older reports before comparing figures. - Comparability floors. Chapters below 100 words receive no style-reference
z-scores or FDR marks, and sentence-distribution features need five
sentences; showing/telling and its rankings apply the same word floor. The
dashboard marks unavailable values with a dash and explains the minimum in
the panel;lixity aboutreportsmin_comparable_wordsand
min_comparable_sentences. - Tolerant anchors. A paragraph edit outside the retained quote now reports
adjustedinstead ofchanged;lixity research reconcile-manuscript --accept-moved(or the review tab's accept action) re-pins line span,
paragraph hash and offsets as a new revision. Editing the quote itself still
requires review, and nothing is re-pinned automatically. - Chronology. A plain hyphen between four-digit years (
1929-1933) is
recognized as a same-precision range next to the typographic dashes.
Dashboard and interface
- The analysis view no longer reserves blank space for closed scene details.
- Count labels use singular forms (
1 Datei,1 Treffer,1 Zuordnung) in
all seven languages. - Serving the dashboard re-renders when the manuscript changed on disk, so an
open page never shows stale numbers.
Security
- The dashboard shell carries a per-response nonce Content Security Policy
(default-deny, inline styles only) plusCross-Origin-Opener-Policyand a
Permissions-Policydenying camera, microphone, geolocation, USB and serial
access. - Access and debug logs keep the route without its query string, so research
context and project tokens never reach log files.SECURITY.mddocuments the
full local-server baseline.
Compatibility
- Product version 0.4.7; JSON schemas and research storage are unchanged.
- Sentence statistics and withholding change numbers: recompute older reports
and dashboards before comparing values across versions. - Existing research archives stay readable (through
research-local/7); the
adjusted-anchor state is an additive review value. uv tool upgrade lixityselects this release; the pinned wheel is
lixity-0.4.7-py3-none-any.whl.
Full Changelog: v0.4.6...v0.4.7
v0.4.6
Lixity v0.4.6
Released 15 October 2026. A research-workflow and dashboard-usability release:
manuscript associations reach the command line, reviews follow the paragraph
instead of the file, and the analysis view gains precise anchors and chapter
folding.
Improvements
- Manuscript links on the CLI.
lixity researchgainslink-manuscript,
manuscript-links,review-manuscript,find-anchorand
reconcile-manuscript.find-anchorand--quote [--line]resolve exact
anchor fields against the displayed text, so offline scripts no longer need
to strip inline Markdown markers themselves. - Paragraph-level review. A changed source-file digest (
source_changed)
is informational and no longer marks associations for review while their
paragraph hash, line span and quote still match; an edit in one chapter does
not re-open every other link. - Explicit reconcile. A uniquely moved anchor is re-pinned as a new link
revision with the moved line span and the current file digest, from the CLI
(reconcile-manuscript --accept-moved) or directly in the review tab;
earlier anchors stay in history. Ambiguous or changed anchors are never
re-pinned automatically. - Dashboard polish. Paragraph strip chips scroll the opened passage into
view and flash it on arrival; chapters fold from their heading (jumps and
search steps expand them again); stale manuscript contexts offer a reload
action; long claim lists are filterable; stable 409 codes
(stale-context,stale-archive) map to localized, actionable messages.
Compatibility
- Product version 0.4.6; JSON schemas and research storage are unchanged.
uv tool upgrade lixityselects this release; the pinned wheel is
lixity-0.4.6-py3-none-any.whl.
Full Changelog: v0.4.5...v0.4.6
v0.4.5
Lixity v0.4.5
Released 15 October 2026. A feedback release for day-to-day research work:
faster archive commands, a preview mode for record edits and clearer failure
messages.
Improvements
lixity research <record> --diffpreviews an update as a terminal unified
diff (dossier bodies line by line, other fields as before/after values) and
never writes;--helpand error messages name the update requirements.- Research list commands read only the record kinds they display plus
withdrawal state:lixity research claim liston a 22k-record archive drops
from about 3.4 s to 0.38 s. The accepted snapshot digest and every JSON
envelope stay unchanged; write paths and lookups keep full-archive
validation. lixity buildreports an unwritableexports/folder (sandbox, read-only
mount) as one[error]line with a--dry-runhint instead of a traceback.
Compatibility
- Product version 0.4.5; JSON schemas and research storage are unchanged.
uv tool upgrade lixityselects this release; the pinned wheel is
lixity-0.4.5-py3-none-any.whl. Notes with product versions such as 1.18.0
or 3.0.1 predate the 0.3.0 renumbering.
Full Changelog: v0.4.4...v0.4.5
v0.4.4
Lixity v0.4.4
Released 15 October 2026. A maintenance release that consolidates the
installation and citation documentation and is the first version archived by
Zenodo.
Improvements
- One installation model across README, the installation guide, the landing
page and thellmsbundles: install and upgrade through PyPI
(uv tool install lixity,uv tool upgrade lixity); use GitHub Releases
when you need a pinned, checksum-verified wheel (SHA256SUMS, build
attestations); cite a released version through Zenodo. CONTRIBUTING.mddocuments the automated distribution chain: tagged
releases publish to PyPI automatically (trusted publishing, on-demand
catch-up viaworkflow_dispatch) and are archived by Zenodo.
Compatibility
- Product version 0.4.4; JSON schemas and research storage are unchanged.
uv tool upgrade lixityselects this release; the pinned wheel is
lixity-0.4.4-py3-none-any.whl.
Full Changelog: v0.4.3...v0.4.4
v0.4.3
Lixity v0.4.3
Released 15 October 2026. A maintenance release: the dashboard script is split
into cohesive modules, the analysis navigation and checkbox rows are shared
components, Lixity installs from PyPI, and the JOSS software paper is prepared
in the repository.
Improvements
- Shared components. The analysis section navigation renders from one
registry (ANALYSIS_SECTIONS) and every checkbox row uses one component
(checkbox_field), so new panels and controls reuse the same markup source. - Cohesive dashboard modules.
dashboard.js(5,524 lines in v0.4.2) now
keeps the generic core (796 lines); tooltips, analysis interactions, research
and project surfaces live intooltips.js,interactions.js,research.js
andproject-ui.js. The embedded load order preserves the original
execution sequence, verified by the browser suites. - PyPI first.
uv tool install lixity(or pipx/pip) is the documented
primary path in README, the installation guide, the landing page and the
machine-readable bundles; the pinned release wheel withSHA256SUMSstays
available for reproducible setups.
Tooling
- The release workflow accepts
workflow_dispatchwith ataginput: PyPI
catches up without recreating an immutable GitHub release (used for the
first PyPI upload of 0.4.2). make screenshotssynchronises embedded image dimensions from the real PNG
headers, so the documentation cannot drift from a re-render.- Repository hygiene:
.gitignoreand the hygiene test cover local process,
editor and tool state (.pypirc,nohup.out, logs, pid/socket/database
leftovers, editor autosaves, further tool caches).
Research
- The JOSS software paper draft lives under
paper/(paper.md,
paper.bib) with cited references; released versions are archived on Zenodo
so a specific version can be cited.
Compatibility
- Product version 0.4.3; JSON schemas and research storage are unchanged.
- Install or upgrade with
uv tool install lixity/uv tool upgrade lixity,
or the pinned wheellixity-0.4.3-py3-none-any.whl.
Full Changelog: v0.4.2...v0.4.3
v0.4.2
Lixity v0.4.2
Released 14 October 2026. A presentation and tooling release: the analysis view
gains a section navigation, shared components replace grown one-off styles, and
the local browser checks run in an everyday fast group.
Improvements
- The analysis view navigates itself. A section strip above the chapters
links to the flagged passages, sentence lengths, scenes, motifs, style and
chapter matrix panels, highlights the panel currently in view (scrollspy) and
only offers panels this document actually renders. Scene details render
off-screen content on demand, so the long scene list opens faster, and their
tables only show project-target and register-median columns when the project
defines them. - Phones reclaim the reading area. The analysis toolbar scrolls with the
page instead of covering almost half of the viewport while reading. - One control language. A single
form-checkboxcomponent replaces five
checkbox presentations in the analysis, research, project and image-dossier
surfaces; a compactctl-smbutton size covers the dense research lists;
section headings use the canonicalsection-heading; one-off classes
(secondary,ctl-primary,research-check,publication-enable) are
removed and guarded by tests. - One layout vocabulary. A global
.rowprimitive (previously only inside
the control panels) and spacing utilities on the shared--spacescale
replace the decile utility names; the Pages stylesheet consumes the canonical
design tokens without alias duplicates or a radius override. - Research API boundaries validate. Claim confidence, evidence relations
and dossier languages are normalised or rejected at the API boundary with
clear errors; record schema versions share one declared union. The models
carry no static-analysis suppressions.
Fixes
- Chapters stay fully rendered while scrolling. Deferred layout had shifted
anchor jumps and paragraph taps while the browser was still rendering
off-screen chapters; only the heavy scene-detail tables defer now.
Tooling
make browserruns the everyday core surfaces (eight suites) on three
parallel workers;make browser-fullruns every suite sequentially before a
release.--group fast|fulland--jobs Nselect this directly. On the
maintainer machine the everyday loop dropped from about eleven minutes to
under one minute.
Compatibility
- Product version 0.4.2; JSON schemas and research storage are unchanged.
- Upgrade from 0.4.1 with the release wheel
lixity-0.4.2-py3-none-any.whl.
Full Changelog: v0.4.1...v0.4.2
v0.4.1
Lixity v0.4.1
Released 14 October 2026. A patch release that fixes a layout regression from
v0.4.0 and completes the use-ordered project page.
Fixes
- The three workspace views keep their contents apart again. v0.4.0
contained a stray closing tag in the project page that closed the project
pane early, so its controls appeared in every view. The project pane now
closes where it should, verified by a parser-based pane-ownership test and
the layout browser suite. - The project browser badge no longer sits inside the entry button, which had
broken exact-text selection of project entries.
Improvements
- Project & Settings follows use order: project data (with the manuscript
comparison collapsed), Results (run analysis plus the generated-file
list, renamed from "publications" to stop clashing with "Book and
publication"), the collapsed publication fields and thresholds, and the
confidentiality agreement last. - The settings page explains itself: a page introduction, a title hint,
default values on every threshold ("Default: 2.5"), a default marker on the
flag severity option, and the FDR method as a real dropdown
(Benjamini-Hochberg / Benjamini-Yekutieli). - Research record lists render as a terminal table:
lixity research dossier list --format table(ID, title, revision, date);
sourcesaccepts the explicitlistverb like the other record commands. - The untrusted-host response names the loopback URL to open, which removes
the "Direct IP access" confusion in containers and headless setups. - Structure guard: rendered dashboards are checked for balanced tags and
pane ownership intests/test_ui_contract.py.
Compatibility
- Product version 0.4.1; JSON schemas and research storage are unchanged.
- Upgrade from 0.4.0 with the release wheel
lixity-0.4.1-py3-none-any.whl.
Full Changelog: v0.4.0...v0.4.1
v0.4.0
Lixity v0.4.0
Released 14 October 2026. This release turns the analysis report into a composed
document, adds the editorial review loop to the research workspace, publishes
public-domain example analyses and makes project handling recognizable.
Highlights
- The A4 analysis report is a document now. It opens with a cover page and
sets its figures as aligned tables: rows stay whole, the header row repeats
after a page break, numeric columns right-align, and wide tables step their
type down instead of breaking headings. The PDF carries an outline, and the
Guiraud label prints asV/√Ninstead of raw LaTeX. Book covers start on
the optical third of the page. See the complete
Effi Briest
and Pride and Prejudice
reports. - Saved manuscript associations appear in the research Review tab. Anchor
state, review flags and the pinned quote are listed; moved, changed or
ambiguous anchors stay unresolved and are never repinned silently. - Two public-domain examples (Effi Briest in German, Pride and Prejudice in
English) show an interactive excerpt next to the complete PDF report; the
editorial-loop walkthrough documents the flagged-passage workflow. - Project handling is recognizable. The file browser marks Lixity project
folders and reports config, research archive, title, language and manuscript
for the listed folder; the header shows a compact project line (chapters,
words, file). The Project view lists the manuscript before its settings, and
the side-by-side reader groups its controls with a close action. - Research record commands accept an explicit
listverb; read/revise
envelopes namekindandrecord_id(additive); scene detection also
recognizes spaced divider lines, em-dash rules and the asterism; the local
server accepts IPv6 loopback hosts.
Compatibility
- Product version 0.4.0; product, JSON and archive versions remain independent.
- Analysis/profile JSON is schema 2 and style JSON is schema 4, unchanged.
- Research archives remain readable through v7; v0.4.0 reads every archive the
0.3.0 release wrote. - Installation remains the signed release wheel or
git+https://…@v0.4.0. The
package is not yet published on PyPI; the publish job is prepared.
Known limits
- Fixed-layout PDF only: no EPUB, PDF/UA or PDF/X preflight.
- Analysis is deterministic for fixed text and settings; heuristics are
language-specific and documented, not quality scores. Authorship attribution
and AI-text detection are out of scope. - The research workspace is experimental; sources remain private evidence.
What's Changed
- chore(deps-dev): bump ruff from 0.16.8 to 0.17.0 in the python group across 1 directory by @dependabot[bot] in #16
Full Changelog: v0.3.0...v0.4.0