Repository navigation
fix(gitsync): the image's own module copy is judged against an import's requires (Plugins#2715) - #6190
Merged
Conversation
…'s requires (Plugins#2715)
LoadedPackageModuleReader left a module that loaded from the IMAGE's copy out of the
reading ("absent means not judged"), so rule 1b (DeclineUnmetRequirements) could never
hold an import against the commonest copy there is. Measured on the control instance
2026-10-05: image Plugins 29bfaefb ships AI stamped 1.21.1; Hosting's tree declared
AI@^1.22.0 and called LanePolicy (AI 1.22 only); the import wrote Hosting's sources
and twenty Hosting NodeTypes, InstanceAction among them, parked at CS0246 LanePolicy.
- ResolveWithImageCopies: an image-copy load is read at the version its module.seed.json
stamp states (ImageModuleSeed, #6044), keyed by the stamp's package; a landed generation
that loaded wins. A seed can only understate the image's bytes, so this can over-hold,
never admit. No stamp / substituted / ambiguous loads stay unjudged.
- ImageCopiesOf: the production reader of those stamps.
- Resolve keeps its shape and forwards (distinct name, no CS0419 for dependents).
- Doc: ModuleSyncPerManifestHash rule 1b.
Tests: LoadedPackageModuleReaderTest — the incident through the real decision, with the
old reading as the in-test negative control (Synced); disabling the image pass reds 2 of 10.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Contributor
Test Results 11 files - 11 11 suites - 11 27m 59s ⏱️ - 15m 36s Results for commit 7249e74. ± Comparison against base commit 8c08fa4. This pull request removes 4011 and adds 57 tests. Note that renamed tests count towards both.♻️ This comment has been updated with latest results. |
rbuergi
disabled auto-merge
October 6, 2026 07:12
rbuergi
enabled auto-merge
October 6, 2026 07:12
rbuergi
disabled auto-merge
October 6, 2026 07:13
rbuergi
enabled auto-merge
October 6, 2026 07:13
rbuergi
disabled auto-merge
October 6, 2026 07:13
rbuergi
enabled auto-merge
October 6, 2026 07:13
This was referenced Oct 6, 2026
Contributor
Contributor
Contributor
Contributor
Contributor
Contributor
Test Results (shard 4) 1 files - 3 1 suites - 3 6m 19s ⏱️ - 8m 33s Results for commit 7249e74. ± Comparison against base commit 8c08fa4. This pull request removes 3614 and adds 510 tests. Note that renamed tests count towards both. |
rbuergi
disabled auto-merge
October 6, 2026 12:14
rbuergi
enabled auto-merge
October 6, 2026 12:14
rbuergi
added a commit
that referenced
this pull request
Oct 6, 2026
…t-requires fix(gitsync): the image's own module copy is judged against an import's requires (Plugins#2715)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs Systemorph/MeshWeaver.Plugins#2715. That issue is sev:H, so it closes after verification on a rolled instance, not when this merges.
Root cause
src/MeshWeaver.PluginCatalog/LoadedPackageModuleReader.cs(Resolve) is the reading that rule 1b (ModuleSyncDecision.DeclineUnmetRequirements, #6110) judges an import'srequiresagainst. It only stated a module that loaded from a landed generation. A module that loaded from the image's own copy was left out, and the comment called that "not judged". So rule 1b could never hold an import against the image copy, which is the most common copy there is.It is live now on the control instance (memex.systemorph.com, image
d205295=3.0.0-ci.9984, Plugins29bfaefb). Read-only readings from 2026-10-06 ~06:45Z:search nodeType:NodeType content.compilationStatus:Error partitions:allreturns 21 types over 123 readable partitions. 20 of them are in Hosting, includingHosting/InstanceAction,Deployment,InstanceRequest,FleetConsoleandTriageItem. All were compiled at 2026-10-05 23:25–23:26Z.compilationErroronTriageItemand on anInstanceActioninstance isCS0246/CS0103 LanePolicy,LaneScheduler,Lanes, andCS1061 ThreadDispatchPool.Allowance. Those are AI members from Plugins4c5aa6437.Plugins/Hostingwas installed at 23:27:04Z. ItsHosting/index.jsonhash52bb6e92…is Plugins26aaaf092, which declaresAI@^1.22.0.1.21.1(AI/manifest.lockat29bfaefb), and29bfaefbdoes not contain4c5aa6437./healthnodetype_bakelists all 20 Hosting types as failed. The InstanceAction NodeType is in Error, so instance actions on the control instance cannot run.Fix
ResolveWithImageCopies. A module that loaded from the image's copy is now read at the version itsmodule.seed.jsonstamp states (ImageModuleSeed, added for Store-installed module overrides the image's baseline seed at boot — correct image runs pre-8931656 Plugins code (no version/commit comparison in ComputeEffectiveModuleEntriesForPlatform) #6044 by fix(modules): a store copy overrides the image's own module only as a strictly newer release (#6044) #6103). The entry is keyed by the package the stamp names.ImageCopiesOfis the production reader of those stamps.Resolvekeeps its shape and forwards. The new method has a distinct name, not an overload, so dependents'<see cref>cannot hit CS0419.manifest.lockkeeps its number while the sources move on, never the reverse (ImageModuleSeed.DeclineReasonexplains the same point). So this can hold an import the image would have satisfied, but it can never admit one the image cannot satisfy. That is the direction a gate should err in.ModuleSyncPerManifestHash.md, rule 1b.Tests
LoadedPackageModuleReaderTest, run locally: 10 of 10 pass.AI@^1.22.0and the image AI is stamped1.21.1, so the import is Declined and the reason names1.21.1.Resolve) lets the same tree go Synced, which is what happened on the control instance.TheImageCopyLoaded_ReadsTheSeedsVersion.ImageCopiesOfreads a real stamp from disk.What this does NOT do / not established
3.0.0-ci.9995(which ships AI 1.22.x), or the landed store AI 1.22.0 loading. After that, recycleHosting/Deployment(the type cascades).Plugins/AIinstalled 2026-10-05 21:40Z, which carriesLanePolicy) did not load at the 22:54Z boot, even though 1.22.0 > 1.21.1. The compile errors show that the loaded AI lacksLanePolicy. I did not read the pod's[ModuleLoad]lines: that is break-glass, and the governedLogsaction needsHosting/InstanceAction, which is down. So "the image copy loaded" is an inference from the compile errors, not a log reading.requiresis still not caught here. Plugins now stamps floors (mesh-floors.py).Pairs-with: none — adds a public method and a public record; nothing is removed or re-signed.
🤖 Generated with Claude Code