Skip to content

feat(testing): let the NoKV live rows route through seeds and pin the SDK wire schema - #4726

Draft
wchwawa wants to merge 2 commits into
loopx-project:mainfrom
wchwawa:feat/nokv-ladder-seed-routing
Draft

wchwawa wants to merge 2 commits into
loopx-project:mainfrom
wchwawa:feat/nokv-ladder-seed-routing

Conversation

@wchwawa

@wchwawa wchwawa commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

Stacked on #4724 (helper seeds routing). This PR shows both commits until #4724 merges; only the second commit (feat(testing): …) is this change. Kept as a draft until then.

Goal And Delivered Outcome

  • Goal/source and gap: the NoKV promotion gate (Promotion gate: LoopX acceptance of experimental/metadata-runtimes NoKV-Lab/NoKV#511, from the maintainer note on feat: add Holt and FDB metadata runtimes NoKV-Lab/NoKV#500) requires LoopX's s0.nokv_live_matrix and s2a.nokv_live_qualification rows to run against a build of NoKV's experimental/metadata-runtimes line, which routes through seeds instead of etcd and moves the wire schema from nokv.workspace.rpc.v9 to v10 under an unchanged 0.11.0 / API 1. Before this change the ladder's env:nokv_legacy gate hard-required NOKV_ETCD + NOKV_ETCD_PREFIX, examples/nokv-shadow-provider/live_e2e.py only built RoutingConfig.etcd, and no report recorded which wire schema the wheel actually spoke, so the gate could not be exercised and a wrong wheel surfaced as nokv_transport_protocol_failed.
  • Observable before → after, with the validation row that proves it: the gate now needs the six stack variables plus exactly one routing group, NOKV_SEEDS (comma-separated IP:PORT) or NOKV_ETCD + NOKV_ETCD_PREFIX; neither is nokv_live_env_missing with missing_one_of, both is nokv_routing_env_ambiguous. The live matrix builds the matching RoutingConfig constructor and reports SDK facts (version, API, protocol_schema, routing kind, seed count; never endpoint values). The transport records the helper's nokv_protocol_schema handshake field and types a refused open (NoKVHelperOpenRefusedError.reasonCode); the Stage 2A probe passes that code through and its report carries nokv_protocol_schema; the ladder pins nokv_protocol_schema and nokv_routing_group in bindings and treats a wheel that cannot build the configured routing kind as unverified/nokv_sdk_capability_mismatch on both rows instead of a failed row. Rows real_backend (three runs) and unit.
  • Issue/task and intended base: Related to Promotion gate: LoopX acceptance of experimental/metadata-runtimes NoKV-Lab/NoKV#511 and Scoped review invitations and module stewardship #4069 (NoKV-plane evidence scope). Base main, after feat(coordination): accept seed routing and report SDK capability mismatches in the NoKV helper #4724.

Scope And Continuation

Validation

  • Tested revision: d8cc665
  • Run state: finished
  • Input classes: synthetic | public_fixture | authorized_private_read_only
Check kind Result Public-safe evidence / limitation
unit passed pytest -q tests/test_nokv_live_e2e_routing.py tests/test_nokv_jsonl_helper.py tests/control_plane/test_shared_goal_authority_e2e.py -k "routing_group or wrong_wheel": 43 passed. New: seeds/etcd constructor selection with endpoint-free facts; ambiguous / missing / capability-mismatch / invalid routing are typed and construct no client; gate missing_one_of, ambiguity, nokv_routing_group bindings, seed and etcd values as privacy tokens, opt-in flag still enforced; Stage 2A probe capability mismatch → unverified, other probe failures still raise. Deterministic ladder projection -m "not stage2c_e2e": 13 passed, 8 skipped (as on main).
real_entrypoint passed node --test tests/control_plane_ts/nokv_jsonl_transport.test.ts tests/control_plane_ts/nokv_stage2a_qualification_harness.test.ts: 176 passed, 0 failed. New: the real helper process reports sdkProtocolSchema null for the 0.11.0-shaped fixture and the declared string for a newer-shaped fixture; a seeds config against the release-shaped fixture is NoKVHelperOpenRefusedError with reasonCode nokv_sdk_capability_mismatch and no endpoint in the message.
static passed ruff check on changed Python files; python -m mypy (repository configuration, 22 files); tsc --project tsconfig.control-plane.json --noEmit.
real_backend passed Regression: this head + NoKV 0.11.0 release wheel + NoKV 0.11.0 owner on the etcd control path, S3-compatible local object store (moto), disposable workbench: s0.nokv_live_matrix + s2a.nokv_live_qualification 2 pass, exit 0; bindings nokv_protocol_schema: null, nokv_routing_group: NOKV_ETCD. Same rows on main da6d797 before the change: 2 pass.
real_backend passed Candidate (the NoKV gate): this head + wheel and nokv binary built from NoKV experimental/metadata-runtimes (0c0b7e2ad9 plus NoKV-Lab/NoKV#512 head c105fc999b), Holt-backed single owner reached through NOKV_SEEDS (one seed), same object store class with a fresh bucket/prefix, fresh workbench: 2 pass, exit 0; bindings nokv_protocol_schema: nokv.workspace.rpc.v10, nokv_routing_group: NOKV_SEEDS; Stage 2A report nokv_protocol_schema: nokv.workspace.rpc.v10, 13 checks. Wheel and binary SHA-256 are recorded on NoKV-Lab/NoKV#511.
real_backend passed Negative pairing: this head + 0.11.0 release wheel + the seeds environment: both rows unverified/nokv_sdk_capability_mismatch, exit 1 (exit 0 with --allow-unverified), 0 privacy violations. On the intermediate head without the probe/ladder propagation the same pairing was s2a fail/assertion_failed (nokv_transport_protocol_failed), which is the failing-before for the typed path.
regression_parity passed Baseline main vs head on the etcd path: identical 2-pass outcome and identical 13 Stage 2A check ids; the nokv_provider matrix rows are byte-for-byte the same set. Privacy: an earlier head reported the routing kind literal (etcd/seeds) in evidence and failed the ladder's own privacy scan because the literal is also a client-config string leaf; reports now carry the variable name (NOKV_ETCD/NOKV_SEEDS).
  • Coverage and gaps: the changed paths are the ladder gate/bindings/rows, the live matrix routing selection, the transport handshake capture and the probe's failure classification; each has a deterministic test and was exercised against both real owners. Not run: a wire-level pairing of the 0.11.0 wheel against the v10 owner through static routing (the running owner exposes no placement identifiers to build one; the capability-mismatch pairing covers the LoopX-visible behaviour), multi-seed failover (one seed), FDB runtime, real cloud S3. The candidate wheel still reports 0.11.0 / API 1; only the schema string and the SHA-256 distinguish it, which is what the new bindings record.

…matches in the NoKV helper

Signed-off-by: wchwawa <wch19961116@gmail.com>
… SDK wire schema

Signed-off-by: wchwawa <wch19961116@gmail.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant