v-common 0.25.5

common part of the veda platform
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
# Changelog

All notable changes to `v-common` are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Entries from **0.14.0** onward were checked against source diffs.
Earlier entries (**0.5.0–0.13.8**) are based on release commits with spot-checked public API changes.

Each version starts with the **intent** (why the change was made), then lists what changed.

## Versioning note

Versions `0.11.0` and `0.12.0` were first used in mid-2024 (`UpdateOptions`, fallible `Storage`), then the version line was reset to `0.10.7`. Those numbers were reused later for the `Individual` setter API. Treat the mid-2024 `0.11.0`/`0.12.0` line as superseded.

---

## [0.25.4] - 2026-06-18

Queue consumers could skip a processing cycle when `get_info_of_part` failed for a transient reason (FS lag, part rotation). This release adds configurable retries so short glitches do not stall or skip work.

### Added

- `v-module-queue`: `Module::set_queue_part_retry(count, pause_ms)` and retry of `Consumer::queue.get_info_of_part` (default: 5 attempts, 1000 ms pause).

### Changed

- `v-module-queue` `0.1.3``0.1.4` (includes `v_queue` `0.3.2`).

## [0.25.3] - 2026-06-16

Patch bump to pick up a fixed `v-module-queue` build aligned with `v_queue` 0.3.2.

### Changed

- `v-module-queue` `0.1.2``0.1.3`.

## [0.25.2] - 2026-06-14

Follow-up dependency sync after the `v_queue` 0.3 line: keep `v-common`, `v-module-queue`, and related crates on matching queue APIs.

### Changed

- `v_queue` `0.3.0``0.3.1`.
- `v-module-queue` `0.1.1``0.1.2`.

## [0.25.1] - 2026-06-14

Small fix release of the new queue-runtime crate right after the extract.

### Changed

- `v-module-queue` `0.1.0``0.1.1`.

## [0.25.0] - 2026-06-14

Split the heavy “full platform” crate so queue-only modules (and future search backends) do not drag Xapian and the full stack. Queue consumer runtime becomes its own crate; Tantivy work starts as a parallel full-text path next to Xapian. Compatibility re-exports keep existing `v_common::module::*` imports working.

### Added

- Crate `v-module-queue`: queue consumer runtime without full-text / Xapian.
- Crate `v-tantivy-common`: Tantivy field registry, schema, VQL translation, `TantivyReader`.
- Re-export `v_module_queue` from `v_common`.

### Changed

- `v_queue` `0.2.7``0.3.0`.
- Queue runtime moved into `v-module-queue`; `v-common` keeps compatibility re-exports:
  - `Module`, `PrepareError`, helpers (`get_cmd`, `init_log*`, …) via `module::module_impl`
  - `ModuleInfo` via `module::info`
  - `VedaQueueModule` via `module::veda_module`
  - `IndvOp` via `v_api::api_client` (`pub use v_module_queue::IndvOp`)
  - `sys_sig_listener` via `module::common`
- `Backend`, ticket, remote storage, onto loaders remain in `v-common`.

### Breaking

- Queue semantics follow `v_queue` 0.3.x.
- Code that depended on non-re-exported queue-runtime internals should use `v-module-queue` directly.

## [0.24.0] - 2026-03-30

End the dual Tokio 0.2 / Tokio 1 and awc 2 / awc 3 matrix. One runtime simplifies builds, Cargo features, and Tarantool client maintenance. A vendored `v_rusty_tarantool` fork targets Tokio 1 only.

### Added

- Vendored Tarantool client as `v_rusty_tarantool` `0.3.2` (Tokio 1).
- Single runtime module `runtime_wrapper::runtime_tokio`.

### Changed

- Runtime fixed to `tokio` 1.50 and `awc` 3.8 (no feature selection).
- `v-storage` `0.1.3``0.2.1`.
- `uuid` 0.8 → 1, `scan_fmt` 0.1 → 0.2.6, `rand` 0.7 → 0.9, `signal-hook` 0.3 → 0.4, and related bumps.
- UUID formatting updated for `uuid` 1.x (`Uuid::new_v4().to_string()`).

### Removed

- Features: `tokio_0_2`, `tokio_1`, `awc_2`, `awc_3`, `tt_2`, `tt_3`, `extended-siginfo`.
- Modules `runtime_wrapper::tokio_0_2` / `tokio_1`.
- Optional deps: dual `tokio`/`awc`/`rusty_tarantool` aliases.
- Unused `warp` dependency.

### Breaking

- Builds that selected Tokio 0.2 / awc 2 / old Tarantool features must move to Tokio 1 + awc 3 + `v_rusty_tarantool`.
- Imports of `runtime_wrapper::tokio_1` / `tokio_0_2``runtime_wrapper::runtime_tokio`.

## [0.23.1] - 2026-03-30

Small cleanup before the Tokio unify: SPARQL requests set Content-Type / Accept through shared header constants instead of ad-hoc strings.

### Changed

- SPARQL client uses `awc_wrapper::{CONTENT_TYPE, ACCEPT, HeaderValue}` for request headers.

## [0.23.0] - 2026-03-25

Stop pulling the remote authorization client into every `v-common` consumer. `v-az-client` stays in the workspace for services that need NNG/Iceoryx transport, but it is no longer a default dependency of the common crate.

### Changed

- Dropped direct dependency on `v-az-client` and commented out `pub use … as az_client`.

### Notes (workspace crate, while still on 0.22.0)

- `v-az-client` `0.1.1`: `authorize_batch_can_read``authorize(&[(&str, &str, u8)]) -> Result<(Vec<u8>, u64), String>` — one API for any access mask, not only “can read”.

## [0.22.0] - 2026-03-23

Simplify the LMDB authorization backend: drop unused stats/cache paths that added complexity, and survive LMDB map resize when another process grows the environment (common in long-running modules).

### Changed

- `v-authorization-lmdb-impl` `0.6.0``0.7.0`.
- LMDB auth: retry after `MdbError::MapResized` (reopen/resize).

### Removed

- Auth statistics collector and ACL cache from `v-authorization-lmdb-impl`.
- `LmdbAzContext::new_with_config(max_read_counter, stat_collector_url, stat_mode_str, use_cache)`.

### Breaking

- No stats/cache configuration through `LmdbAzContext::new_with_config`.

## [0.21.0] - 2026-03-19

Make async authorization a first-class abstraction and speed up Xapian result filtering. Instead of every call site locking `Mutex<AzContext>`, code uses `AuthorizationProvider`. Xapian authorizes hits in batches (one remote/local check per batch) instead of per document. The LMDB impl crate is renamed for clarity; `v-az-client` appears for out-of-process authorization.

### Added

- Crate `v-authorization-lmdb-impl` (rename of previous authorization impl).
- Crate `v-az-client`, re-exported as `v_common::az_client`.
- `storage::authorization_provider::AuthorizationProvider` (`Lmdb(Mutex<LmdbAzContext>)`) with async `authorize` / `authorize_and_trace`.
- Xapian batch authorization: authorize closure + `batch_size`; public `query_use_collect_with_auth_fn`.

### Changed

- Re-export `v_common::az_impl``v_authorization_lmdb_impl`.
- ClickHouse, SPARQL, async storage, and Xapian paths use `AuthorizationProvider` / batch authorize API.

### Breaking

- Dependency `v-authorization-impl-tt2-lmdb``v-authorization-lmdb-impl`.
- `AzContext``LmdbAzContext` in public search/storage APIs.
- `check_indv_access_read`, `check_user_in_group`, `get_individual_from_db`, `get_individual_use_storage_id`: `Option<&Mutex<AzContext>>``Option<&AuthorizationProvider>`.
- Client methods that took `&Mutex<AzContext>` now take `&AuthorizationProvider`.
- `exec_xapian_query_and_queue_authorize`: `&mut AzContext` → generic authorize closure + `batch_size`.

## [0.20.0] - 2026-01-29

Production path is LMDB + Tokio 0.2 Tarantool stack. Drop the multi-backend feature matrix on `v-common` and depend on a specialized authorization crate so builds stay smaller and constructors stay explicit (`new_lmdb` / `new_tarantool`).

### Changed

- Dependency `v-authorization-impl``v-authorization-impl-tt2-lmdb` `0.6.0`.
- Re-export `az_impl` points at the specialized crate.
- Removed features `az_lmdb`, `az_tt_2`, `az_tt_3`.
- Constructors: `AzContext::new*``new_lmdb` / `new_lmdb_with_config` / `new_tarantool` / `new_tarantool_with_config`.

### Breaking

