Repository navigation
PostgreSQL schema 'user.mesh_nodes' missing — node creation fails on all pods #1127
Description
What is failing
Node creation (via PostgreSqlStorageAdapter.WriteAsyncCore) fails with a Npgsql.PostgresException for every attempt to persist a node under the User/ namespace. The operation hits the database and PostgreSQL returns error 42P01: relation "user.mesh_nodes" does not exist.
All 27 occurrences target the same path — User/_Memex/AiSettings — suggesting this fires when a user's AI settings node is first created or saved.
Probable cause — high confidence
The PostgreSQL storage adapter (MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter) writes nodes to schema-qualified tables. It expects the schema user with a table mesh_nodes to exist, but that relation is absent from the database. The most likely explanations:
- EF Core / SQL migration was never run for the
userschema — the adapter auto-creates schemas on write, or the migration script for theuserpartition was missed during deployment. - A schema name mismatch — the adapter is configured to look for
user.mesh_nodesbut migrations created the table under a different schema (e.g.public.mesh_nodesor a differently-cased schema name).
The error is deterministic (every retry on every pod hits it) and affects a single schema — other node operations may succeed for non-User/ paths.
Impact
Moderate. 27 failures over ~10.5 hours on all 3 memex-cloud pods. Any attempt to create or update a node in the User/_Memex/AiSettings path is silently lost (the exception is caught and logged, but the node never persists). Users trying to save or update their AI settings will see no effect — settings changes appear to succeed in the UI but are discarded on the server. Since the affected path is specifically User/_Memex/AiSettings, this likely prevents users from configuring AI/agent behaviour.
Where to look
MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCoreat line 595 — the call site that fails.- The EF Core migration / SQL initialisation script for the PostgreSQL adapter — verify that the
userschema anduser.mesh_nodestable are created. - The adapter's schema resolution logic — check whether schema names are lowercased by Npgsql vs. how they were created in the database (PostgreSQL folds unquoted identifiers to lowercase; quoted identifiers are case-sensitive).
Existing reports
No existing incident or issue found for this fingerprint.
Evidence
| Fingerprint | 4a05ce8a3e7af5ed |
| Category | MeshWeaver.Mesh.CreateNode |
| Severity | Error |
| Top frame | MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) |
| Namespace | memex-cloud |
| Pods | memex-portal-deployment-6956d54bb5-l6mxv, memex-portal-deployment-8476467cb6-nkbhh, memex-portal-deployment-5bbfc97c64-lq7lw |
| Occurrences | 27 |
| First seen | 2026-08-10 01:09:41Z |
| Last seen | 2026-08-10 11:44:37Z |
Recent log lines
2026-08-10 07:09:47Z memex-portal-deployment-8476467cb6-nkbhh fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
2026-08-10 07:09:47Z memex-portal-deployment-8476467cb6-nkbhh fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
2026-08-10 07:09:47Z memex-portal-deployment-8476467cb6-nkbhh fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
2026-08-10 07:09:47Z memex-portal-deployment-8476467cb6-nkbhh fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
2026-08-10 07:09:47Z memex-portal-deployment-8476467cb6-nkbhh fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
2026-08-10 11:44:37Z memex-portal-deployment-5bbfc97c64-lq7lw fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
2026-08-10 11:44:37Z memex-portal-deployment-5bbfc97c64-lq7lw fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
2026-08-10 11:44:37Z memex-portal-deployment-5bbfc97c64-lq7lw fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
2026-08-10 11:44:37Z memex-portal-deployment-5bbfc97c64-lq7lw fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
2026-08-10 11:44:37Z memex-portal-deployment-5bbfc97c64-lq7lw fail: MeshWeaver.Mesh.CreateNode[0]
Unexpected error during node creation at User/_Memex/AiSettings
Npgsql.PostgresException (0x80004005): 42P01: relation "user.mesh_nodes" does not exist
POSITION: 13
at Npgsql.Internal.NpgsqlConnector.ReadMessageLong(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Hosting.PostgreSql/PostgreSqlStorageAdapter.cs:line 595
at MeshWeaver.Host…[truncated]
Opened automatically from Admin/_LogIncident/4a05ce8a3e7af5ed. Recurrences are folded into this issue rather than opening new ones.
Activity
rbuergi commentedon Aug 10, 2026
Root-caused — the issue's "probable cause" (missing migration / schema-case mismatch) is not it. The path was wrong, not the schema.
Useris the self-typed NodeType declaration node (UserNodeType.CreateMeshNode()setsNodeType = "User"on the node at pathUser), soAiSourcesInstallHook's pathlessnodeType:Useruser enumeration returned the declaration alongside real accounts and reconciled its Id ("User") as an account — writingUser/_Memex/AiSettingsinto a partition no instance provisions. Once per installed package, per pod boot repair pass: 27 = 3 pod boots × ~9 installed packages, bursts within the same second per pod.path:User/_Memex/AiSettingsreturns 0 nodes on the live portal; real users' settings (e.g.rbuergi/_Memex/AiSettings) were reconciled correctly by the same pass,lastModifiedBy: system-securitytoday. The failed writes carried only machine-generated package-source rows for a nonexistent account.540852750). Occurrences after ~06:24Z today are the pre-fix image still running on the pods; the noise stops on the next image roll.User/...path; all othernodeType:Userconsumers are content-filtered or read-only, and declaration nodes never pass through the CreateNode pipeline, so the seed handlers can't reproduce this.rbuergi commentedon Aug 10, 2026
Traced the write path. The schema is not missing by accident —
"User"is being used as a user id.The chain
AiSettingsNodeType.PathFor(user)builds{user}/_Memex/AiSettings. The reported path is literallyUser/_Memex/AiSettings, so{user}resolved to the string"User". Its first segment then routes to schemauser(the router lowercases the first segment), and that schema does not exist — hence 42P01.It does not exist by design.
IncludedPartitionStaticProviderrecords it: "Authwas historicallyUserbefore V27 renamed the central auth-lookup partition." Souseris a schema that was renamed away; nothing provisions it now.Where
"User"comes fromAiSourcesInstallHook.Users():It takes
n.Idverbatim for everynodeType:Usernode, with the namespace filter deliberately removed. So aUser-typed node whoseIdis"User"— a legacyUserpartition root, or the typeless stub a satellite write auto-anchors (LegacyUserPartitionRepairdescribes exactly that shape) — is treated as a user id.This matches the evidence precisely: all 27 occurrences target the same path, i.e. one bogus "user" retried, not 27 users failing.
What I could not confirm
Which node carries
Id = "User"— that needs a read against the live store, e.g.I did not want to ship a fix on an unverified premise, so this is analysis rather than a patch.
Suggested fix, once confirmed
Users()should not accept a reserved partition name as a user id.IncludedPartitionStaticProvider.ReservedNamesalready carries the exact set (Admin,Auth,User,Portal,Kernel, plus the global satellite namespaces) and already keeps"User"in it "so any live deployment that still references the old name is filtered out alongside the newAuthname" — the same reasoning applies here.🚨 Worth stating plainly: filtering the id is the right fix only if the offending node is a legacy artefact. If a real user genuinely has
Id = "User", the filter would silently stop serving them, and the correct fix is repairing that node instead. Please confirm which before patching.Related: the same "first segment →
seg.ToLowerInvariant()" rule is what makesAcmeandACMEthe same partition (seen in #983), and aPartitionDefinitionwithSchemaleft null provisions the schema verbatim while writes hit the lowercased name — another 42P01 shape worth ruling out if the above does not hold.rbuergi commentedon Aug 10, 2026
Closing out the one open question from the analysis above — "which node carries
Id = "User", and is it a legacy artefact or a real account?" — with a read-only check against the live memex-cloud portal (the namespace in the evidence footer).It is the NodeType declaration. No real account is affected.
nodeType:User select:path,id,name,nodeTypereturns exactly two rows:UserrbuergiThe decisive detail is the absent
version/lastModifiedon theUserrow: every persisted node carries both. It is served by the static provider, never written to storage — andget @Userconfirms it from the other side, returningNot found: User. So the row is the self-typed declaration (UserNodeType.CreateMeshNode()→new MeshNode("User") { NodeType = "User" }, i.e.Id == Path == NodeType == "User"), not an account.That settles the caveat raised above: filtering this id cannot stop serving a real user, because there is no real user behind it — and an account with that id is impossible anyway, since
Useris a reserved partition name.Nothing was lost.
path:User/_Memex/AiSettings→ 0 results; every phantom write aborted on the 42P01 and none persisted. Meanwhile the same repair pass reconciled all 7 real accounts correctly (iser.steinmetz,kalpesh.patel,lucas.mebold,rbuergi,roland.buergi,rsalzmann,thomager12), eachAiSettingslast modified 12:55Z today. The failed writes carried only machine-generated package-source rows for an account that does not exist.The enumeration fix is on main (#1074); #1157 adds the regression pin.
Read-only verification:
search/getvia MCP. Nothing on the portal was mutated.Merge pull request #1157 from Systemorph/fix/1127-aisettings-phantom-…
systemorph-com commentedon Sep 17, 2026
Reopened — this fault is happening again.
Still occurring: 106 more since the last update (133 total).
memex-portal-deployment-6956d54bb5-l6mxv,memex-portal-deployment-8476467cb6-nkbhh,memex-portal-deployment-5bbfc97c64-lq7lw,memex-portal-deployment-76666bd6f5-mghv8,memex-portal-deployment-78bb6bfd5-fpvxk,memex-portal-deployment-cc58dc7c6-ckll8,memex-portal-deployment-bdc9f8dc4-fdkgw,memex-portal-deployment-7d4b5684bb-9lrxl,memex-portal-deployment-7574f9474c-zvqzn,memex-portal-deployment-585f6d7b98-z7ktk,memex-portal-deployment-7745468d76-m65r5,memex-portal-deployment-8678ff8df4-v4wvn,memex-portal-deployment-678559d6df-dgfmh,memex-portal-deployment-6b58bb7468-j5z2z,memex-portal-deployment-7cc5d4c5f5-m8dbt,memex-portal-deployment-55474fd686-b5dqp,memex-portal-deployment-568978584d-rqg2v,memex-portal-deployment-677c8d4fd5-wfzm8,memex-portal-deployment-54d5d4cfc7-4xjsd,memex-portal-deployment-7867998575-tsc42,memex-portal-deployment-844cd49b6-b29lb,memex-portal-deployment-59b7548d9-ctp9r,memex-portal-deployment-55b746c9fc-9n7jg,memex-portal-deployment-7756b5d5b9-6nwjr,memex-portal-deployment-7b87466cf4-zvj4h,memex-portal-deployment-66dc8c687b-6s9hz,memex-portal-deployment-68f7487c67-gznnl,memex-portal-deployment-6964d7f5c-tdx62,memex-portal-deployment-67b44d896d-4gzk9,memex-portal-deployment-54b8768c8f-6flz5,memex-portal-deployment-69b48f968c-5g7lg,memex-portal-deployment-d6f5dc4f6-9j249,memex-portal-deployment-7b67dcb585-vmgf6,memex-portal-deployment-78b498648b-zz524,memex-portal-deployment-7476f9847c-j486p,memex-portal-deployment-754bdc4d55-4cwcm,memex-portal-deployment-75dbd57bbb-n6nhf,memex-portal-deployment-577859654c-gbrbj,memex-portal-deployment-566596dd6-mn5fb,memex-portal-deployment-665c845455-pmbgr,memex-portal-deployment-84c8cdc75-5g78r,memex-portal-deployment-65d9d689bb-jhzx8Recent log lines
rbuergi commentedon Sep 18, 2026
Closing again — the root cause is gone from
origin/main, and gone at a deeper level than the fix that closed this originally. Silent for 35 days.Quiet. The reopen of 2026-09-17T07:52:18Z cites
Last seen: 2026-08-13 16:23:01Z— 35.6 days before today (2026-09-18). Ingest is live (the incident store was updating at 2026-09-18T05:42Z), so the silence is the record.Still occurring: 106 morecompares accumulated totals against the last update.Code check. The defect was never a missing migration: the self-typed
UserNodeType declaration carriednodeType: User, so the pathlessnodeType:Userenumeration inAiSourcesInstallHook.Users()returned it alongside real accounts,AiSettingsNodeType.PathFor("User")producedUser/_Memex/AiSettings, and the router resolved a partition literally nameduser— which nothing provisions, hence42P01: relation "user.mesh_nodes" does not exist.Today that cannot happen, because the declaration no longer claims to be a user.
origin/mainat229930bf2f,src/MeshWeaver.Graph/Configuration/UserNodeType.cs:The comment names this failure verbatim. It is enforced, not just written:
And the consumer (now in
MeshWeaver.Pluginswith the AI engine, #2276) has removed the hand-rolledid != "User"filter that PR #1074 added here, because the cause it guarded against is gone —MeshWeaver.Plugins@origin/main src/MeshWeaver.AI/AiSourcesInstallHook.cs:82-90:The regression pin from #1157 is live there too:
src/MeshWeaver.AI.Test/AiSourcesInstallHookTest.csasserts, citing this issue by number, that nothing is served atUser/_Memex/AiSettings— read throughGetMeshNodeStreamrather than a query, precisely so the assertion cannot pass vacuously.Nothing was ever lost: every phantom write aborted on the 42P01 and none persisted, while the same repair pass reconciled all real accounts correctly (verified read-only on the live portal 2026-08-10, on this thread).
If this fault recurs, the recurrence bot reopens this issue with fresh evidence — that is the designed behaviour, and it is why closing a dormant incident is safe.