diff --git a/tasks/engine-pg-lo-window.md b/tasks/engine-pg-lo-window.md index 8679282..84a8e28 100644 --- a/tasks/engine-pg-lo-window.md +++ b/tasks/engine-pg-lo-window.md @@ -88,7 +88,10 @@ engine-level contract tests. - [ ] `cargo test` (default) green; `cargo test --features pg-lo` green server-less (skipping); `cargo clippy --all-targets -- -D warnings` and `cargo fmt --check` green (default + `--features - pg-lo`); the pg-lo-pure check clean + pg-lo`); the pg-lo pure builds clean (`--no-default-features + --features "pg-lo,mem"` and `--features "postgres,pg-lo"` — the + literal kv-less config is not a gate, see + `store-pg-lo-construction`) ## References diff --git a/tasks/engine-pg-lo.md b/tasks/engine-pg-lo.md index 5e447d2..79ce45c 100644 --- a/tasks/engine-pg-lo.md +++ b/tasks/engine-pg-lo.md @@ -22,9 +22,15 @@ posture (pool, prepared statements, schema bootstrap, error mapping); the local engine (`src/local.rs`) is the structural twin for the large-tier bodies (streaming read cursor, staged put). **`pg-lo` does not imply `postgres`** (ADR-013 §4's consequence; the Cargo.toml -feature carries its own driver deps) — every shared piece must -compile under `--no-default-features --features pg-lo` (the pg-lo-pure -build). +feature carries its own driver deps) — every shared piece must compile +under the **pg-lo pure builds**: `--no-default-features --features +"pg-lo,mem"` and `--no-default-features --features "postgres,pg-lo"`. +**The literal kv-less config (`--no-default-features --features +pg-lo`) is not a gate and cannot compile the whole crate** — with no kv +feature enabled, `KvEngine`/`KvCursor` go empty and the facade's +by-reference dispatch matches are non-exhaustive (E0004; references +are always considered inhabited) — see `store-pg-lo-construction` for +the full reading. - **Engine shape (POC #7 C1 is the contract)** — two artifacts: LOs hold the bytes; the companion table @@ -47,8 +53,8 @@ build). helpers) live behind `#[cfg(feature = "postgres")]` today — decide and record the sharing shape (the natural one: a crate-internal pg-common module gated `cfg(any(feature = "postgres", - feature = "pg-lo"))`, one module per file, so the pg-lo-pure build - compiles without duplication). The `PgOpts` question rides the same + feature = "pg-lo"))`, one module per file, so the pg-lo pure builds + compile without duplication). The `PgOpts` question rides the same point: it is `pub` and re-exported behind `postgres` (wave 4's constructor signature put it on the public surface) — widening its gate to `any(postgres, pg-lo)` (re-export gate widened with it) vs a @@ -193,16 +199,18 @@ engine and its in-module unit tests only. returned + VACUUM FULL operator line + rel-size monitoring; autovacuum inherited; the cached-get capacity facts) - [ ] Shared-helper + PgOpts + LO-isolation design points decided and - recorded; the pg-lo-pure build (`--no-default-features - --features pg-lo`) compiles clean + recorded; the pg-lo pure builds (`--no-default-features + --features "pg-lo,mem"` and `--features "postgres,pg-lo"`) + compile clean (the literal kv-less config is not a gate — see + the Description) - [ ] Unit tests env-driven (`ALKBLOBS_PG_*`), skipping cleanly server-less; green against the harness server at acceptance; zero schema + LO residue on the shared db after runs - [ ] `cargo test` (default — pg-lo compiles out) green; `cargo test --features pg-lo` green server-less (skipping); `cargo clippy --all-targets -- -D warnings` and `cargo fmt - --check` green (default + `--features pg-lo` + the pg-lo-pure - check) + --check` green (default + `--features pg-lo` + the pg-lo pure + builds) ## References diff --git a/tasks/review-wave-5.md b/tasks/review-wave-5.md index f46bab8..f463dc9 100644 --- a/tasks/review-wave-5.md +++ b/tasks/review-wave-5.md @@ -75,9 +75,12 @@ Gate checks: `#![allow(dead_code)]` scope notes matching their remaining scope. - **Gates green**: `cargo test` (default), `cargo test --features pg-lo` (server-less: skipping), `cargo test --features "pg-lo,mem"`, - `cargo test --all-features` (against the server), the pg-lo-pure - checks (`cargo check --no-default-features --features pg-lo` and - `--features "pg-lo,mem"`), `cargo clippy --all-targets -- -D + `cargo test --all-features` (against the server), the pg-lo pure + builds (`cargo check --no-default-features --features "pg-lo,mem"` + and `--features "postgres,pg-lo"` — the literal kv-less + `--features pg-lo` config is not a gate: with no kv engine the + facade's `KvEngine`/`KvCursor` go empty, E0004; see + `store-pg-lo-construction`), `cargo clippy --all-targets -- -D warnings` (default + the pg-lo variants + `--all-features`), `cargo fmt --check`, `cargo doc --no-deps`. diff --git a/tasks/store-pg-lo-construction.md b/tasks/store-pg-lo-construction.md index 5dd582c..d16b32b 100644 --- a/tasks/store-pg-lo-construction.md +++ b/tasks/store-pg-lo-construction.md @@ -103,12 +103,25 @@ the durable window gains its large-engine host arm. proof). Env-driven (`ALKBLOBS_PG_*`), skipping cleanly server-less (the engine tests' convention); the janitor discipline rides from the start (amendment A2). -- **The pg-lo-pure builds** — `cargo check --no-default-features - --features pg-lo` (engine + window family compile, constructors - cfg'd out where `mem` is absent) and - `cargo test --no-default-features --features "pg-lo,mem"` (the - mem-pglo constructor constructible): ADR-013 §4's supported - non-default configurations; verify both compile clean. +- **The pg-lo pure builds** — the supported non-default configurations + are `cargo check/test --no-default-features --features "pg-lo,mem"` + (the one-window-host topology's build; the mem-pglo constructor + constructible) and `cargo check --no-default-features --features + "postgres,pg-lo"` (ADR-013 §4's pg-pure consolidation build); verify + both compile clean. **The literal kv-less config + (`--no-default-features --features pg-lo`) is not a gate and cannot + compile the whole crate** — do not burn time on it: with no kv + feature enabled, `KvEngine`/`KvCursor` go empty (E0004) and the + facade's by-reference dispatch matches are non-exhaustive + (references are always considered inhabited, so an empty enum behind + `&` still requires arms). This is structural, not a bug: per ADR-011 + §4 every constructor mode pairs a kv engine, so a build with zero kv + engines is not a supported configuration (ADR-013 §4's supported + non-default configurations all include one). The shared pieces + themselves (pg_common, the engines) compile in the literal config — + only store.rs errors. The finding is the wave-5 engine task's + (d69d9a3, recorded in its Notes); this task's verification uses the + two meaningful builds above. ## Acceptance Criteria @@ -128,8 +141,10 @@ the durable window gains its large-engine host arm. branch keys off the engine representation, never a flag - [ ] The connection-settings design point (two DSN+opts pairs; the consolidation corollary) decided and recorded -- [ ] The pg-lo-pure builds (`--no-default-features --features pg-lo` - and `--features "pg-lo,mem"`) compile clean +- [ ] The pg-lo pure builds (`--no-default-features --features + "pg-lo,mem"` and `--features "postgres,pg-lo"`) compile clean + (the literal kv-less config is not a gate — see the Description + bullet) - [ ] `cargo test` (default) green; `cargo test --features pg-lo` and `--features "pg-lo,mem"` green server-less (skipping); `cargo clippy --all-targets -- -D warnings` and `cargo fmt