Skip to content

page-classification — Changelog

The release history from v0.1.0 on. The canonical entries live in the tool's CONTRIBUTING.md, one table cell per release. This page gives the same history in two other shapes: a scannable line per release, and the arcs those releases belong to.

Versions below v1.0 were research milestones; from v1.0.3-beta on, each release is a usable program, published as a GitHub pre-release with its container images.

The five arcs

Read top to bottom, this is the project's whole story.

1 · Finding a method that works (v0.1.0 → v0.9.0). Two approaches were tried and abandoned, and the changelog says so in as many words: DeepDoctection layout analysis plus a hand-written categorisation rule (v0.1.0, marked [FAILED]), then a Random Forest over manually extracted texture and colour features (v0.2.0, also [FAILED]). v0.5.0 is the turn: switch to fine-tuning Hugging Face base models against a labelled page dataset. v0.7.0 widens that to the ViT family, v0.9.0 to EfficientNetV2, RegNetY and DiT, and adds cross-validation.

2 · Picking the five (v0.11.0 → v0.12.1). A twelve-model sweep settles on RegNetY as the leader and five models as the ensemble; result averaging, the --best path and a first API draft land together. This is where the two version namespaces documented in Reference originate.

3 · Becoming a program rather than a study (v1.0.3-beta → v1.4.3-beta). Pytest arrives; sample images are replaced with CC BY-NC 4.0-licensed ones; data-processing scripts get their own unit tests; a Docker wrapper appears (v1.2.1-beta, explicitly "draft, untested"); YOLO-cls is added to the entry point and paradata gains licence resolution (v1.2.0-beta); memory-aware parallel --best lands (v1.3.0-beta); files are reorganised into sub-directories and the source goes through LLM review (v1.4.0-beta–v1.4.3-beta).

4 · Joining the ecosystem (v1.5.0-beta → v1.7.5-beta). The repository stops being standalone. folds_csv replaces by-seed split selection so a model's original split can be reproduced; the paradata template is shared across repositories; agent_dev_logs/ replaces issue comments. Then the atrium_document standard is integrated (v1.7.0-beta), workflows migrate to the hub's reusable templates pinned at @v1 (v1.7.2-beta), and the release bundle gains an AST-based completeness guard (v1.7.1-beta). v1.7.4-beta and v1.7.5-beta are re-vendorings of the shared atrium_document.py as its contract tightened — doc_id inherited from the baseline rather than re-derived, set_source() filling sub-keys a partial first write left unset.

5 · Standards and service contracts (v1.8.0-beta). The densest single release, described in full below.

v1.8.0-beta

Four things land at once, and they are independent of each other.

The ensemble default moves to v*.4. REVISION_BEST_MODELS now names v1.4–v5.4 — the same five base models, retrained on the CC BY-NC 4.0-only subset. The switch was held back deliberately: for three days every v*.4 revision on the Hub served the same regnety_160 checkpoint, so flipping the keys would have averaged one model with itself five times, returned well-formed predictions, and still reported a five-model ensemble. Nothing would have raised. tests/test_best_ensemble_distinct.py now makes that unshippable — a static half asserting five distinct base models, and a -m slow half that reads each revision's config.json from the Hub.

Two ecosystem standards. SKOS via atrium_vocab.py — six concept schemes, stable w3id.org/atrium/ URIs, advisory-only validation — exposed to this tool through model_registry.category_uri(). And RO-Crate via atrium_rocrate.py, with deterministic document_crate() and run_crate() builders.

Service contracts. /ready and /health?deep=true drain semantics; $PORT and HOST honoured through python -m service.api; a published .env.example enforced by test_env_contract.py; and logging.basicConfig() removed from service/inference.py, so LOG_LEVEL takes effect.

Two breaking changes in this release

atrium_document.schema.json tightens required and adds anyOf/allOf, so records that validated before may now fail. And service/frontend/script.js no longer hardcodes :8000 for every localhost origin.

Every release

Version What changed
v1.8.0-beta Ensemble default → v*.4; SKOS and RO-Crate land; /ready and deep health; .env.example; two breaking changes (see above)
v1.7.5-beta Re-vendored atrium_document.py (set_source() fills sub-keys a partial first write left unset); four MagicMock masks removed that had made test behaviour depend on pytest's collection order; CI concurrency scoped so a push cannot cancel a cron
v1.7.4-beta doc_id inherited from the baseline instead of overwritten, so no stage can re-key an accreted record; per-page and whole-document upload paths share one derivation
v1.7.3-beta End-to-end CI for document-JSON input/output refined and tested against the draft schema
v1.7.2-beta Workflow references repinned to the hub's @v1 tag
v1.7.1-beta CI/CD hardening. The release zip now ships the nine first-party modules reached transitively, with an AST guard that fails the build if it is ever incomplete again
v1.7.0-beta atrium_document input and output integrated; paradata template aligned with the hub
v1.6.0-beta Latest versions moved to v*.4 for the licensed dataset; draft OpenAPI conformance
v1.5.1-beta Licence tests per the shared template; automatic version reading fixed
v1.5.0-beta --folds_csv replaces by-seed selection, so an original split can be reproduced; shared paradata template; agent_dev_logs/ introduced
v1.4.3-beta Dataset link repointed at the licensed data
v1.4.2-beta Ruff applied; secret-scan removed
v1.4.1-beta Second LLM review round; Docker CI alignment
v1.4.0-beta Files reorganised into sub-directories; source-level review edits
v1.3.0-beta Memory-aware grouped parallel execution for --best; Docker wrapper and API service aligned
v1.2.1-beta Docker wrapper — draft, untested
v1.2.0-beta YOLO-cls added to the entry point; paradata gains model-licence resolution
v1.1.0-beta Sample images replaced with CC BY-NC 4.0-licensed ones; data-processing scripts finalised with unit tests; CLI I/O flags widened
v1.0.4-beta Pytest for core pipeline components; CONTRIBUTING gains a testing guide and the release history
v1.0.3-beta First beta of the finished program: empty CLASS/SCORE pairs in averaged output, reduced-size example results for the Prague and Brno collections, data licence for the shared page samples
v0.12.1 Best five models fine-tuned; result averaging, --best, API draft, data scripts
v0.11.0 RegNetY selected as leader, five models chosen; filename-format parsing widened
v0.9.0 EfficientNetV2, RegNetY and the DiT family added; cross-validation and averaging; dataset published
v0.7.0 Several ViT variants; architecture diagram
v0.5.0 The turn: switch to fine-tuning Hugging Face base models; training dataset refined; data scripts supplied
v0.2.0 Random Forest over hand-extracted image features — [FAILED]; first use of the labelled dataset
v0.1.0 DeepDoctection OCR + layout analysis with a manual categorisation rule — [FAILED]

Sources

Read from ufal/atrium-page-classification at branch vit, commit adee922 (2026-09-23). The arcs are written here, not taken from a source. This table records provenance, not a build instruction.

Source What was taken from it
CONTRIBUTING.md § 📦 Release History every release line and the v1.8.0-beta description
CITATION.cff the current version and its release date