Skip to content

Fix nightly vlt migration e2e after #2021's heal change - #2050

Merged
Mikola Lysenko (mikolalysenko) merged 1 commit into
mainfrom
ci-janitor/vlt-migration-rule-c
Nov 10, 2026
Merged

Mikola Lysenko (mikolalysenko) merged 1 commit into
mainfrom
ci-janitor/vlt-migration-rule-c

Conversation

@mikolalysenko

@mikolalysenko Mikola Lysenko (mikolalysenko) commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Scheduled CI on main (42763778797, main @ c751724) fails every mode_migration_vlt leg:

  • e2e-extended on ubuntu: vlt 0.0.0-32, 1.0.0-rc.14 and 1.2.0
  • e2e-macos: vlt 1.2.0
  • e2e-windows: vlt 1.0.0-rc.14 and 1.2.0

That's 6 of the 8 failing jobs in the run. The other two are test (windows-latest, *), which #2049 fixes. The same legs also failed in #2049's Windows dispatch 42772455462. These legs run only at night, so PR and merge-queue CI never catch the failure. Nightly ci-ok stays red until it's fixed.

Every leg fails the same assertion in vlt_pinned_matrix_migration_hosted_scan_keeps_agent_patched_tree (migration test 8):

  left: "vlt-lock.json pins Socket-patched packages, but socket-patch could not check 1 installed copies (node_modules is a link, or node_modules/.vlt-lock.json is missing or unreadable); run `vlt ci` to be sure the patched packages are installed."
 right: "vlt-lock.json pins Socket-patched packages; fresh checkouts install them with `vlt ci` or `vlt install --frozen-lockfile`. Note: `vlt update` re-resolves from the registry and drops these hosted patches."

Root cause

#2021 changed how the vlt warm-tree heal judges a store entry: now only vlt's hidden lock decides. Without a hidden lock, the copy is kept and reported as unchecked. This is intended, and the commit message says so.

#2021 updated the rule (c) real-vlt e2e in e2e_redirect_vlt_build.rs (vlt_pinned_matrix_hosted_heal_rule_c_no_hidden_lock) to expect advisory_undeterminable. It missed the matching case in mode_migration_vlt.rs. Test 8 deletes node_modules/.vlt-lock.json and still expected the old afterHash outcome, advisory_nothing_stale().

Fix

Test 8 now expects advisory_undeterminable(ids.len()), the same as the rule (c) test, and its doc comment is updated to match. Its other assertions are unchanged and still pass:

  • the store entries are kept
  • the tree stays patched

The only production behaviour involved is the one #2021 intended. No production code changes.

Proof

Local runs with real vlt (SOCKET_PATCH_VLT_E2E_REQUIRED=1, --include-ignored vlt_pinned_matrix):

  • main, vlt 1.2.0: test 8 fails with the exact left/right shown above (reproduced).
  • This branch, vlt 1.2.0: mode_migration_vlt passes, 14 passed, 0 failed.
  • This branch, vlt 0.0.0-32: 14 passed, 0 failed.

Checks:

Where tests run

No tests were removed or moved. Test 8 still runs in the nightly mode_migration_vlt legs on all three OSes.


Generated by Claude Code


Note

Low Risk
Test-only change aligning e2e expectations with intended heal behavior; no production code touched.

Overview
Aligns migration test 8 (vlt_pinned_matrix_migration_hosted_scan_keeps_agent_patched_tree) with the post-#2021 vlt heal behavior when node_modules/.vlt-lock.json is missing: the hosted scan advisory assertion now expects advisory_undeterminable(ids.len()) instead of advisory_nothing_stale(), matching the existing rule (c) real-vlt e2e.

The test doc comment is updated to state that without a hidden lock, heal rule (c) treats store copies as unchecked and recommends vlt ci, while still asserting the agent-patched store entries are kept and the tree stays patched.

Reviewed by Cursor Bugbot for commit 9baa35f. Configure here.


Generated by Claude Code

Nightly CI on main has failed every mode_migration_vlt leg (ubuntu x3,
macOS, Windows x2) since #2021. That PR made the vlt warm-tree heal
judge a store entry by vlt's hidden lock alone: without one, the copy
is kept and reported as unchecked ("could not check N installed
copies ... run `vlt ci`"). It updated the rule (c) e2e in
e2e_redirect_vlt_build.rs but missed its twin here, migration test 8,
which removes the hidden lock and still expected the "nothing stale"
advisory. These legs run only at night, so PR and merge-queue CI never
saw it.

Expect advisory_undeterminable(ids.len()), as the rule (c) test does.
The store copies are still kept and the tree stays patched.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011f9aeQSeGNDaC689NLWPom
@mikolalysenko Mikola Lysenko (mikolalysenko) added the ci-janitor Opened by the CI janitor routine (flakes, redundant tests, CI perf) label Nov 10, 2026
@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

bugbot run


Generated by Claude Code

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 9baa35f. Configure here.

@mikolalysenko Mikola Lysenko (mikolalysenko) added the Ready for review Agent-verified: mergeable, CI green, Bugbot clean — awaiting human review label Nov 10, 2026
@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

Labeled Ready for review by the burn-down agent.


Generated by Claude Code

@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

Final review brief

What it does: Test-only fix. #2021 made the vlt heal treat a store copy with no hidden lock (node_modules/.vlt-lock.json) as "unchecked". It updated the rule (c) e2e test but missed migration test 8, which still expected the old "nothing stale" advisory. That leaves every nightly mode_migration_vlt leg red. This PR changes test 8 to expect advisory_undeterminable(n), the same as the rule (c) test.

Risk: Low. One assertion and a doc comment in an #[ignore] real-vlt e2e test. No production code changes and CHANGELOG.md is untouched.

Look here:

  • mode_migration_vlt.rs:573-591: new expectation and doc comment
  • e2e_redirect_vlt_build.rs:352-360: the rule (c) test it now matches (same setup: hidden lock removed, then hosted scan)
  • vlt_e2e_common/fixture.rs:46: the advisory text. It matches the "left" side of the nightly failure word for word.

Verified: I read the full diff (1 file, +5/−3) and checked that the helper is in scope through vlt_e2e_common::fixture::*. The test setup matches the rule (c) test exactly. The store-kept and tree-patched assertions are unchanged. CI: ci-ok and clippy green, 50/50 checks pass. Bugbot found no issues. I did not rerun real vlt here. The PR reports 14/14 on vlt 1.2.0 and 0.0.0-32, and the nightly legs will confirm it.

Changes I made: none.

Open questions: none. This pairs with #2049; both are needed to turn nightly ci-ok green.

Auto-merge (squash) is armed, so approving sends this straight to the merge queue.


Generated by Claude Code

Merged via the queue into main with commit 113ea6a Nov 10, 2026
50 checks passed
@mikolalysenko
Mikola Lysenko (mikolalysenko) deleted the ci-janitor/vlt-migration-rule-c branch November 10, 2026 14:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-janitor Opened by the CI janitor routine (flakes, redundant tests, CI perf) Ready for review Agent-verified: mergeable, CI green, Bugbot clean — awaiting human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants