Aktuelle Version v0.15.0 · Stand
752c495 (2026-08-17) ·
1175 Änderungen ausgewertet.
v0.15.0 in Entwicklung
Überblick
Diese Version sagt „noch keine Aussage“, wo sie bisher geraten hat: Prüfpunkte ohne belastbaren Befund enthalten sich ausdrücklich, statt eine Bewertung zu erfinden. Dazu kommen ein zweiter, EU-lokaler Texterkenner samt Herkunftsangabe auf der Ergebnisseite, Messläufe über ganze Dokumentbestände statt Einzelfälle, und eine Weboberfläche, die auf allen Seiten dieselbe Sprache spricht.
- Enthaltung statt Behauptung: Wo ein Prüfpunkt sich nicht belegen lässt — kein ausgezeichnetes Überschriftengerüst, ein nicht nachweisbar weißer Hintergrund, eine abgebrochene Teilprüfung — steht jetzt „noch keine Aussage“ statt eines erfundenen Ergebnisses. Umgekehrt bindet ein entschiedener Kriterienverstoß das Gesamturteil, wie es die Spezifikation immer vorsah.
- Zweiter Texterkenner, EU-lokal und abschaltbar: Gescannte Seiten können über einen zweiten Erkennungsdienst gelesen werden, mit eigenem Schalter, eigener Messreihe und Werkseinstellung „aus“. Die Ergebnisseite nennt jetzt, welches Modell das Dokument gelesen hat und mit welcher Fähigkeit.
- Messen statt vermuten: Ein Prüfbestand lässt sich vollständig und unterbrechbar durch die echte Verarbeitungskette fahren; die Auswertung nennt zu jeder Kennzahl ihre Grundgesamtheit und verweigert die Aussage, wenn der Vergleichsmaßstab entartet ist.
- Eine Sprache auf der ganzen Oberfläche: Zwölf Seiten teilen sich eine gemeinsame Seitenhülle und eine Navigation, das Urteil heißt überall „Ja“, „Nein“ oder „noch keine Aussage“, das Upload-Formular kommt mit 84 statt 213 Wörtern aus, und interne Bezeichner erscheinen nicht mehr im Text für Anwenderinnen und Anwender.
- Betrieb und Sicherheit: Der Zugriffsschutz der Produktionsumgebung ist scharf gestellt und schriftlich zugeordnet, die Bereitschaftsauskunft nennt, welche Verarbeitungsstufen tatsächlich einsatzbereit sind und verweigert sonst den Start, und abgelaufene Ergebnisdateien werden auch im asynchronen Betrieb zuverlässig gelöscht.
Technische Änderungen (für Entwickler:innen)
Neue Funktionen (48)
-
measure Option C on 80 gazettes, and find that a FAILED judge is what binds two of three verdicts
eval
7a79371 -
name the cause a run-record row could not decide on — #1089
telemetry
ff598ce -
read both Option-C arms out of one run, by writing at the seam instead of guessing
eval
8cdb0d7 -
messe die Trennschaerfe des Ja/Nein gegen 306 ua:*-Gold, und benenne, was daran tautologisch ist
eval
473f9bf -
make the heading judge name its finding, and check the name against the bytes
eval
f4f1fcd -
kalibriere die Stellschrauben um den Ueberschriften-Judge herum
eval
97034c1 -
let a decided criterion failure bind the document verdict, as the spec always said
verdict
d5dce8a -
make the 80-document abstention measuring rail reproducible
eval
d58973c -
compute the five dimensions the composite routes to Tier 1 — #1083
eval
c32d611 -
carry the nine produced-but-unrecorded signals into the run record
telemetry
57992df -
let a run-record name the arm it ran under
telemetry
e2b98c4 -
say what is armed, and refuse to boot a stage that cannot run
ready
747607c -
a reliability number that carries its denominator and refuses a degenerate gold
eval
fa4b4d5 -
one decision on the upload form — 213 visible words down to 84
ui
0e3b0c8 -
say Ja, Nein or Noch keine Aussage — one vocabulary instead of two
ui
8a94a45 -
measure the check-only verdict against the UA gold, and name which half of it is a tautology
eval
7347304 -
put the answer above the form and make the focus actually land on it
ui
96cb952 -
say which model read the document, and with which capability, on the surfaces a consumer sees
provenance
e1d3f31 -
measure the class the guard cannot see, and find it is not the class the router excludes
eval
7a73cea -
measure the reading order against the bytes the box delivers, not the tree it keeps
eval
678beb8 -
make a corpus run say what to fix next — and when it measured nothing at all
eval
0244a11 -
drive a whole corpus through the real pipeline, resumably
ops
364098e -
let the other reader read the same page, and measure where the two disagree
parse
9490e02 -
give the second OCR endpoint its own series, instead of a label on the first
observability
276dd16 -
record WHICH weights answered, so an alias stops passing for an identity
eval
9434eb4 -
measure fabrication where there is no gold, and find the consensus is the layer
eval
8fcac05 -
measure the table axis against the page's own text layer, and find the gap is loss, not binding
eval
57e5f1f -
route both parse passes through the occupant switch, and let the chart flip it
ocr
db71350 -
give the second reader its own triple, its own latch, and a switch that ships off
ocr
4dbe516 -
give the undecodable HTML table a counter, and tell a refusal from a fault
observability
9c7ad42 -
give LightOnOCR its own conditions, and find its preprocessor caps the resolution at 1540 px
eval
0906e4d -
read the table dialect LightOn actually speaks, and count what an OCR page cost
parse
0c06e25 -
count VLM tokens where the round-trip is, not where the terminal row is
observability
d7019c3 -
let the text axis say "not measured" on the wire, not only in the log
fidelity
04c8dd1 -
measure whether either OCR model rewrites a statute name, and give the zero a positive control
eval
efa19b7 -
run both lanes of a #954-repatriated document side by side, at one named commit
eval
14423fa -
make the paddle endpoint reachable, and prove it with a live test
ocr
78674aa -
let the text axis abstain instead of certifying a scan it never read
fidelity
ff40ba4 -
tell the matcher's own offset apart from the headings that never transferred — refs #963 #896
eval
fc3a7d0 -
hold a gate-rejected fixture out by declaration, not by shrinking the pool — #980
eval
1268290 -
give VLM token spend an alerting surface and a billing column — #1014
metrics
31b90d3 -
measure where the text-layer guard cannot decide, and score the two candidate stand-ins
eval
59fc350 -
give D5 a reference point outside the level it scores
scoring
4d34fdc -
measure the three Paddle routing exclusions, and freeze the testset that did it
eval
88b48bc -
give the Paddle endpoint a state, so 403, 502 and timeout stop being one error
health
d456bcf -
wire the delivered-placement census into the fidelity report, advisory
quality
fba941a -
name the untagged grid the #1038 drop left silent — refs #1051 #1038 #726
quality
016b7b1 -
make the WeasyPrint tagging degrade loud instead of silent
ops
5dd634f
Fehlerbehebungen (65)
-
gate the audit-lane veraPDF ratchet on the binary, and host it where the binary is
tests
752c495 -
make the Option-C control count documents, not seam calls — it read 20 of 108 where the corpus has 78
eval
43cd519 -
re-pin the skip ceiling on a derived reserve, and make the guard count what it claims
ci
8936b92 -
answer per criterion on the audit lane instead of shipping an empty verdict map
pipeline
3f73bab -
read the stack's verdict from the bound gate, not the raw veraPDF leg
batch
6b58365 -
abstain on a heading-less tag tree instead of stamping a defect it cannot prove
scoring
f79300e -
anchor the hermeticity guard to the sweep, not to a later moment
tests
77f5f46 -
abstain 1.4.3 when the background is not provably white, instead of assuming it
quality
15b196d -
fill the second fixture raster the #1078 fix left behind
tests
fa7bbd1 -
fold the decided contrast rows, not only their abstentions — #1085
pipeline
04e2ed7 -
abstain the heading corroboration when nothing aligned, instead of failing — #1083
eval
b0d231c -
send the model id the endpoint actually serves, and ask it at boot
ocr
1a741be -
keep the sentence that explains the verdict next to the verdict
ui
600fc38 -
the sentence that revokes a PASS must not read as a contradiction
quality
6ad1af2 -
bind the abstention tests to the app's Jinja env, and finish the jargon removal in the admin banner
tests
e8018a3 -
drop the TTS engine's name from the page and from the runtime labels
ui
b716e0d -
the last three internal words on the result surface
ui
731c722 -
collapse the developer half of the changelog by default
ui
2923497 -
a crashed condition reducer must not certify zero violations
scoring
8fcead6 -
raw identifiers out of the surface, and the a11y defects in the a11y tool
ui
782e232 -
reject invisible and non-latin-1 names on the unauthenticated gate POST
security
b617f85 -
arm the production auth riegel and write down who carries the auth
security
22215e0 -
sweep expired tagged PDFs on a path the async deployment actually runs
pipeline
1e65005 -
react to the swap that actually delivers the result, not the one that starts it
ui
5a59845 -
make the gold content hash document-specific — v2.2 could not tamper-check 16 % of docs
eval
897d915 -
fill the fixture raster the abstention test claims it keeps — #1078
tests
05e6d9a -
guard the last endpoint field that could still swallow a doubled /v1
config
4ff8047 -
read the shadow roll-up the shadow lane actually writes, not the shape we guessed
eval
064fcef -
let the two FAST-OCR backends wrap the instrumented reader, not the narrow one
observability
62fc2cd -
ask whether the FAST-OCR slot has an occupant, not whether Paddle is configured
routing
36c6558 -
stop the overlay spike from reading an abstained 1.0 as a measurement
spike
446974c -
adopt the base's usage twin in the crop stage, instead of probing for a keyword
observability
aa4bf40 -
let the one place that says 'do not deliver' be the place every consumer asks
tag
b069171 -
let the chart aim the endpoints it can already arm
helm
b69b102 -
stop scoring a scan's own page raster as a lost image
fidelity
ac4b9df -
stop reporting an answered-but-undecodable OCR call as an outage
parse
7e9c9dd -
decide once whether a raster is the page or sits on it — #1054
merge
d58685d -
strip internal issue references from the sidecar's own published OpenAPI
sidecar
6631500 -
make an empty baseline window visible in the machine sidecar
eval
8330516 -
let a heading family's numbering level the whole family, not only its children
merge
08f2ee7 -
stop restoring a once-only masthead on every delivered page
tag
7ad4ef8 -
name the five degrades in the FAST path, so a fault stops looking like a result
parse
bd794a5 -
teach the consumers to read the named degrade, starting with the silent denominator
eval
07ee8a9 -
enrich the two hand-appended findings so their tags reach the wire
check
688c3da -
stop two wave-3 tests from asserting their own environment
test
4a91285 -
let a hierarchical section number beat the H6 level floor
parse
cdcd912 -
make the column split check that both sides are populated, as its docstring claimed
parse
d93616c -
let the OCR witness reach the resolution its own comment promises
quality
6793cb9 -
stop the #1052 gate test from splitting the src.tag.overlay module graph
test
1b4e6d3 -
de-fang the degrade test's PII bait and pin its historical gitleaks finding
security
ce097d3 -
thread the #1037 source filename into two dead harnesses, and gate the blindness — refs #1037 #1043
eval
8c034b9 -
tag the two live checks the map silently omitted — refs #1051 #1043
quality
63dafb4 -
recognise an index whose printed leader is not a dot — refs #1050 #695 #705
quality
418d072 -
stop delivering a bilevel scan as 8-bit RGB
tag
1442a02 -
cap the figure raster to the page so a scan is not delivered half off-sheet
tag
b86b258 -
pass the uploaded filename to the doc-title reconcile
pipeline
7b2e0aa -
read the queue-depth gauge from the durable store, and decouple the tag gate
ops
1a0102e -
make the BGBl citation rule survive its own punctuation collapse
eval
e7d1264 -
give four archetype-scoped rules this repo's real surface
rules
96f2e70 -
compare the delivered title against the filename stem
scorecard
daa78cf -
stop discarding a present input text layer blindly
parse
3d20857 -
restore PyMuPDF's process-global glyph-height flag after every fast parse
parse
bd862a6 -
bind the tag-stage capability gate to the route that needs it
pipeline
0cf8229 -
make the degrade total, and make it say that it degraded
quality
108235b -
deliver the six security headers on the K8s path, not only on the box
helm
2780b57
Performance-Verbesserungen (3)
-
reserve the result viewport inside the click, so the swap shifts nothing
ui
d1f800b -
build the docling freeze fixture repo once per module, not once per test
test
492cba9 -
narrow each page's /Resources /XObject to what the page actually draws
tag
f6691b6
Refactoring (intern) (3)
-
expose the link-purpose judgement as a carrier-agnostic seam — #1083
eval
66cdf2b -
one page shell and one navigation for twelve pages
ui
af8930b -
one answer on the result page, nineteen numbers on the audit page
ui
b8cf2fc
Dokumentation (39)
-
MD-015 — read the artifact's own justification before calling it a defect
rules
3dbc21e -
re-measure Gate 3 instead of citing a two-day-old count
launch-gate
f567765 -
correct the engine's self-report against HEAD — #1083
eval
807c341 -
regenerate the 0.15.0 window — 40 features, 56 fixes, 63 other changes
changelog
b5ecd84 -
record the three arming repairs and their measurements — #1081
changelog
5102241 -
the autonomous path to AAVS, and the misreading that hid it
plan
039cc02 -
state the full denominator in the header, not only in the addendum
eval
4487cb6 -
close the before/after measurement at the full denominator, 80 of 80
eval
a2dbca2 -
measure the FAST/SLOW seam and name what tunes, what does not, and what must not
eval
4b9858e -
name the fifth constant dimension, where the control inverts
eval
b44c458 -
replace the quoted reliability numbers with measured ones, denominator attached
eval
bffe283 -
point gate 5.1 at the measured licence inventory and the open decision
launch-gate
563e491 -
write down which licences we actually ship, instead of the ones we claimed
compliance
cd61e39 -
decide all 19 boxes against evidence, not against hope
launch-gate
768bc36 -
record the second red gate and the measured blast radius of the v2.3 hash change
eval
7821eb0 -
re-measure the decision numbers on the checkpoint that is actually served
eval
28b41b5 -
make the LightOn switch operable, and name the gate that is still Paddle's
ops
61c99aa -
correct two docstrings that outlived what they assert
truth
e0a9d65 -
write the 3-criteria ADR gate into the template its citations point at
adr
631e775 -
decide the model on the axis a wrong statute name lives on, not on conformance or CER
adr
aabde1e -
measure the axis a tagging engine is actually paid for, and find one arm delivers 66 headings and the other 0
eval
9c8ff6e -
measure what the three #954-repatriated documents actually deliver, on both lanes
eval
e472fd8 -
measure the LUMI-served OCR pair against the local baseline, and find one arm that never repeats itself
eval
f411251 -
catalogue the two token counters, and re-count a claim that had drifted by three
metrics
b2fe63e -
ratify that the unframed section index is a list, not a table — #957
adr
9037598 -
stop citing #969 for the heading work it never covered
refs
0c6bd44 -
read the baseline marker before the flag count, the second blind consumer
loop
49480b7 -
preserve a parallel session's LightOnOCR-2 vs PaddleOCR-VL head-to-head
eval
499c4d8 -
record why the no-text-layer exclusion stays, and which of its reasons did not
parse
4cb9fdd -
the xdist OOM veto was a half-quote, and the line number was unfalsifiable
rejected
81fb6d2 -
MODEL_NAME is read by the Paddle path, the comment claimed the opposite
env
f3efb08 -
price the duplicated 150-dpi page render, and record why it stays
parse
e42e70b -
write the 0.15.0 unreleased window from its own commit bodies
changelog
bc0ec9b -
correct the four claims the scorecard adapter outlived — refs #1037
pipeline
f29a4fc -
record Pass B's measured blast radius and its order sensitivity
tag
2ce7cec -
record what welle 1 delivered, and re-cut what it only half delivered
backlog
e3b30e2 -
name the pre-registration scope in the criterion heading too
research
e5c0179 -
measure what the scan reflow actually delivers — CCITT, page count, routing
research
cf31da8 -
write down the four version-coupled artifacts and their order
release
739256e
Tests (19)
-
mutate the tag tree of real gazettes to test whether the synthetic heading numbers transfer
eval
39c981d -
show that the heading judge fails because it is blind, not because it cannot judge
eval
58d13c7 -
derive the env hermeticity from Settings instead of a 9-key hand list
conftest
fc0a941 -
prove whether the contrast screen can say NO, instead of assuming it
quality
35cedb9 -
measure the eval slice's decided cells instead of asserting them — #1083
eval
18310a7 -
assert that T2 ran, not that the developer has the corpus on disk
eval-api
c502c28 -
pin the boot probe to its own short timeout, not the inference one
arming
7e87738 -
assert the German reading, and that the raw token is gone
evidence
c676d5d -
move the FAST-OCR patch surface to the factory the code now calls
parse
2a639de -
pin the resource-prune wiring, not just the function
tag
d28aaf5 -
re-seat the amsldoc heading-level pins, four subsections moved 6 to 2
parse
e26b558 -
derive the check_id coverage guard from the tree, not from a list — refs #566 #1008
quality
066d72e -
bind two stale test premises back to the contracts they pin
pipeline
6d581d6 -
drop an unused helper from the Pass B test module
tag
84c6eee -
measure which cause moves the statistik_wohnen composite — and which one does not
eval
0e0bac1 -
census the byte-identical fixtures instead of deleting one of them
eval
44d4746 -
hold the frozen judge bundles against the gold they came from
eval
b53a3ff -
close the filename chain from run_pipeline to JobResult.filename
pipeline
7709ef1 -
derive the _garbage_reason consumer list instead of maintaining it
triage
4b5cebc
Build-System (1)
-
assert the router runtime at build time, not at an operator boot
docker
cf45815
Code-Style (6)
-
unyoda the verdict-calibrating set comparison
eval
97d590b -
finish the token set, then dark mode costs fourteen lines
ui
2410dd2 -
wrap four docstring lines that quote the new verdict strings
tests
ad36f8f -
name the exception the air-gap test is actually asserting
test
3885a65 -
satisfy ruff line-length and formatting on Pass B
tag
04618d1 -
drop a noqa for a rule this repo does not select
test
4bab834
Sonstiges (1)
-
open the 0.15.0 unreleased window the 0.14.0 tag never opened
a372aad
Frühere Versionen
Jede dieser Versionen ist vollständig abrufbar — mit allen Änderungen, unverkürzt. Hier steht nur der Überblick; der Link führt auf die ganze Version.
-
v0.14.0 2026-08-12 142 Änderungen
Diese Version bringt 41 neue Funktionen, 56 Fehlerbehebungen, 45 weitere Änderungen.
-
v0.13.4 2026-08-03 10 Änderungen
Diese Version bringt 1 neue Funktion, 5 Fehlerbehebungen, 4 weitere Änderungen.
-
v0.13.3 2026-07-29 6 Änderungen
Diese Version bringt 2 neue Funktionen, 2 Fehlerbehebungen, 2 weitere Änderungen.
-
v0.13.2 2026-07-27 3 Änderungen
Diese Version bringt 1 neue Funktion, 2 Fehlerbehebungen.
-
v0.13.1 2026-07-26 3 Änderungen
Diese Version bringt 1 neue Funktion, 2 Fehlerbehebungen.
-
v0.13.0 2026-07-26 89 Änderungen
Diese Version bringt 27 neue Funktionen, 24 Fehlerbehebungen, 38 weitere Änderungen.
-
v0.12.0 2026-07-17 78 Änderungen
Dieses Release macht den AAVS-Prüfbericht zum verbindlichen Partner-Standard (Report-Contract v2 mit Fundstellen-Angaben und englischen Feld-Übersetzungen), macht den KI-Betrieb ausfallsicher (automatischer Wechsel auf einen zweiten EU-Anbieter) und macht die Prüf-Urteile ehrlicher: fehlende Sprachangaben werden gemeldet statt still angenommen, und bereits konforme Dokumente werden geprüft statt unnötig neu geschrieben.
-
v0.11.0 2026-07-08 74 Änderungen
Dieses Release macht die Prüf-Urteile ehrlich und nachvollziehbar: Das Gesamturteil ist jetzt hart an alle drei Prüfstränge gebunden (Konformanz, WCAG-Qualität, Inhaltstreue), die Ergebnisseite zeigt ein primäres Verdikt statt elf konkurrierender Anzeigen, und ein neuer maschinenlesbarer AAVS-Prüfbericht (137 Matterhorn-Kriterien) ist per API abrufbar.
-
v0.10.0 2026-07-05 270 Änderungen
Dieses Release macht die automatisierte Barrierefreiheits-Prüfung (AAVS) für externe Tester nutzbar: eine neue In-App-Hilfeseite erklärt die Nutzung und die Bedeutung der Prüf-Urteile, ergänzt um dokumentierte API-Zugänge für den Tester-Audit-Pfad.
-
v0.9.0 2026-06-23 244 Änderungen
Diese Version bringt 118 neue Funktionen, 40 Fehlerbehebungen, 86 weitere Änderungen.
-
v0.8.0 2026-06-08 71 Änderungen
Diese Version bringt 31 neue Funktionen, 11 Fehlerbehebungen, 29 weitere Änderungen.