Skip to content

feat(versioning): read the SemVer notation 3.<minor>.<run> as one lineage (readers first) - #6208

Merged
rbuergi merged 6 commits into
mainfrom
feat/platform-semver
Oct 7, 2026
Merged

rbuergi merged 6 commits into
mainfrom
feat/platform-semver

Conversation

@rbuergi

@rbuergi rbuergi commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Readers-first half of policy platform-semver-versioning (registered in Doc/Architecture/PolicyNotProse; manual: new page Doc/Architecture/PlatformVersioning). This PR mints nothing new. Continuous builds keep being 3.0.0-ci.<run> until the separate minter PR lands.

Safe to merge on its own. This PR mints nothing new; continuous builds stay 3.0.0-ci.<run> until the minter (#6209) lands. It is migration step 1, and steps 2 to 4 depend on it reaching every portal (control included), so the minter stays a draft until it has.

Decisions taken (maintainer can override)

Recorded in Doc/Architecture/PlatformVersioning §6 (formerly "Open decisions"). Each one takes the conservative option: nothing already published is renamed, the minor moves only by an explicit, governed action, and Stable keeps following what it follows today.

  1. Stable keeps following deliberately cut releases. It excludes every run-numbered tag (VersionSelect.PickTargets, pinned by Stable_NeverSelectsANewNotationBuild), so no Stable install starts following main. Not chosen: a stable channel pointer, or Stable as a minor-pinned Continuous pattern.
  2. release.yml keeps promoting and renames nothing. v<major>.<minor>.0 adds the clean tag to the commit's already-published <major>.<minor>.<run> set. In the new notation it moves no -latest pointer (CD's arm already did, so a release-side move could only go backwards). GHCR latest still follows releases. The implementation ships with the minter (feat(versioning): mint 3.<minor>.<run> — SemVer minter flip (stacked on #6208) #6209), because no new-notation set exists before it.
  3. The minor moves only through a merged PR that edits PlatformVersion. In practice that is the next-line PR release.yml already opens after each release.

3-latest already moves today: arm phase D and control-first move 3-latest 3.0-latest 3.0.0-latest for the old notation. Seeding 3-latest (step 3) therefore works before the minter flips.

What it does

  • PlatformReleaseOrder: from line 3.1 (SemVerEraStart), a plain <major>.<minor>.<run> with a non-zero patch carries its run number in the patch. Both notations now share one lineage: 3.0.0-ci.9999 < 3.1.10000 < 3.0.0-ci.10002. Zero-patch versions (3.1.0, 4.0.0) are still floors or releases and are compared by their numeric core. The withdrawn slip 3.1.0-ci.7841 keeps its 7841.
    • Without this reader, a clean 3.1.N lands in the promotion band and ranks below every 3.0.0-ci.*. The cut-over would never roll forward, even though SemVer sorts it above.
  • VersionSelect: Stable never admits a run-numbered tag. A new-notation build carries no pre-release label, so without this rule every Stable install, which is the seeded default, would start following main on flip day. The advisory now names the pattern 3.*.
  • .github/scripts/platform-version.py (new, self-test wired into dotnet-test.yml): the one shell-facing reader (ordinal, max-ordinal, line-pointers). main-cd.yml uses it for the satellite-compat baseline, promote's never-backwards check, arm phase D, and control-first's pointers. Pointers in the new notation are 3-latest 3.1-latest, with no per-build 3.1.N-latest.
  • resolve-platform.py: match_set_name / compose_set_name / notice_set_number handle both notations for set names, freezes, bake receipts, promotion records, notices and registry tags. arm-promoted-set.py: run_number_of and line_pattern (3.1.10052 → 3.1.*). node-repo-gate.yml: the platform-set input accepts <major>.<minor>.<run>.

Verification (local, Release -warnaserror, 0 warnings / 0 errors)

  • MeshWeaver.Graph.Test (PlatformReleaseOrder / PlatformFloor / TargetSet): 83/83 passed. Memex.Portal.Shared.Test (VersionSelect / SelfUpdate / OciTagLister): 240/240 passed. MeshWeaver.Documentation.Test (topic map / policy / links): 27/27 passed.
  • Negative control: with SemVerBuildPatch reverted to return null, the interleave, transitivity and BuildOrdinal cases failed, plus 3 VersionSelect cases (including Stable_NeverSelectsANewNotationBuild). The code was restored and rebuilt before commit.
  • resolve-platform.py --self-test: 218 cases, green. With the boundary moved to 9.9, exactly the new-notation cases fail. arm-promoted-set.py, platform-version.py and test-gate-lane-forwards-the-callers-set.py are green. test-cd-steps.py and the workflow guards (shell, timeouts, yaml keys, guard masking, runners, permission pairing, PR secret preflight) are green.

Known side effect

  • resolve-platform.py is vendored into satellites, so check-resolver-copy.py will report drift on every satellite that still carries a copy until it re-copies (or deletes its copy). It reports drift for any canonical change.

Not in this PR (see the doc page's migration order)

  1. MeshWeaver.Plugins readers. SelfUpdateRouting.BuildOrder, ImageLine, ModuleInventoryContent, DeploymentStatus and the floor scripts have their own ci.N parsers, and none of them delegate to PlatformReleaseOrder.
  2. Memex records: updatePattern: 3.0.0-ci* → 3.*, the overlays, check-no-pins.py, and resolve-line-pointer.sh (seed 3-latest).
  3. Core minter: draft PR stacked on this one.

Pairs-with: none: no public type or member is removed.

🤖 Generated with Claude Code

…eage with 3.0.0-ci.<run>

Readers-first half of policy `platform-semver-versioning` (Doc/Architecture/PlatformVersioning).
Mints nothing new: the minter flip is a separate, later change.

- PlatformReleaseOrder: from line 3.1 (SemVerEraStart) a plain <major>.<minor>.<run> with a
  non-zero patch carries its run number in the patch, so both notations interleave by
  publication order; zero-patch floors/releases (3.1.0, 4.0.0) keep their numeric-core reading.
- VersionSelect: Stable never admits a run-numbered tag (a new-notation build has no label);
  the advisory names the pattern 3.*.
- platform-version.py: the one shell-facing reader (ordinal, max-ordinal, line-pointers);
  main-cd's never-backwards checks, baseline and line pointers use it (3-latest 3.1-latest).
- resolve-platform.py / arm-promoted-set.py / node-repo-gate.yml: parse, compose and accept
  both notations.
- Tests incl. negative controls: the interleave cases fail with the reader reverted.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Test Results

    22 files  ± 0      22 suites  ±0   49m 29s ⏱️ +18s
10 961 tests +29  10 768 ✅ +29  193 💤 ±0  0 ❌ ±0 
10 974 runs  +29  10 781 ✅ +29  193 💤 ±0  0 ❌ ±0 

Results for commit a15a448. ± Comparison against base commit c375173.

This pull request removes 40 and adds 45 tests. Note that renamed tests count towards both.

   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---, expected: True)
   --- End of inner exception stack trace ---, isDenial: True)
 ---> (Inner Exception #1) MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.<---
 ---> (Inner Exception #1) MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432<---
 ---> (Inner Exception #1) System.ArgumentException: Value does not fall within the expected range.<---
 ---> (Inner Exception #1) System.InvalidOperationException: boom<---
 ---> (Inner Exception #1) System.InvalidOperationException: source B is misconfigured<---
 ---> (Inner Exception #1) System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known<---
…
Memex.Portal.Shared.Test.InstanceIdRulesMatchTheRegistryTest ‑ TheSetupHostAgreesWithTheRegistry(candidate: "0cce79ce-5e0d-4dcc-a9ff-cda8dfe5ab74")
Memex.Portal.Shared.Test.SessionDenialIsAnAnswerTest ‑ OnlyAVerdictReadsAsADenial(shape: "the same verdict nested, as a late denial dispatch"···, failure: System.InvalidOperationException: write failed
 ---> System.UnauthorizedAccessException: Access denied
   --- End of inner exception stack trace ---, isDenial: True)
Memex.Portal.Shared.Test.VersionSelectTest ‑ AMajorPattern_CrossesFromTheOldNotationToTheNew
Memex.Portal.Shared.Test.VersionSelectTest ‑ Stable_NeverSelectsANewNotationBuild
Memex.Portal.Shared.Test.VersionSelectTest ‑ TheNewNotationsEdgeBuild_IsGatedLikeTheOld
Memex.Portal.Shared.Test.VersionSelectTest ‑ TheOldFleetPattern_NeverSelectsTheNewNotation
Memex.Portal.Shared.Test.VersionSelectTest ‑ WideningThePattern_BeforeTheCutOver_ChangesNothing
MeshWeaver.Compiler.Pipeline.Test.SourcesWatcherStallBackoffTest ‑ The_production_classifier_recognises_a_stall_through_every_wrapping(because: "a stall as an aggregate's FIRST member", fault: System.AggregateException: One or more errors occurred. (Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.)
 ---> MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.
   --- End of inner exception stack trace ---, expected: True)
MeshWeaver.Compiler.Pipeline.Test.SourcesWatcherStallBackoffTest ‑ The_production_classifier_recognises_a_stall_through_every_wrapping(because: "a stall as an aggregate's SECOND member", fault: System.AggregateException: One or more errors occurred. (The operation has timed out.) (Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.)
 ---> System.TimeoutException: The operation has timed out.
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.<---
, expected: True)
MeshWeaver.Compiler.Pipeline.Test.SourcesWatcherStallBackoffTest ‑ The_production_classifier_recognises_a_stall_through_every_wrapping(because: "a stall nested in an aggregate inside a wrapper", fault: System.InvalidOperationException: outer
 ---> System.AggregateException: One or more errors occurred. (Value does not fall within the expected range.) (Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.)
 ---> System.ArgumentException: Value does not fall within the expected range.
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.<---

   --- End of inner exception stack trace ---, expected: True)
…

♻️ This comment has been updated with latest results.

rbuergi and others added 2 commits October 7, 2026 11:39
…e.yml and the minor bump

Doc/Architecture/PlatformVersioning §6: the open decisions become decisions taken
(maintainer can override). Stable keeps following deliberately cut releases; release.yml
keeps promoting and renames nothing (no -latest move in the new notation); the minor moves
only through a merged pull request that edits PlatformVersion.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@rbuergi
rbuergi marked this pull request as ready for review October 7, 2026 09:42
Copilot AI balanced review requested due to automatic review settings October 7, 2026 09:42
@meshweaver-cloud
meshweaver-cloud Bot enabled auto-merge October 7, 2026 09:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Several remaining legacy parsers can misorder notifications, reject valid gate inputs, or rewrite the preserved 3.1 slip.

Review effort: Balanced
Findings: 3 High severity · 1 Low severity

Open (4)
What changed in this PR

Adds readers-first support for the 3.<minor>.<run> platform-version scheme while preserving the legacy lineage.

Changes:

  • Extends C#, Python, and CI readers for both version formats.
  • Prevents Stable deployments from selecting continuous builds.
  • Documents the versioning policy and migration sequence.
File Description
test/​MeshWeaver.Graph.Test/​PlatformReleaseOrderTest.cs Tests cross-format ordering and floors.
test/​Memex.Portal.Shared.Test/​VersionSelectTest.cs Tests selection across the cut-over.
src/​MeshWeaver.Plugin.Packaging/​PlatformReleaseOrder.cs Reads patch-based build ordinals.
src/​MeshWeaver.Documentation/​Data/​Architecture/​PolicyNotProse.md Registers the versioning policy.
src/​MeshWeaver.Documentation/​Data/​Architecture/​PlatformVersioning.md Documents the scheme and migration.
src/​MeshWeaver.Documentation/​Data/​Architecture.md Links the new documentation.
memex/​Memex.Portal.Shared/​SelfUpdate/​VersionSelect.cs Excludes continuous builds from Stable.
.github/​workflows/​node-repo-gate.yml Accepts new set names.
.github/​workflows/​main-cd.yml Uses shared version readers in CD.
.github/​workflows/​dotnet-test.yml Runs the new reader self-test.
.github/​scripts/​test-gate-lane-forwards-the-callers-set.py Tests gate input validation.
.github/​scripts/​resolve-platform.py Resolves both set-name formats.
.github/​scripts/​platform-version.py Adds the shell-facing version reader.
.github/​scripts/​arm-promoted-set.py Supports new-format arming and patterns.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread .github/scripts/resolve-platform.py
Comment thread .github/workflows/main-cd.yml
Comment on lines +845 to +849
elif [[ "$PINNED_SET" =~ ^([0-9]+)\.([0-9]+)\.[1-9][0-9]*$ ]] \
&& { [ "${BASH_REMATCH[1]}" -gt 3 ] || { [ "${BASH_REMATCH[1]}" -eq 3 ] && [ "${BASH_REMATCH[2]}" -ge 1 ]; }; }; then
is_set=true
fi
[ "$is_set" = true ] \

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in 8a249b5. resolve-gate-platform.sh's run_number_of now also reads <major>.<minor>.<run> when (major, minor) >= (3, 1) and the patch is non-zero, the same rule as platform-version.py and PlatformReleaseOrder.SemVerEraStart. As a result the caller ordinal and installed_run_numbers (oldest/newest) see SemVer sets. New self-test cases: 5h, a 3.1.10050 caller against a volume holding 3.1.10000, must be classified AHEAD and report the volume's newest as #10000; 5i, a 3.1.10001 caller against a 3.0.0-ci.9999 volume, must be AHEAD. Negative control: with the SemVer branch disabled, 5h goes RED (it falls into the 'cannot be told apart' refusal). Self-test: OK.

Comment thread test/Memex.Portal.Shared.Test/VersionSelectTest.cs Outdated
@systemorph-com
systemorph-com Bot disabled auto-merge October 7, 2026 09:48
@systemorph-com systemorph-com Bot added the thread:pr-systemorph-meshweaver-6208-0045dc https://memex.systemorph.com/Hosting/Triage/_Thread/pr-systemorph-meshweaver-6208 label Oct 7, 2026
Conflict: PolicyNotProse.md register — kept both rows (platform-semver-versioning
from this branch, stale-adoption-bound from main); they are independent policies.

Review fixes:
- resolve-platform.py: the line alone cannot decide the notation. parse_freeze and
  the publication receipt keep the WRITTEN set name (canonical_set_name), and
  compose_set_name keeps -ci.<run> for the withdrawn slip's runs (<= 7841) on the
  3.1.0 line. Self-test cases added for the slip freeze and composition.
- main-cd.yml notify-platform-update: the superseded check reads both run numbers
  through platform-version.py ordinal (fail-closed), not ${v##*ci.}.
- resolve-gate-platform.sh: run_number_of reads the SemVer notation from line 3.1
  on; self-test cases 5h/5i (SemVer caller AHEAD, mixed-notation volume), red with
  the SemVer branch disabled.
- VersionSelectTest: CutOverRegistry is an ImmutableArray<string>.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 7, 2026 10:28
@meshweaver-cloud
meshweaver-cloud Bot enabled auto-merge October 7, 2026 10:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

The arm phase can still move floating pointers after an ACR listing failure, and public selection documentation is stale.

Review effort: Balanced
Findings: 2 High severity · 1 Low severity

Open (3)
Resolved since last review (3)

Comment thread .github/workflows/main-cd.yml Outdated
Comment thread memex/Memex.Portal.Shared/SelfUpdate/VersionSelect.cs
@systemorph-com
systemorph-com Bot disabled auto-merge October 7, 2026 10:46
…e tag listing; VersionSelect docs define Stable as deliberately cut releases

Answers the two Copilot threads on this PR. The `|| true` let a failed or
ordinal-free ACR listing fall through and move the line pointers without
evidence this set is newest; it now refuses, as the mw-plugin-test guard does.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 7, 2026 10:50
@meshweaver-cloud
meshweaver-cloud Bot enabled auto-merge October 7, 2026 10:51

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

The bake-floor seal gate still treats new-format builds as clean releases and can reject valid mixed-era comparisons.

Review effort: Balanced
Findings: 2 High severity

Open (2)
Resolved since last review (2)

Comment on lines +67 to +70
## 3. Inventory: every place the old notation is produced or parsed

Line numbers are as of this change. **P** = produces the notation, **R** = parses it. "Handled" means
this change teaches the place both notations. "Owed" means a later step of the migration has to change it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in a15a448: assert-bake-floor.py parse now reads the SemVer-era patch (line >= 3.1, patch > 0) as the run ordinal, so 3.0.0-ci.9999 <= 3.1.10000 orders instead of being an unordered mixed pair; the self-test gains cross-notation cases in both directions plus the withdrawn 3.1.0-ci.7841 slip (self-test passes, 0 failures), and the inventory in PlatformVersioning.md now lists the script as handled.

@systemorph-com
systemorph-com Bot disabled auto-merge October 7, 2026 11:01
…airs self-tested

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 7, 2026 12:29
@meshweaver-cloud
meshweaver-cloud Bot enabled auto-merge October 7, 2026 12:29
@systemorph-com
systemorph-com Bot disabled auto-merge October 7, 2026 12:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🔵 Needs a closer look

The implementation appears consistent, but the coordinated cross-repository version cutover warrants final human validation.

Review effort: Balanced
Findings: 2 High severity

Open (2)

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

    4 files  ±  0      4 suites  ±0   4m 58s ⏱️ -39s
1 658 tests  - 200  1 656 ✅  - 200  2 💤 ±0  0 ❌ ±0 
1 659 runs   - 199  1 657 ✅  - 199  2 💤 ±0  0 ❌ ±0 

Results for commit a15a448. ± Comparison against base commit c375173.

This pull request removes 1348 and adds 1148 tests. Note that renamed tests count towards both.
MeshWeaver.Graph.Test.AccessControlGrantByEmailTest ‑ GrantByEmail_ExistingUser_GrantsSelectedRoleImmediately_NoPin
MeshWeaver.Graph.Test.AccessControlGrantByEmailTest ‑ GrantByEmail_UnknownUser_SchedulesGrantAtNodePath_ThenLandsOnSignUp
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ ABellOnlyRequest_NeverReachesTeamsOrEmail_WhateverThePreference
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ ConcurrentGrants_StillSpendExactlyTheBudget_AndTellTheGranterOnce
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ EachGranterHasTheirOwnBudget_AndANewWindowStartsAFreshOne
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ TheFirstThreeGrantsMayMail_TheFourthTellsTheGranter_TheRestAreBellOnly
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ TheNotifier_ABulkGrantMailsThreeRecipients_AndTellsTheGranterOnce
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ TheSweep_KeepsThePreviousWindow_AndDeletesOnlyOlderOnes
MeshWeaver.Graph.Test.AccessGrantNotifierTargetTest ‑ ASegmentThatMerelyStartsWithAccess_IsNotStripped
MeshWeaver.Graph.Test.AccessGrantNotifierTargetTest ‑ AutoStampedMainNode_StripsTheAccessContainer
…
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ ADeniedRoleIsNotAWriteGrant
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ ASelfConsistentRootGrant_IsAllowedAtTheWriteBoundary_ButNeverOfferedInTheUi
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ AnEntitlementIsStillAllowed(role: "Commenter")
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ AnEntitlementIsStillAllowed(role: "Viewer")
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ AnOrdinarySpaceIsUntouched
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ AssignmentOffAGrantPath_IsIgnored
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ BijectiveSync_IsNotSystemOwned
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ CanGrantAt_APartitionContext_IsAllowed(scope: "Admin")
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ CanGrantAt_APartitionContext_IsAllowed(scope: "AgenticEngineering")
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ CanGrantAt_APartitionContext_IsAllowed(scope: "Store/Plugin")
…

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

  3 files  ±0    3 suites  ±0   7m 12s ⏱️ -42s
569 tests ±0  378 ✅ ±0  191 💤 ±0  0 ❌ ±0 
573 runs  ±0  382 ✅ ±0  191 💤 ±0  0 ❌ ±0 

Results for commit a15a448. ± Comparison against base commit c375173.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

    5 files  ±  0      5 suites  ±0   4m 52s ⏱️ +46s
1 406 tests +220  1 406 ✅ +220  0 💤 ±0  0 ❌ ±0 
1 406 runs  +219  1 406 ✅ +219  0 💤 ±0  0 ❌ ±0 

Results for commit a15a448. ± Comparison against base commit c375173.

This pull request removes 1130 and adds 1350 tests. Note that renamed tests count towards both.
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ ADeniedRoleIsNotAWriteGrant
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ ASelfConsistentRootGrant_IsAllowedAtTheWriteBoundary_ButNeverOfferedInTheUi
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ AnEntitlementIsStillAllowed(role: "Commenter")
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ AnEntitlementIsStillAllowed(role: "Viewer")
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ AnOrdinarySpaceIsUntouched
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ AssignmentOffAGrantPath_IsIgnored
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ BijectiveSync_IsNotSystemOwned
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ CanGrantAt_APartitionContext_IsAllowed(scope: "Admin")
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ CanGrantAt_APartitionContext_IsAllowed(scope: "AgenticEngineering")
MeshWeaver.Graph.Test.AccessAssignmentGuardTest ‑ CanGrantAt_APartitionContext_IsAllowed(scope: "Store/Plugin")
…
MeshWeaver.Graph.Test.AToolAnswerSpellsSourceCharactersAsThemselvesTest ‑ Get_WritesADiffsPlusSignsAndAngleBrackets_AsThemselves
MeshWeaver.Graph.Test.AToolAnswerSpellsSourceCharactersAsThemselvesTest ‑ ToolAnswerJson_ParsesToTheSameDocument_AsTheHubsSerialization
MeshWeaver.Graph.Test.AccessControlGrantByEmailTest ‑ GrantByEmail_ExistingUser_GrantsSelectedRoleImmediately_NoPin
MeshWeaver.Graph.Test.AccessControlGrantByEmailTest ‑ GrantByEmail_UnknownUser_SchedulesGrantAtNodePath_ThenLandsOnSignUp
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ ABellOnlyRequest_NeverReachesTeamsOrEmail_WhateverThePreference
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ ConcurrentGrants_StillSpendExactlyTheBudget_AndTellTheGranterOnce
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ EachGranterHasTheirOwnBudget_AndANewWindowStartsAFreshOne
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ TheFirstThreeGrantsMayMail_TheFourthTellsTheGranter_TheRestAreBellOnly
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ TheNotifier_ABulkGrantMailsThreeRecipients_AndTellsTheGranterOnce
MeshWeaver.Graph.Test.AccessGrantMailBudgetTest ‑ TheSweep_KeepsThePreviousWindow_AndDeletesOnlyOlderOnes
…

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

    4 files  ±0      4 suites  ±0   6m 59s ⏱️ + 1m 2s
2 606 tests +4  2 606 ✅ +4  0 💤 ±0  0 ❌ ±0 
2 610 runs  +4  2 610 ✅ +4  0 💤 ±0  0 ❌ ±0 

Results for commit a15a448. ± Comparison against base commit c375173.

This pull request removes 1 and adds 5 tests. Note that renamed tests count towards both.
Memex.Portal.Shared.Test.InstanceIdRulesMatchTheRegistryTest ‑ TheSetupHostAgreesWithTheRegistry(candidate: "0e5c2a28-1682-4ca9-95ee-99930022e8b2")
Memex.Portal.Shared.Test.InstanceIdRulesMatchTheRegistryTest ‑ TheSetupHostAgreesWithTheRegistry(candidate: "0cce79ce-5e0d-4dcc-a9ff-cda8dfe5ab74")
MeshWeaver.Documentation.Test.AutomationSwitchesReachTheConfigMapGuard ‑ AnExplicitNullOnTheRecord_IsOmittedFromTheConfigMap
MeshWeaver.Documentation.Test.AutomationSwitchesReachTheConfigMapGuard ‑ AnUnquotedFalseOnTheRecord_RendersAsTheStringFalse
MeshWeaver.Documentation.Test.AutomationSwitchesReachTheConfigMapGuard ‑ AnUnsetSwitch_IsOmittedFromTheConfigMap
MeshWeaver.Documentation.Test.AutomationSwitchesReachTheConfigMapGuard ‑ EveryEnabledSwitchInTheTemplate_IsClassifiedHere

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

    2 files  ±0      2 suites  ±0   8m 37s ⏱️ -3s
1 118 tests ±0  1 118 ✅ ±0  0 💤 ±0  0 ❌ ±0 
1 119 runs  ±0  1 119 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit a15a448. ± Comparison against base commit c375173.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

    4 files  ±0      4 suites  ±0   16m 49s ⏱️ -6s
3 604 tests +5  3 604 ✅ +5  0 💤 ±0  0 ❌ ±0 
3 607 runs  +5  3 607 ✅ +5  0 💤 ±0  0 ❌ ±0 

Results for commit a15a448. ± Comparison against base commit c375173.

This pull request removes 39 and adds 20 tests. Note that renamed tests count towards both.

   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---, expected: True)
   --- End of inner exception stack trace ---, isDenial: True)
 ---> (Inner Exception #1) MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.<---
 ---> (Inner Exception #1) MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432<---
 ---> (Inner Exception #1) System.ArgumentException: Value does not fall within the expected range.<---
 ---> (Inner Exception #1) System.InvalidOperationException: boom<---
 ---> (Inner Exception #1) System.InvalidOperationException: source B is misconfigured<---
 ---> (Inner Exception #1) System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known<---
…
Memex.Portal.Shared.Test.SessionDenialIsAnAnswerTest ‑ OnlyAVerdictReadsAsADenial(shape: "the same verdict nested, as a late denial dispatch"···, failure: System.InvalidOperationException: write failed
 ---> System.UnauthorizedAccessException: Access denied
   --- End of inner exception stack trace ---, isDenial: True)
Memex.Portal.Shared.Test.VersionSelectTest ‑ AMajorPattern_CrossesFromTheOldNotationToTheNew
Memex.Portal.Shared.Test.VersionSelectTest ‑ Stable_NeverSelectsANewNotationBuild
Memex.Portal.Shared.Test.VersionSelectTest ‑ TheNewNotationsEdgeBuild_IsGatedLikeTheOld
Memex.Portal.Shared.Test.VersionSelectTest ‑ TheOldFleetPattern_NeverSelectsTheNewNotation
Memex.Portal.Shared.Test.VersionSelectTest ‑ WideningThePattern_BeforeTheCutOver_ChangesNothing
MeshWeaver.Compiler.Pipeline.Test.SourcesWatcherStallBackoffTest ‑ The_production_classifier_recognises_a_stall_through_every_wrapping(because: "a stall as an aggregate's FIRST member", fault: System.AggregateException: One or more errors occurred. (Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.)
 ---> MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.
   --- End of inner exception stack trace ---, expected: True)
MeshWeaver.Compiler.Pipeline.Test.SourcesWatcherStallBackoffTest ‑ The_production_classifier_recognises_a_stall_through_every_wrapping(because: "a stall as an aggregate's SECOND member", fault: System.AggregateException: One or more errors occurred. (The operation has timed out.) (Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.)
 ---> System.TimeoutException: The operation has timed out.
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.<---
, expected: True)
MeshWeaver.Compiler.Pipeline.Test.SourcesWatcherStallBackoffTest ‑ The_production_classifier_recognises_a_stall_through_every_wrapping(because: "a stall nested in an aggregate inside a wrapper", fault: System.InvalidOperationException: outer
 ---> System.AggregateException: One or more errors occurred. (Value does not fall within the expected range.) (Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.)
 ---> System.ArgumentException: Value does not fall within the expected range.
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.<---

   --- End of inner exception stack trace ---, expected: True)
MeshWeaver.Compiler.Pipeline.Test.SourcesWatcherStallBackoffTest ‑ The_production_classifier_recognises_a_stall_through_every_wrapping(because: "a stall wrapped as InnerException", fault: System.InvalidOperationException: outer
 ---> MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.
   --- End of inner exception stack trace ---, expected: True)
…

@rbuergi
rbuergi merged commit cac0664 into main Oct 7, 2026
75 of 79 checks passed
rbuergi added a commit that referenced this pull request Oct 7, 2026
feat(versioning): mint 3.<minor>.<run> — SemVer minter flip (stacked on #6208)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

thread:pr-systemorph-meshweaver-6208-0045dc https://memex.systemorph.com/Hosting/Triage/_Thread/pr-systemorph-meshweaver-6208

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants