What happened
Rolling the fleet to 3.0.0-ci.8059 (core a57a6b5 Γ plugins a7abdb2c) on 2026-09-08 00:22β00:50Z: on memex.systemorph.com the new pod (memex-portal-deployment-7d5d458cc4-cbztk) never passes its startup probe β /health answers 503 from nodetype_bake:
Health check nodetype_bake with status Unhealthy β¦ NodeType bake regressed on this image β refusing readiness so the rollout stalls with the previous image still serving. 4 NodeType(s) regressed on this image: Doc/Architecture/BusinessRules/Cession, Doc/DataMesh/PythonPandasNode/PandasExplorer, Doc/DataMesh/SocialMedia/Post, Doc/DataMesh/SocialMedia/Profile
The same pod's log names the cause for each of the four β one instance node per type, read during the bake:
MeshWeaver.Mesh.MeshNodeContentDegradedException: MeshNodeStreamCache.GetStream: content for 'Doc/Architecture/BusinessRules/Cession/MotorXL' (nodeType 'Doc/Architecture/BusinessRules/Cession') stayed an untyped JsonElement β the $type discriminator resolved to no registered CLR type on the reading hub and the mesh-wide content-type registry did not recover it β¦
β¦ 'Doc/DataMesh/PythonPandasNode/PandasExplorer/LiveFrame' ($type PandasExplorer)
β¦ 'Doc/DataMesh/SocialMedia/Post/Post-001' ($type SocialMediaPost)
β¦ 'Doc/DataMesh/SocialMedia/Profile/Roland-LinkedIn' ($type SocialMediaProfile)
The gate did its job: the old 8055 pods keep serving, the deploy run (Memex 34173391343) reported the stalled rollout red at its 25-minute budget. Nothing broken is serving. But the release is un-rollable.
Root cause
8055 (core 7bfe2d9) rolled clean on the same portal 2 h earlier (Job 36 complete, 3/3 ready). The only core change between the sets is #3628 (7bfe2d907..a57a6b52b, "the untyped-content gate can fire"), which introduced MeshNodeContentDegradedException and throws it from MeshNodeStreamCache.ConvertContentJsonElementToTyped when content stays a JsonElement. The four regressed types are exactly the doc types whose instance nodes carry a $type declared in the type's OWN Source/ (CessionData, PandasExplorer, SocialMediaPost, SocialMediaProfile): during the bake, the instance is read on a hub where that type is not yet registered (the type is what the bake is compiling), the content is legitimately untyped for that moment, and what used to be a silent degradation is now a throw inside the bake β which the sweep scores as a regression. LateContentTypeRegistrationTest (added by #3628) was meant to cover the late-registration case; the bake path is a case it does not model.
Both portals show it: memex-cloud's 8059 pod logs the same exception for Posts/ClaudeAbstractsErrors (SocialMedia/Post), plus CS0246: 'CessionData' could not be found on Doc/Architecture/BusinessRules/Cession β the same type, failing to compile its own source in the same window.
What needs to happen
The throw must not fire for content whose type is registered by the NodeType being baked β the bake must read those instances after their type compiled, or the conversion must degrade (as before) rather than throw while that type's compilation is in flight. Until then every set β₯ a57a6b5 stalls every rollout at the bake gate; the fleet stays on 8055 (whose migration image lacks Plugins#1488's budget β the databases are already migrated to v55 by the 8059 Job, so 8055 pods serve fine).
Evidence: Memex runs 34173111536 (memex-cloud) and 34173391343 (memex); pods memex-portal-deployment-7d5d458cc4-cbztk (memex) and memex-portal-deployment-8b96fdbd4-h7cxj (memex-cloud).
What happened
Rolling the fleet to 3.0.0-ci.8059 (core a57a6b5 Γ plugins a7abdb2c) on 2026-09-08 00:22β00:50Z: on memex.systemorph.com the new pod (
memex-portal-deployment-7d5d458cc4-cbztk) never passes its startup probe β/healthanswers 503 fromnodetype_bake:The same pod's log names the cause for each of the four β one instance node per type, read during the bake:
The gate did its job: the old 8055 pods keep serving, the deploy run (Memex 34173391343) reported the stalled rollout red at its 25-minute budget. Nothing broken is serving. But the release is un-rollable.
Root cause
8055 (core 7bfe2d9) rolled clean on the same portal 2 h earlier (Job 36 complete, 3/3 ready). The only core change between the sets is #3628 (
7bfe2d907..a57a6b52b, "the untyped-content gate can fire"), which introducedMeshNodeContentDegradedExceptionand throws it fromMeshNodeStreamCache.ConvertContentJsonElementToTypedwhen content stays aJsonElement. The four regressed types are exactly the doc types whose instance nodes carry a$typedeclared in the type's OWNSource/(CessionData,PandasExplorer,SocialMediaPost,SocialMediaProfile): during the bake, the instance is read on a hub where that type is not yet registered (the type is what the bake is compiling), the content is legitimately untyped for that moment, and what used to be a silent degradation is now a throw inside the bake β which the sweep scores as a regression.LateContentTypeRegistrationTest(added by #3628) was meant to cover the late-registration case; the bake path is a case it does not model.Both portals show it: memex-cloud's 8059 pod logs the same exception for
Posts/ClaudeAbstractsErrors(SocialMedia/Post), plusCS0246: 'CessionData' could not be foundonDoc/Architecture/BusinessRules/Cessionβ the same type, failing to compile its own source in the same window.What needs to happen
The throw must not fire for content whose type is registered by the NodeType being baked β the bake must read those instances after their type compiled, or the conversion must degrade (as before) rather than throw while that type's compilation is in flight. Until then every set β₯ a57a6b5 stalls every rollout at the bake gate; the fleet stays on 8055 (whose migration image lacks Plugins#1488's budget β the databases are already migrated to v55 by the 8059 Job, so 8055 pods serve fine).
Evidence: Memex runs 34173111536 (memex-cloud) and 34173391343 (memex); pods
memex-portal-deployment-7d5d458cc4-cbztk(memex) andmemex-portal-deployment-8b96fdbd4-h7cxj(memex-cloud).