diff --git a/Cargo.lock b/Cargo.lock index a989bc5..7bd9faa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,7 +5,7 @@ version = 4 [[package]] name = "corvid-db" version = "0.3.2" -source = "git+https://github.com/corvid-db/corvid.git?tag=v0.3.3#b726ac5a1ebace9f94dc12007a4e06927241cf4c" +source = "git+https://github.com/corvid-db/corvid.git?tag=v0.3.4#b726ac5a1ebace9f94dc12007a4e06927241cf4c" dependencies = [ "redb", "thiserror", diff --git a/Cargo.toml b/Cargo.toml index f9d43d2..890991f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ pyo3 = { version = "0.29", features = ["abi3-py311"] } # binding pins exact engine tags; the engine PACKAGE is corvid-db — # bare `corvid` is an unrelated crates.io crate — its LIB ident is # corvid, so `use corvid::…` is unchanged). -corvid-db = { git = "https://github.com/corvid-db/corvid.git", tag = "v0.3.3" } +corvid-db = { git = "https://github.com/corvid-db/corvid.git", tag = "v0.3.4" } [dev-dependencies] # Test-only: the variant-inventory snapshot test (src/error.rs) diff --git a/docs/PLAN.md b/docs/PLAN.md index 535aa7d..8e2aad2 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -18,7 +18,7 @@ variants are additive later, decided by the FFI bench). | --- | --- | | The pyo3 crate (engine-binding layer AND idiom layer — see §3) | `src/*.rs` — `DbPy`/`CollectionPy`/`QueryPy`, value mapping, error mapping, predicates | | The public package | `python/corvid/__init__.py` re-exports `corvid._native`; `__init__.pyi` + `py.typed` carry the full typing | -| The golden-suite port | `tests/test_golden.py` driving `tests/golden/*.txt` (vendored byte-identical from the v0.3.3 release — the pinned engine tag; the same fixtures the C smoke suite and corvid-node run) | +| The golden-suite port | `tests/test_golden.py` driving `tests/golden/*.txt` (vendored byte-identical from the v0.3.4 release — the pinned engine tag; the same fixtures the C smoke suite and corvid-node run) | | Packaging | `pyproject.toml` (maturin, one cp311-abi3 wheel per platform), README (install-pending note), LICENSE (MIT), `.gitignore` | | CI | `.github/workflows/ci.yml` — surface gate + lint + golden suite × 4 platform legs (linux-x64/arm64, macos-arm64, windows-x64) × {3.14, 3.13, 3.12, 3.11} + `maturin build` smoke | @@ -35,7 +35,7 @@ totals test pre-scans all files for exactly 267). Two architectures were on the table: 1. **(chosen)** A Rust pyo3 crate that links the engine crate directly - (`corvid-db = { git = "https://github.com/corvid-db/corvid.git", tag = "v0.3.3" }` + (`corvid-db = { git = "https://github.com/corvid-db/corvid.git", tag = "v0.3.4" }` — the engine package is `corvid-db` with lib ident `corvid`; bare `corvid` on crates.io is an unrelated crate) and exposes the OOP surface through native pyo3 classes, built into a Python extension @@ -222,4 +222,4 @@ Documented corners: | Variadic `and_`/`or_` (trailing underscores) | Python keywords; mirrors the JS binding's variadic `and`/`or` | | Counter + Arc exclusivity for `compact` | mirrors the ABI §4.13 gate exactly; pinned by admin.txt | | pyo3 0.29, maturin 1.x | current crates.io stable lines | -| Vendored golden fixtures (byte-identical to the v0.3.3 tag — the pinned engine version) | stable text; the suite must run offline and per-PR (verified identical to `crates/corvid-ffi/golden/`) | +| Vendored golden fixtures (byte-identical to the v0.3.4 tag — the pinned engine version) | stable text; the suite must run offline and per-PR (verified identical to `crates/corvid-ffi/golden/`) | diff --git a/docs/SURFACE.tsv b/docs/SURFACE.tsv index 0929906..d6e2f06 100644 --- a/docs/SURFACE.tsv +++ b/docs/SURFACE.tsv @@ -122,8 +122,10 @@ corvid::QueryBuilder::run SELECT shaping MAPPED Query.run golden:queries.txt:QVE corvid::Db Lifecycle MAPPED Db golden:admin.txt:FILEDB corvid::Db::open Lifecycle MAPPED Db.open/open_memory/collection/collections/backup/compact golden:admin.txt (COLLECTIONS/BACKUP/COMPACT) corvid::Db::open_in_memory Lifecycle MAPPED Db.open/open_memory/collection/collections/backup/compact golden:admin.txt (COLLECTIONS/BACKUP/COMPACT) +corvid::Db::open_with_backend Lifecycle N/A N/A wasm-only backend seam (redb StorageBackend over custom storage): no C-ABI/native equivalent; browser-binding machinery, not constructible here corvid::Db::collection Lifecycle MAPPED Db.open/open_memory/collection/collections/backup/compact golden:admin.txt (COLLECTIONS/BACKUP/COMPACT) corvid::Db::backup Lifecycle MAPPED Db.open/open_memory/collection/collections/backup/compact golden:admin.txt (COLLECTIONS/BACKUP/COMPACT) +corvid::Db::backup_with_backend Lifecycle N/A N/A wasm-only backend seam (redb StorageBackend over custom storage): no C-ABI/native equivalent; browser-binding machinery, not constructible here corvid::Db::bulk Lifecycle N/A N/A put_many covers the bulk fast path (FFI.md §9); Db::bulk not exposed corvid::Db::compact Lifecycle MAPPED Db.open/open_memory/collection/collections/backup/compact golden:admin.txt (COLLECTIONS/BACKUP/COMPACT) corvid::Db::collections Lifecycle MAPPED Db.open/open_memory/collection/collections/backup/compact golden:admin.txt (COLLECTIONS/BACKUP/COMPACT) @@ -148,12 +150,14 @@ corvid::db::Page SELECT shaping MAPPED Collection.page / Page golden:mutations.t corvid::Store Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) corvid::Store::open Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) corvid::Store::open_in_memory Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) +corvid::Store::open_with_backend Lifecycle N/A N/A wasm-only backend seam (redb StorageBackend over custom storage): no C-ABI/native equivalent; browser-binding machinery, not constructible here corvid::Store::set_relaxed_durability Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) corvid::Store::begin_bulk Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) corvid::Store::flush Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) corvid::Store::compact Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) corvid::Store::next_auto_id Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) corvid::Store::backup Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) +corvid::Store::backup_with_backend Lifecycle N/A N/A wasm-only backend seam (redb StorageBackend over custom storage): no C-ABI/native equivalent; browser-binding machinery, not constructible here corvid::Store::transaction Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) corvid::Store::read Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) corvid::Store::put Lifecycle N/A N/A engine low-level byte KV (Store/WriteBatch/ReadBatch); the v1 binding is typed-document only (FFI.md ruling 1) diff --git a/pyproject.toml b/pyproject.toml index e9020a3..a7ad235 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "corvid-python" -version = "0.3.3" +version = "0.3.4" description = "Python binding for the corvid embedded database — the engine compiled in via pyo3, exposed as idiomatic OOP" readme = "README.md" license = "MIT" diff --git a/scripts/surface-gate.sh b/scripts/surface-gate.sh index 2e277b4..55a0cdc 100755 --- a/scripts/surface-gate.sh +++ b/scripts/surface-gate.sh @@ -34,7 +34,7 @@ SURFACE="$ROOT/docs/SURFACE.tsv" ENGINE_REPO="corvid-db/corvid" # The committed N/A baseline for THIS binding (see (c) above). -NA_BASELINE=155 +NA_BASELINE=159 # ---- locate the engine pin ------------------------------------------------ pin=""