- Feature flags `az_*` on `v-common` are gone.
- Call sites using ambiguous `AzContext::new` / `new_with_config` must use backend-specific names.

## [0.19.4] - 2026-01-28

Decouple “which storage Tarantool client” from “which authorization backend”. Call sites talk to one `AzContext` type; Cargo features choose LMDB or Tarantool auth independently of storage features.

### Added

- Features `az_lmdb`, `az_tt_2`, `az_tt_3` on `v-common`.

### Changed

- `v-authorization-impl``0.4.6`.
- Public APIs take `AzContext` instead of `LmdbAzContext` (e.g. `check_user_in_group`, `get_individual_from_db`).
- Constructors unified as `new` / `new_with_config` (backend selected by features).

### Breaking

- Implementation feature names and `Mutex<LmdbAzContext>` call sites must migrate to `AzContext` + `az_*` features.

## [0.19.3] - 2026-01-28

Prevent compiling LMDB and Tarantool authorization backends together (they were never meant to coexist). Rename Tarantool features to match Tokio / client generations (`tt_2` / `tt_3`).

### Changed

- `v-authorization-impl` through `0.4.4`.
- Feature rename in impl: `tt_1``tt_3`, `tt_02``tt_2`; default `lmdb`.

### Breaking

- Downstream feature names `tt_1` / `tt_02``tt_3` / `tt_2`.

## [0.19.2] - 2026-01-28

Align the authorization crate with the shared `AzContext` abstraction and the pinned `rusty_tarantool` 0.2.11 used elsewhere.

### Changed

- `v-authorization-impl``0.4.2` (Tokio 0.2 Tarantool path on `rusty_tarantool` 0.2.11).

## [0.19.1] - 2026-01-28

Make default features match the real deployment stack (Tokio 0.2 + awc 2 + Tarantool 0.2 client) so `cargo build` without flags works out of the box.

### Changed

- `v-authorization-impl``0.4.1`.
- Default features: `["tokio_0_2", "tt_2", "awc_2"]`.
- Tarantool feature model: `tt` alias, `tt_1`, `tt_02`.

## [0.19.0] - 2026-01-28

Support authorization data stored in Tarantool as an alternative to LMDB, behind a feature flag, without rewriting call sites that already use `AzContext`. Also make incomplete-session ticket errors easier to debug.

### Added

- Optional Tarantool authorization in `v-authorization-impl` (feature `tt`).
- `AzContext::{lmdb, lmdb_with_config, tarantool, tarantool_with_stat}`, `TarantoolAzContext`, `RuntimeWrapper`.

### Changed

- `v-authorization-impl` `0.2.2``0.3.0`.
- Improved ticket-related error logging (include ticket id on incomplete session).

## [0.18.0] - 2026-01-16

Move the LMDB authorization implementation out of `v-common` into its own crate so it can version and publish separately. Pass an auth `provider` through the API client so tickets can record which authentication backend issued them.

### Added

- Dependency `v-authorization-impl` `0.2.2`, re-exported as `v_common::az_impl`.
- `AuthClient::authenticate(..., provider: Option<&str>)`.

### Changed

- In-crate `az_impl` / `az_lmdb` replaced by external crate.
- `v-individual-model``0.2.6`, `v-storage``0.1.3`, `rusty_tarantool` 0.2.11.

### Breaking

- `authenticate` requires the new `provider` argument.
- Types under `v_common::az_impl` now come from `v-authorization-impl`.

## [0.17.1] - 2025-09-18

Dependency sync with newer `v-individual-model` / `v-storage` patch releases.

### Changed

- `v-individual-model` `0.2.0``0.2.1`.
- `v-storage` `0.1.1``0.1.2`.

## [0.17.0] - 2025-09-17

Adopt the next minor of the extracted model and storage crates after their API cleanups.

### Changed

- `v-individual-model` `0.1.1``0.2.0`.
- `v-storage` `0.1.0``0.1.1`.

## [0.16.1] - 2025-09-14

Complete ticket audit metadata: callers can pass domain/initiator into auth APIs, and tickets store `auth_origin` for where the session came from.

### Added

- `Ticket::auth_origin` and RDF/JSON mapping `ticket:authOrigin`.

### Changed

- `AuthClient::authenticate` gains `domain: Option<&str>`, `initiator: Option<&str>`.
- `AuthClient::get_ticket_trusted` gains `domain: Option<&str>`.

