Skip to content

ci(publish): longer npm propagation window; fix(filter): E0275 in Workspace CI - #1015

Merged
ruvnet merged 6 commits into
mainfrom
ci/publish-verify-window
Sep 23, 2026
Merged

ruvnet merged 6 commits into
mainfrom
ci/publish-verify-window

Conversation

@ruvnet

@ruvnet ruvnet commented Sep 23, 2026 •

Copy link
Copy Markdown
Owner

1. Publish registry checks wait up to ~12 min

npm now replies to a publish with "Your package is being processed and may take a few minutes". ruvector@0.3.3 took about 5½ minutes to resolve, so the ~3-minute registry check added in #1014 failed a publish that had actually succeeded (run 35885519789). Every registry poll loop (router, kge, typesafe, graph-node, ruvector) goes from 18 to 72 attempts of 10 s.

2. ruvector-filter: fix E0275 that fails Workspace CI core-and-rest

This was already failing before #1014: the same error shows up on feat/typesafe-package on 2026-09-21, and main's runs were being cancelled at the 4 h timeout. The internally tagged serde derive on FilterExpression, combined with the recursive newtype variants And(Vec<Self>), Or(Vec<Self>) and Not(Box<Self>), nests TaggedSerializer without bound. rustc 1.98 reports E0275 at recursion_limit = 4096 and never finishes at 8192. At runtime And/Or could not serialize at all, which also broke ruvector-wasm FilterBuilder.and/or().toJson().

Serde now goes through a private FilterExpressionWire enum (#[serde(into, from)]) in which logical operators are struct variants: {"type":"and","filters":[…]} and {"type":"not","filter":{…}}. Leaf JSON is unchanged, and so are the Rust enum and its constructors.

Validation: cargo test -p ruvector-filter gives 17 unit + 2 doc tests passing, including new round-trip tests for and/or/not and a test that leaf JSON is unchanged. clippy --all-targets is clean. cargo check -p ruvector-wasm -p ruvector-node passes.

🤖 Generated with claude-flow

npm now answers a publish with "being processed and may take a few minutes";
ruvector@0.3.3 took ~5.5 min to resolve and the ~3 min window failed a publish
that had succeeded (run 35885519789). Raise every registry poll to 72 x 10s.

Co-Authored-By: claude-flow <ruv@ruv.net>
…kspace CI)

The internally tagged derive on FilterExpression made its recursive newtype
variants And(Vec<Self>)/Or(Vec<Self>)/Not(Box<Self>) nest TaggedSerializer
without bound: rustc 1.98 fails the lib test with E0275 even at
recursion_limit 4096 (core-and-rest shard, run 35870473509; also on
feat/typesafe-package 2026-09-21), and at 8192 it does not finish. At runtime
And/Or could never serialize (serde cannot tag a sequence), which also broke
ruvector-wasm FilterBuilder.and/or().toJson().

Serde now goes through FilterExpressionWire (serde into/from) where logical
operators are struct variants: {"type":"and","filters":[...]},
{"type":"not","filter":{...}}. Leaf variants keep their JSON shape and the
Rust enum and constructors are unchanged.

Co-Authored-By: claude-flow <ruv@ruv.net>
@ruvnet ruvnet changed the title ci(publish): wait up to ~12 min for npm propagation in registry checks ci(publish): longer npm propagation window; fix(filter): E0275 in Workspace CI Sep 23, 2026
Per-crate override like ruvector-graph 2.3.1: the workspace 2.3.0 is already on
crates.io for ruvllm-cli. ruvector-filter ships as the unpublished workspace
2.3.0 (crates.io has 2.2.3).

Co-Authored-By: claude-flow <ruv@ruv.net>
Co-Authored-By: claude-flow <ruv@ruv.net>
…compiles

With the E0275 compile error gone the shard ran all 3099 tests; two failed
(run 35900536715):

- ruvector-metrics: gather_metrics() returned an empty page in a fresh process
  because the metrics are lazy statics registered on first use (nextest runs
  each test in its own process). It now initializes the unlabeled gauges and
  counters so they are exported at zero from startup.
- mincut-gated-transformer: test_flash_attention_memory_efficiency asserted a
  1s wall-clock bound on an unoptimized build on shared runners (1.27s). The
  bound now applies to optimized builds only; the test also checks the output
  is finite.

Co-Authored-By: claude-flow <ruv@ruv.net>
Further failures reached once core-and-rest compiled (runs 35908988894,
35908988867):

- neural-trader-strategies: two ASCII diagrams in indented doc blocks were
  compiled as Rust doctests (unknown token →). Mark them as text blocks.
- ruvector-diskann search_allocations: the global counting allocator also saw
  allocations from other threads (idle rayon workers left over from build()),
  so the total budget was flaky (386 700 vs 300 000; the same code passed on
  the previous run). Search is single-threaded, so count only the searching
  thread. The visited-set-sized-block assertion is unchanged.
- ruvllm attention benchmark: skip the 1ms wall-clock bound under
  cargo-llvm-cov instrumentation (LLVM_PROFILE_FILE set; measured 1099us).

Co-Authored-By: claude-flow <ruv@ruv.net>
@ruvnet
ruvnet merged commit 7f114e5 into main Sep 23, 2026
99 of 102 checks passed
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