fix(ci): regenerate stale tauri lockfile + install memory seam in migration tests - #5518
Conversation
…igration tests Two pre-existing CI failures on main, unrelated to feature work: Rust Quality (fmt, clippy) failed with 'cannot update the lock file app/src-tauri/Cargo.lock because --locked'. The tinydocs (0.1.0 -> 0.1.12) and tinywallet (0.1.0 -> 0.2.0) submodule gitlinks were bumped without regenerating the shell lockfile; the newer versions moved the documents (docx-rs/pdf-extract/ppt-rs/...) and web3 (bitcoin/ethers/...) crate cohorts into the module build, so those crates correctly leave app/src-tauri/Cargo.lock. Regenerated the lock to match the pinned submodules (net -915/+78 crate lines); it now satisfies --locked and 'cargo fmt --all --check' passes. Rust Feature-Gate Smoke (gates off) failed the migrate_hermes/migrate_openclaw apply tests with 'no EmbeddingHost installed'. Apply-mode migrations import into unified memory, whose embedding provider resolves through the explicit host seams; the migration test's test_config never installed the test seam wiring. Added host_impls::install_for_tests() (idempotent) so the apply path resolves a provider in the bare unit test. Verified: both tests pass under --no-default-features.
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
💤 Files with no reviewable changes (1)
📝 WalkthroughWalkthroughThe test configuration installs memory host implementations before constructing ChangesMigration and dependency updates
Estimated code review effort: 1 (Trivial) | ~5 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
tinysweeper found nothing blocking. Approving.
$0.0083 · 8,932 in / 2,329 out · 6,502 cached (73%) · z-ai/glm-5.2
critique: $0.0021 · 1,904 in / 476 out · 768 cached (40%) · z-ai/glm-5.2
security: $0.0013 · 1,883 in / 374 out · 1,640 cached (87%) · z-ai/glm-5.2
tests: $0.0010 · 1,798 in / 184 out · 1,260 cached (70%) · z-ai/glm-5.2
description: $0.0038 · 3,347 in / 1,295 out · 2,834 cached (85%) · z-ai/glm-5.2
The Feature-Gate Smoke lane's kernel-floor ratchet fails: profile 'flows' resolves 307 packages / 284 names on CI Linux vs the 305/282 limit. This is the tinymemory-core engine addition (6bf0802) reaching the always-on flows host profile (+2/+2) — a deliberate always-on dependency (SQLite/vector store + ingestion/queue), the same rationale as the 2026-08-10 tinymemory entry which predated this crate. The ratchet fails on a shed not written back, so the limit is set to the exact CI (Linux) measurement. Calibrated on Linux per the ratchet's own convention; macOS resolves +1 (308/285) and cannot validate this locally.
What this change touches3 files, +19 -2 across 3 components. The code graph knows nothing about these files yet — normal for newly added files, and a cold index otherwise. flowchart LR
n0["scripts<br/>1 file +11 -1"]:::changed
n1["src/openhuman/config/migration_helpers<br/>1 file +7 -0"]:::changed
n2[".github/workflows<br/>1 file +1 -1"]:::changed
classDef changed fill:#0d4429,stroke:#238636,color:#e6edf3
classDef impacted fill:#161b22,stroke:#6e7681,color:#c9d1d9
classDef flagged fill:#5a1e02,stroke:#d93f0b,color:#ffffff
classDef blocking fill:#67060c,stroke:#f85149,color:#ffffff
Green: changed. Grey: untouched, reached through an import or a call. Orange: has findings. Red: has a finding that blocks the merge.
Changed files
|
There was a problem hiding this comment.
Requesting changes: 1 lane(s) blocking, worst finding is high.
Fix or reply to the findings below and push. The next review clears this automatically once they are gone — you should not need to dismiss anything by hand.
$0.0158 · 14,363 in / 4,550 out · 9,399 cached (65%) · z-ai/glm-5.2
critique: $0.0046 · 4,026 in / 1,485 out · 3,226 cached (80%) · z-ai/glm-5.2
security: $0.0034 · 3,984 in / 562 out · 1,573 cached (39%) · z-ai/glm-5.2
tests: $0.0030 · 2,255 in / 999 out · 1,653 cached (73%) · z-ai/glm-5.2
description: $0.0048 · 4,098 in / 1,504 out · 2,947 cached (72%) · z-ai/glm-5.2
…s (282->284) The Feature-Gate Smoke lane's 'removal simulator still agrees with cargo' guard asserts scripts/dep-sim.py --cut-nothing resolves exactly --expect-names N, and that N must equal the kernel-floor names count. tinymemory-core raised the flows-profile names to 284 (see the kernel-floor.limits bump in this PR), so the guard's expected value moves 282 -> 284 in lockstep. Linux-calibrated to the CI measurement, same as the ratchet.
There was a problem hiding this comment.
Requesting changes: 1 lane(s) blocking, worst finding is high.
Fix or reply to the findings below and push. The next review clears this automatically once they are gone — you should not need to dismiss anything by hand.
$0.0126 · 11,366 in / 3,740 out · 7,851 cached (69%) · z-ai/glm-5.2
critique: $0.0017 · 2,055 in / 486 out · 1,619 cached (79%) · z-ai/glm-5.2
security: $0.0026 · 2,034 in / 685 out · 896 cached (44%) · z-ai/glm-5.2
tests: $0.0036 · 2,673 in / 1,212 out · 2,044 cached (76%) · z-ai/glm-5.2
description: $0.0047 · 4,604 in / 1,357 out · 3,292 cached (72%) · z-ai/glm-5.2
There was a problem hiding this comment.
Requesting changes: 1 lane(s) blocking, worst finding is high.
Fix or reply to the findings below and push. The next review clears this automatically once they are gone — you should not need to dismiss anything by hand.
$0.0266 · 20,030 in / 7,942 out · 12,153 cached (61%) · z-ai/glm-5.2
critique: $0.0089 · 6,431 in / 2,541 out · 3,301 cached (51%) · z-ai/glm-5.2
security: $0.0090 · 6,368 in / 2,441 out · 2,688 cached (42%) · z-ai/glm-5.2
tests: $0.0052 · 2,651 in / 1,866 out · 1,954 cached (74%) · z-ai/glm-5.2
description: $0.0035 · 4,580 in / 1,094 out · 4,210 cached (92%) · z-ai/glm-5.2
The rust-feature-gate-smoke lane's 'new feature-gated test modules must be acknowledged' guard requires its EXPECTED allowlist to equal the set of src files that #[cfg]-gate a test on a domain feature. openhuman/memory/people/address_book.rs was deleted in ba088ec (chore(memory): remove entire legacy memory subsystem), so it dropped out of the actual set but stayed in the allowlist, failing the guard. Removed the stale entry; the guard now matches (verified locally — the grep is platform-independent).
|
Closing as superseded — every functional change in this PR is already on Verified against current
The only lines that differ are justification comments (worded differently on No tracking issue is linked (CI hygiene), so nothing else to close. |
Summary
mainCI failures that are unrelated to any feature work and currently red every PR (e.g. fix(embeddings): scope the memory client's default embedder to config credentials #5515, fix(approval): route WebChat approval parks via origin fallback #5514, Add lowercase openHuman launcher symlink to the .deb package #5513, feat(voice): realtime ElevenLabs voice agent alongside classic path #5489):Rust Quality (fmt, clippy)—cannot update the lock file app/src-tauri/Cargo.lock because --locked.Rust Feature-Gate Smoke (gates off)— two independent failures:migration_helpersapply tests panic withno EmbeddingHost installed, and the kernel-floor ratchet regresses (flowsprofile 307 > 305 packages).tinydocs/tinywalletsubmodule bumps.test_config.flowslimit back to the current CI (Linux) measurement (305→307packages /282→284names).--cut-nothingcalibration to the same names count (282→284).openhuman/memory/people/address_book.rsfrom the lane's gated-test allowlist — it was deleted inba088ec20 "remove entire legacy memory subsystem", so the "feature-gated test modules must be acknowledged" guard'sEXPECTEDlist no longer matched reality.Net: the
Rust Feature-Gate Smoke (gates off)lane had five stacked pre-existing failures, all rooted in thetinymemory-coreaddition + the memory-subsystem removal onmain— the shared root cause of the broad draft #5502. This PR is the minimal focused set that greens the lane.Kernel-floor ratchet raise — justification (required)
scripts/kernel-floor.limitsrequires a written justification to raise a limit. Theflowshost profile grew+2 packages / +2 namesbecausetinymemory-corewas added to the always-on memory engine (6bf080266 "add tinymemory-core dependency and patch tinycortex-api").tinymemory-coreis the SQLite/vector store + ingestion/queue engine the mandatory memory families depend on, so it is a deliberate always-on dependency — the same rationale as the existing2026-08-10history entry, which predated this crate. The ratchet also fails on a shed that is not written back, so the limit is set to the exact value CI reported (307/284), not padded. Calibrated on Linux per the ratchet's own convention; macOS resolves+1(308/285) so this specific number cannot be validated on a Mac — it is taken from the CI failure log.The same lane's companion guard,
scripts/dep-sim.py --cut-nothing --expect-names 282in.github/workflows/ci-lite.yml, asserts the simulator's baseline equals the kernel-floor names count. It moves282 → 284in lockstep for the same reason (the guard is--cut-nothing, i.e. it just measures reality).Problem
tinydocs(0.1.0 → 0.1.12) andtinywallet(0.1.0 → 0.2.0) submodule gitlinks were bumped without regeneratingapp/src-tauri/Cargo.lock. The newer versions moved thedocuments(docx-rs/pdf-extract/ppt-rs/…) andweb3(bitcoin/ethers/…) crate cohorts into the module build, so those crates correctly leave the shell lockfile (per the architecture notes inAGENTS.md). With the lock stale, any step that runs cargo--locked(the fmt/quality lane's TLS-dependency-policy check) fails before doing its real work.tinymemoryhost seams. Those are wired at startup in the running app but not in a bare unit test, somigrate_hermes_apply_imports_markdown_entries/migrate_openclaw_apply_imports_markdown_entries_into_target_workspacepanicked withno EmbeddingHost installedunder the gates-off build.Solution
app/src-tauri/Cargo.lockagainst the pinned submodules (net-915 / +78crate lines). It now satisfies--lockedandcargo fmt --all -- --checkpasses.crate::openhuman::memory::host_impls::install_for_tests()(idempotent) at the top of the migrationtest_config, matching the seam wiring the app performs at startup, so the apply path resolves a provider in the unit test.Submission Checklist
migrate_hermes/migrate_openclawapply tests (which already cover the happy path and the missing-source failure path) by installing the seam their setup needs. Verified both pass under--no-default-features.coverage-gateCI confirms.## Related— N/A: no matrix rows change.Closes #NNNin the## Relatedsection — N/A: no tracking issue; this is CI hygiene (see Related).Impact
main's redRust QualityandFeature-Gate Smokejobs.Related
fix(tauri): refresh locked dependency graph), which also refreshes the lockfile and touchesmigration_helpers/ops.rsamong ~28 files. This PR is the minimal, focused subset (2 files) so the two CI blockers can land quickly; if fix(tauri): refresh locked dependency graph #5502 merges first, this can be closed as superseded.AI Authored PR Metadata (required for Codex/Linear PRs)
Linear Issue
Commit & Branch
fix/tauri-lockfile-and-migration-seamc3c06e291Validation Run
pnpm --filter openhuman-app format:check: noapp/frontend changes.pnpm typecheck: no TypeScript changed.cargo test --lib --no-default-features config::migration_helpers::ops::tests::migrate_hermes_apply_imports_markdown_entries config::migration_helpers::ops::tests::migrate_openclaw_apply_imports_markdown_entries_into_target_workspace(2/2 pass).cargo fmt --all -- --checkclean;cargo metadata --locked --manifest-path app/src-tauri/Cargo.tomlsucceeds (lock is consistent).app/src-tauriRust source change (lockfile only).Validation Blocked
command:fullcargo tauri buildwith product featureserror:not run locally (very long); the lock was regenerated by resolving the shell manifest with its declared features, so it reflects the exact graph the product build resolves.impact:CI's product/build lanes validate the full graph.Behavior Changes
Parity Contract
Duplicate / Superseded PR Handling
migration_helpers/ops.rs).Summary by CodeRabbit
Tests
Chores