### Breaking

- Call sites for `authenticate` / `get_ticket_trusted` need the new arguments.
- `Ticket` literals need `auth_origin`.

## [0.16.0] - 2025-09-12

Tickets need richer audit/security context: how the user authenticated, which domain/service, and who/what started the login. Store that on the ticket individual and in JSON.

### Added

- `Ticket` fields: `auth_method`, `domain`, `initiator` (RDF: `ticket:authMethod`, `ticket:domain`, `ticket:initiator`).

### Fixed

- `Ticket::PartialEq`: compare `user_login` correctly; include address and the new metadata fields.

### Breaking

- `Ticket` literals must initialize the new fields.

## [0.15.1] - 2025-07-09

ACL binary record codecs belong in `v_authorization`, not duplicated inside `v-common`, so format changes ship with the authorization crate.

### Changed

- `v_authorization` `0.4.0``0.5.1`.
- ACL record helpers moved to `v_authorization::record_formats`.

### Removed

- Module `az_impl::formats` (`encode_record`, `decode_filter`, `decode_rec_to_rights`, `decode_rec_to_rightset`, `update_counters`).

### Breaking

- Import `v_authorization::record_formats::*` instead of `v_common::az_impl::formats::*`.

## [0.14.0] - 2025-07-04

Storage backends (LMDB, memory, Tarantool) are a reusable library, not only part of `v-common`. Extract them to `v-storage` and keep shared API types in `v_api::common_type` so other crates can depend on storage without the full common stack.

### Changed

- Storage extracted to external crate `v-storage` `0.1.0` (workspace copy removed after extract).
- Common API types live under `v_api::common_type`.

### Breaking

- Depend on / import storage types from `v-storage` (integrated through `v-common` call sites).

---

## Earlier history (spot-checked)

### [0.13.8] - 2025-06-29

Keep the crate building on current dependency majors (notably SQLParser 0.30) and optional richer signal info.

- Dependency refresh (Tokio, Chrono, Serde, SQLParser 0.30, Xapian, …).
- Feature `extended-siginfo`.
- SQL lexer-tree updates for SQLParser 0.30.

### [0.13.6] – [0.13.7] - 2025-05 … 2025-06

Measure Xapian query stages for performance debugging; drop the old `stopwatch` crate in favor of standard timing.

- Xapian search debug timing.
- Removed `stopwatch`; use standard timing.

### [0.13.4] – [0.13.5] - 2025-02 … 2025-03

Ontology and individual model are shared across services. Move them to `v-individual-model` so serialization/Turtle/onto evolve without bloating `v-common`.

- Ontology / individual / Turtle model moved to `v-individual-model`.
- In-crate `onto` module removed.

### [0.13.3] - 2025-02-17

Allow removing selected predicates from an individual in one storage operation instead of replace-whole-document workarounds.

- API op `IndvOp::RemovePredicates` (`remove_predicates`).

### [0.11.0] – [0.13.2] - 2024-12 (reuse of 0.11/0.12 numbers)

Fill gaps in `Individual` setters for string/datetime/decimal construction and fix predicate replace semantics; update Chrono usage and queue dependency.

- `Individual::set_datetime_from_str`, `set_decimal_from_str`, `set_decimal_from_i64`.
- `set_resources` replaces the full predicate value set.
- Chrono datetime construction updated; `v_queue``0.2.7`; drop `SIGWINCH`.

### [0.10.7] – [0.10.21] - 2024-07 … 2024-12 (after version reset)

Bridge Tokio generations and optional clients with features; add in-memory storage for tests/light deployments; harden ClickHouse typing and LMDB open/logging.

- Resumed `0.10.x` after superseded mid-2024 `0.11`/`0.12`.
- `RuntimeWrapper` (Tokio 0.2 or 1 via features).
- Optional awc / `rusty_tarantool` feature wiring.
- `MemoryStorage` / `VStorage::new_memory()`.
- `Individual::set_decimal_from_f64`; ClickHouse nullable SQL types; LMDB logging/open fixes.

### [0.11.0] / [0.12.0] - 2024-06 … 2024-07 (superseded)

Make storage client updates and the `Storage` trait express real errors instead of `bool` / empty results, and group optional update parameters into `UpdateOptions`.

- `UpdateOptions` for `MStorageClient`; `update`/`updates``Result<OpResult, ApiError>`.
- `Storage` / `VStorage` methods become fallible (`Result<_, ResultCode>`).

### [0.10.0] – [0.10.6] - 2024-05 … 2024-06

Improve authorization observability and LMDB iteration; clarify cache config naming; remove artificial limits on select buffer size.

- Auth record encoding / cache config rename (`use_authorization_cache`).
- `LmdbIterator`; az stat manager duration; removed `query_select` buffer-size limit.

### [0.8.0] – [0.9.0] - 2024-04

Speed up repeated ACL lookups with optional LMDB cache indexes; clean up LMDB storage internals for maintainability.

- Optional LMDB ACL cache indexes.
- LMDB storage internals refactor.

### [0.7.1] – [0.7.3] - 2024-04

Collect authorization timing/stats for ops monitoring; standardize module logging setup via a macro.

- AZ stat manager.
- Macro `init_module_log`.

### [0.6.0] – [0.6.14] - 2024-02

Export data as Turtle for interchange; query RDF stores over SPARQL; keep ClickHouse/SPARQL stored queries authorization-aware and SQL-correct (`FINAL`, parsers).

- Turtle export helpers.
- Async SPARQL client.
- ClickHouse / SPARQL stored-query authorization and SQL/`FINAL` handling.

### [0.5.0] – [0.5.2] - 2024-02

Callers must tell “not found” from “storage error” when reading individuals; skip useless authorize work when the individual is missing.

- `get_individual` / related storage reads return `ResultCode` instead of `bool`.
- `check_indv_access_read` checks `NotFound` first.

### Pre-0.5 (2021–2023)

Foundation period: async storage, AuthApi, ticket IP checks, VQL fixes, ClickHouse/Xapian clients, module params/aliases, stored queries (KH/Oxygraph), logout API, and many dependency/patch releases. Not expanded commit-by-commit here.

---

[0.25.4]: https://github.com/semantic-machines/v-common/compare/v0.25.3...v0.25.4
[0.25.3]: https://github.com/semantic-machines/v-common/compare/v0.25.2...v0.25.3
[0.25.2]: https://github.com/semantic-machines/v-common/compare/v0.25.1...v0.25.2
[0.25.1]: https://github.com/semantic-machines/v-common/compare/v0.25.0...v0.25.1
[0.25.0]: https://github.com/semantic-machines/v-common/compare/v0.24.0...v0.25.0
[0.24.0]: https://github.com/semantic-machines/v-common/compare/v0.23.1...v0.24.0
[0.23.1]: https://github.com/semantic-machines/v-common/compare/v0.23.0...v0.23.1
[0.23.0]: https://github.com/semantic-machines/v-common/compare/v0.22.0...v0.23.0
[0.22.0]: https://github.com/semantic-machines/v-common/compare/v0.21.0...v0.22.0
[0.21.0]: https://github.com/semantic-machines/v-common/compare/v0.20.0...v0.21.0
[0.20.0]: https://github.com/semantic-machines/v-common/compare/v0.19.4...v0.20.0
[0.19.4]: https://github.com/semantic-machines/v-common/compare/v0.19.3...v0.19.4
[0.19.3]: https://github.com/semantic-machines/v-common/compare/v0.19.2...v0.19.3
[0.19.2]: https://github.com/semantic-machines/v-common/compare/v0.19.1...v0.19.2
[0.19.1]: https://github.com/semantic-machines/v-common/compare/v0.19.0...v0.19.1
[0.19.0]: https://github.com/semantic-machines/v-common/compare/v0.18.0...v0.19.0
[0.18.0]: https://github.com/semantic-machines/v-common/compare/v0.17.1...v0.18.0
[0.17.1]: https://github.com/semantic-machines/v-common/compare/v0.17.0...v0.17.1
[0.17.0]: https://github.com/semantic-machines/v-common/compare/v0.16.1...v0.17.0
[0.16.1]: https://github.com/semantic-machines/v-common/compare/v0.16.0...v0.16.1
[0.16.0]: https://github.com/semantic-machines/v-common/compare/v0.15.1...v0.16.0
[0.15.1]: https://github.com/semantic-machines/v-common/compare/v0.14.0...v0.15.1
[0.14.0]: https://github.com/semantic-machines/v-common/compare/v0.13.8...v0.14.0
[0.13.8]: https://github.com/semantic-machines/v-common/compare/v0.13.7...v0.13.8