1.3.0: document the manager hot-swap reload pattern Typed References gains "Surviving a reload" (replace/managerReplacing, the mandatory clearCache and the flush -> clearCache -> close order); Gotchas pins the memoized default-policy staleness of a ref that crossed a swap. Coordinates bumped to 1.3.0.
Stop saying the file backends have no push feed They gained one in 1.2.0 - the operating system's own watch service - and a version stamp taken from the file, so polling over them detects updates and not only deletes. Six pages still described the state before that: the per-backend matrix, the push-vs-poll rule, two capability tables, and the "see also" line on both file-backend pages. H2 keeps the deletes-only caveat, which is true of H2 alone: it is the one backend reporting version 0 for every key it holds. Also bumps the artifact coordinates to 1.2.1, and renames the heterogeneous-backend "fan-out" after the term stopped naming one thing.
Say that a directory is the unit of separation A grouped-file base directory holds its key files directly, and a scan reads all of them, so collections keyed by unrelated things are better off in separate directories - which is a second storage, not a setting. Also documents what happens to key files found in a sub-directory: the open fails naming it, rather than adopting the directory as empty and writing a second copy beside data nobody can see.
Say when a grouped-file count refuses to answer A key file that will not parse belongs to no collection, so count() and keys() fail instead of returning a number that silently omits it. Record that on the pages a reader lands on: the CRUD contract, the grouped-file page (with the full per-read table), the cheat sheet, the gotcha list and the exception index. Also corrects two claims that were already wrong before this change: the cheat sheet called keys() a directory listing on both file backends when only LocalFile is one, and the log-level table filed a skipped corrupt row under WARN without noting that a read answering with a count or a key set does not degrade - it fails.
Bump wiki artifact coordinates to 1.2.0
Document the 1.2.0 file-backend work Both file backends now record their own on-disk format and refuse a codec that disagrees, both push changes through the OS watch service, and their version stops being a constant zero - so several pages said things that are no longer true: that they have no change feed, that polling over them catches only deletes, and that versions() reports 0. Grouped Files gains sections on key spaces, directory fan-out and the key-major loadKey/batchKey API; Local Files gains its capability table and the per-collection format record.
Bump wiki artifact coordinates to 1.1.0
Document Map order preservation and cache-sync store scoping Update the pages touched by the 1.1.0 behavior changes. Codecs now describes Map entries as written in insertion order (every profile), dropping the old key-sorting claim. Cross-Process Cache Sync gains a "scoping by physical store" section and a SyncParticipation gotcha box, and bumps its install coordinates to 1.1.0. A new Gotchas entry warns that a machine-local backend does not publish on the transport by default. Design & Internals notes the backend-identity idiom, and Cache Policies notes the publish caveat next to the TTL guidance.
Update the install coordinates to 1.0.9
Surface the new pages on Home and fix two reversed wiki-links Route the landing table to the payload-schema and write-back pages, and disambiguate the DDL row now that a second schema axis is documented. Also repair two aliased links whose display text and target were swapped, so they pointed at pages that do not exist ([[Codecs|Codec]] and [[Choosing a Backend|backends]]).
Document the reserved namespace and the maintenance repository surface Explain how the leading-letter collection rule is what makes '_' a safe framework namespace, and Builder.reserved() as its escape hatch. Add scanAll (ScanRow, and the isFailed-before-value trap), WriteMode and the versions() enforcement caveat to the CRUD page, and cross-link the three version axes from the schema migrations page.
Document the enforcement capability and the manager write freeze Add Storage.enforcesOptimisticLock (with the design note on why it is a boolean rather than a capability interface) and SyncBindGuard to the locking page, and the freeze/FreezeHandle lifecycle to the caching managers page, including the defer-vs-fail matrix and the leaked-handle, TOCTOU and external-collector traps.
Add payload schema evolution and write-back conflict pages Document the per-entity payload schema axis (EntitySchema, the step chain, LAZY/EAGER and its backwards cascade, the migrating codec, and the eager sweeper with its _entity_schema_sweeps hint marker), and the write-back engine (the five conflict branches, ADOPT_WINNER, the per-type hooks, and the ahead-write guard).
manager: note dirty cells are pinned against LRU eviction; bump coordinates to 1.0.8
Tighten and fact-check every wiki page (concision + correctness pass) Swept all 41 content pages for concision (cut rambling/hedging/repetition, prefer scannable tables and short sentences) and verified every load-bearing technical claim against the source. Real fixes: Local-Files documented the removed prettyPrint/fsyncEvery LocalFileConfig constructors (gone since 271962d) - rewritten to the one-arg config; Grouped-Files' stale cross-refs to those knobs corrected. Added a few source-backed facts that were missing (nested inTransaction throws, duplicate migration version rejected at register(), getAll never returns null). No behavior claims changed beyond matching the code.
Sync wiki with adversarial-review fixes Coherence updates for the landed fixes: file backends are crash-atomic (not fsync-durable) and hash-truncate over-long keys; H2 never enforces optimistic locking in any mode incl. TCP; null Long version reads as 0; currentVersion() reports the greatest applied version and InMemory close() resets the ledger; FAIL_FAST yields exactly one error; CacheSync mode + Jedis malformed-payload reporting; non-Comparable map keys serialize unordered; numeric cross-type range on scan backends; progress-tick OR semantics; catalog is the single version source.
docs: sync wiki with current code — grouped-file backend, versions, capability accuracy New page: - Grouped-Files.md — the key-major aggregate-file backend (one file per key, every collection as a sub-node; FileKeyNames sanitisation; atomic writes; SchemaAware via _schema/migrations.json; full-scan queries with declaration validation; no transactions; versions() = 0), plus a _Sidebar entry. Factual fixes across the wiki against the current code and libs.versions.toml: - Seven backends everywhere (GroupedFile added to matrices/lists); the "six backends" phrasings that were specific to MultiBackendRefExampleTest and the six-key example were left correct on purpose. - Single Java 25 toolchain build (sourceCompatibility=25 + options.release=8, Jabel FinalCraft fork) — removed the stale JDK-17 compiler-pin / ~/.jdks blocks. - Dependency and project versions: Jackson 2.22.0, mongodb 5.8.0, mysql 9.7.0, postgresql 42.7.12; project coordinates bumped to 1.0.6. - YAML accepted by both file backends (LocalFile and GroupedFile); Mongo stores the key as the document _id (not storage_key); health() returns HealthStatus; InMemory implements SchemaAwareStorage; ChangeFeed = Mongo/PostgreSQL/InMemory. - CachingManager.stats()/CacheStats section; RefRegistry rejects a conflicting duplicate registration; Mongo replica-set / open-no-auth test creds. - Fixed a few broken examples/links: GuildManager two-arg constructor, Quick-Start variable/type names, BatchSaveReport/KeyOutcome shown as final classes, a dead Caching-Managers wiki-link.
Add Pub/sub transport over Redis/Valkey
docs(benchmarks): rewrite with the new benchmark-suite results Per-op throughput + latency at 10k, offset-vs-keyset pagination, 1k->10k scaling, concurrency and memory, from the new benchmarkSuite() harness (median of 3). Refresh the methodology/run instructions and trim the future-work list (most items landed).
docs: fix wiki-links broken inside tables; ignore local CLAUDE.md Piped wiki-links [[Text|Page]] inside a Markdown table collide with the column separator, so the cell splits and the link renders as literal [[Text. Convert the in-table ones to Markdown links [Text](Page) (Home, H2, Project-Layout, Defining-Entities, Extending-the-Library). Add .gitignore for the local-only CLAUDE.md authoring notes.
docs(benchmarks): refresh numbers and note the ops/s fix landed
docs: bump version coordinates to 1.0.4
docs: add Benchmarks page (per-backend throughput + recommendations)
docs(manager): absorb cachedValues() and the add-on Maven snippet from the module README
docs(codecs): document JacksonConfig profiles and the enriched default mapper
Indexing & Queries: document Slice/Page, count, and keyset (cursor) pagination Add querySlice/queryPage/count and queryAfter/Cursor sections with the offset-vs-keyset decision callout, matching the implemented API.
Indexing & Queries: document ordering & pagination (QueryOptions) Add a section covering query(Query, QueryOptions): ascending/descending order, limit/offset pagination, Query.all(), and the cross-backend contract (orderBy must be a declared index, NULL sorts least, stable tie-break by key, limit(0) is unbounded, negatives rejected).
Update wiki
manager: dirty tracking + write-back + parent registries (v1.0.3)
Bump Version to 1.0.2