From fb24f30e0ab62ff0e28f971dd63a643b47cb4f19 Mon Sep 17 00:00:00 2001 From: "glm-5.3-flash" Date: Mon, 12 Oct 2026 07:36:32 +0000 Subject: [PATCH] =?UTF-8?q?docs(tasks):=20correct=20the=20wave-5=20pure-bu?= =?UTF-8?q?ild=20gates=20=E2=80=94=20the=20literal=20kv-less=20pg-lo=20con?= =?UTF-8?q?fig=20is=20not=20a=20gate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The wave-5 engine task (d69d9a3) found the literal --no-default-features --features pg-lo config cannot compile the whole crate: 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). 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 meaningful pure builds, verified on this tree: - --no-default-features --features "pg-lo,mem" — check/test/clippy green (115 tests ok server-less) - --no-default-features --features "postgres,pg-lo" — check/clippy green, test target compiles Amended: engine-pg-lo (description + acceptance + gates), engine-pg-lo-window (acceptance), store-pg-lo-construction (the full structural reading + acceptance), review-wave-5 (gates). The engine task's Notes/Summary already recorded the finding; the criteria text now matches what was verified. Verification: cargo test 69/19/3 ok, fmt --check green (docs-only change). --- tasks/engine-pg-lo-window.md | 5 ++++- tasks/engine-pg-lo.md | 26 +++++++++++++++++--------- tasks/review-wave-5.md | 9 ++++++--- tasks/store-pg-lo-construction.md | 31 +++++++++++++++++++++++-------- 4 files changed, 50 insertions(+), 21 deletions(-) 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