v0.27.0 invalidates every stored conformance verdict — needs a release note, and the wording invites a wrong diagnosis #211
Labels
No labels
code-review
correctness
dos
performance
security
severity/high
severity/low
severity/medium
tech-debt
Kind/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
h-dv/code-index#211
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found by dogfooding the v0.27.0 release candidate (
caa62fe). Not a code defect — the classification is correct and conservative. It is an upgrade consequence nobody has named, plus a wording problem.What an operator sees after upgrading
The wasmtime version is identical on both sides: 36.0.14. What changed is that the engine IDENTITY STRING gained a knob suffix.
Why every installation is affected
bff9f15(2026-09-04) added the knob suffix to the identityformat!incrates/plugin-host/src/engine.rs:git merge-base --is-ancestor bff9f15 v0.26.1→ false. The commit is unreleased and ships first in v0.27.0.So on upgrade,
engine_is_current()returns false for every verdict recorded by any previous release, on every machine. Each one lands in thestalebucket, andplugin doctorWARNs until the operator re-runscode-index plugin checkonce per installed package.The behaviour is right; do not "fix" it
crates/cli/src/plugin_doctor.rs:651is doing the correct thing. The knobs (epoch,fuel,stack,rsimd_det, …) genuinely change execution semantics, so a C1 verdict recorded without knowing them is not provably transferable to this host. Treating an unknown-knob verdict as still-passing would be exactly the "measured under different conditions, reported as measured here" collapse this tree refuses everywhere else. Wideningengine_is_current()to ignore the suffix would be a regression in honesty.What actually needs doing
1. Release note for v0.27.0. State plainly that this release changes the recorded engine identity, that existing conformance verdicts therefore read as stale, that
plugin doctorwill WARN, and that the one-line remedy iscode-index plugin check <digest>per installed package. An operator who upgrades and meets an unexplained WARN on a package that was fine yesterday will otherwise assume the upgrade broke their plugin.2. Wording. "passed under another engine" is literally true of the identity record but reads as "a different wasmtime", sending the reader to hunt for an engine change that did not happen. When the two strings share a version prefix and differ only by added fields, say so — e.g. "recorded before this host began pinning engine knobs (same
wasmtime 36.0.14); the verdict predates the fields, it was not taken under a different engine". The distinction is between a different engine and a less precise record of the same one, and only the second is what happened here.That wording change is worth a test: a verdict whose engine string is a strict prefix of the host's should render as the predates-the-fields case, and one with a genuinely different version should still render as another engine. Mutate the prefix test to
==and the first assertion must go red.Not affected
Shipped first-party packages are unaffected on a fresh install: a new user has no prior verdict, so they land in
not_run, which already reads correctly. This only bites installations that carry verdicts recorded by an earlier release.evidence_gaps.semanticstells the reader to consultpartial_sources, and no tool ever emits that field #216plugin statusand the operator guide still call a predates-the-knobs verdict "another engine" — drift introduced by #211's fix #217