Root-wide AccessAssignment read fanned out across every partition schema on the memex portal
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start with PostgreSqlPartitionedMeshQuery and the UnanchoredQueryCensusTest corpus in test/Memex.Portal.Shared.Test; compare this query shape with the anchored and declared shapes in SecurityQueries and the Unanchored Security Reads page. First identify the caller and whether the query recurs, using the pod request or audit log at the recorded time and the census test. Done means the responsible read is identified and its handling respects the security constraints for mesh-wide AccessAssignment reads.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Observed
The Postgres query planner (PostgreSqlPartitionedMeshQuery, MeshWeaver.Plugins) served the query
path:@ scope:descendants nodeType:AccessAssignment select:path,id,namespace,name,nodeType,content limit:all
on the memex portal pod as an unanchored fan-out: the base path is bare @ (root), which names no partition, and the shape is not listed in unanchored-queries.allow. The host runs UnanchoredQueryPolicy.ServeAndReport, so instead of refusing (as a CI build would), the planner executed the read as a UNION across every partition schema and logged [FanOut] UNANCHORED with UnanchoredQueryException. This is the full-content bulk read of every AccessAssignment node in the mesh — the query that grants and denies permissions.
Where and when
A single occurrence, on the single portal pod memex-portal-deployment-c67994b85-4297g, at one instant (2026-10-23T14:12:39Z). No burst, no recurrence in the window, one pod of one instance — an isolated invocation, not a per-render storm. Nothing adjacent in the incident window ties it to a deploy, restart or sync.
Impact
The read was served, so no user-visible failure is evidenced at the log site. The cost paid is the one the fan-out census measured (#2640/#3202): an every-partition-schema UNION locks the relations of every schema for its duration, queuing other callers behind it. One execution on one pod is a nuisance-class event, not an outage — but the same shape at render-path frequency is the ~2 s floor the elimination work exists to remove.
Not established
- The caller. The incident carries only the query provider's frame; no application frame, user identity, request path or agent thread is on it. I could not determine whether the query came from a portal surface, an MCP/agent read, or a core code path.
- Whether it recurs. One occurrence is consistent with a one-off ad-hoc read and with the first invocation of a newly shipped surface alike.
- What the result was used for — the read completed under ServeAndReport, but nothing in the incident says who consumed the rows.
- Whether other log sites (e.g.
PostgreSqlCrossSchemaQueryProvider) recorded the same instant — outside this incident's capture.
Candidate causes and the reading that separates them
- An ad-hoc read by a person or agent (a root-wide
AccessAssignmentsearch via MCP or a script). Predicts rare, human-timed occurrences. Separating reading: the pod's request/audit log at 14:12:39Z naming the caller identity — an MCP call separates this cleanly. - A shipped surface issuing the read — an access-overview page, an export, or a logon/background action that lists grants mesh-wide (the full-content
select:withlimit:allfits a listing/export, not a permission fold). Predicts recurrence on each invocation of that surface. Separating reading:UnanchoredQueryCensusTest's refused-set corpus (test/Memex.Portal.Shared.Test) — a core/runtime shape appears there; a plugin or ad-hoc shape does not. - A core read that lost its anchor (a query built with an empty/
@base path that its author believed was pinned). Notably, the security fold's ownAccessAssignmentlegs are anchored per-partition (SecurityQueries.PartitionAssignmentsFor) or declared (MeshWideQuery.Declare, with a reason at the call site); the observed shape matches neither, which is itself evidence that it did not come from the fold's current shapes — but a stale call site or a regression would look exactly like this. Predicts periodic recurrence tied to the owning operation. Separating reading: recurrence timing correlated against a named operation, plus the census test above.
Per Unanchored Security Reads: a genuinely mesh-wide AccessAssignment read is not freely anchorable — a share grant lives in the granting partition, and truncating the read silently drops grants and fails denials open. Whatever decides this ticket should weigh that page before following the log line's own "anchor it" advice.
Where to look
MeshWeaver.Plugins/src/MeshWeaver.Hosting.PostgreSql— the planner (PostgreSqlPartitionedMeshQuery), theIsSufficientlySpecified || ResolvesByRoutingHintrule, andunanchored-queries.allow(this shape is not in it)- Hosting/UnanchoredQueryPolicy — the refuse-in-CI / serve-and-report-in-production policy this line implements
UnanchoredQueryCensusTest(test/Memex.Portal.Shared.Test) — the runtime-query corpus whose refused set is asserted emptySecurityQueries(src/MeshWeaver.Mesh.Contract/Security) and Granting Access via AccessAssignments — the anchored and declared shapes the fold actually issues
Evidence
| Fingerprint | a50cc623d41e8eb7 |
| Category | MeshWeaver.Hosting.PostgreSql.PostgreSqlPartitionedMeshQuery |
| Severity | Error |
| Exception | MeshWeaver.Hosting.PostgreSql.UnanchoredQueryException |
| Namespace | memex |
| Pods | memex-portal-deployment-c67994b85-4297g |
| Occurrences | 1 |
| First seen | 2026-10-23 14:12:39Z |
| Last seen | 2026-10-23 14:12:39Z |
| Routing | not determined — no configured route matches the category MeshWeaver.Hosting.PostgreSql.PostgreSqlPartitionedMeshQuery. This repository is the configured fallback, not a finding about who owns the fault; the category names the LOGGER, which may not be the subject. |
Recent log lines
2026-10-23 14:12:39Z memex-portal-deployment-c67994b85-4297g fail: MeshWeaver.Hosting.PostgreSql.PostgreSqlPartitionedMeshQuery[0]
[FanOut] UNANCHORED: query nodeType:AccessAssignment scope:Descendants ('path:@ scope:descendants nodeType:AccessAssignment select:path,id,namespace,name,nodeType,content limit:all') names no partition and is not listed in unanchored-queries.allow — served across every partition schema because this host runs UnanchoredQueryPolicy.ServeAndReport; a CI build refuses it. Anchor it (path:/namespace:) or declare it (partitions:all). Listing it would only lower this line to a Warning
MeshWeaver.Hosting.PostgreSql.UnanchoredQueryException: Query is not sufficiently specified: no partition could be determined from 'path:@ scope:descendants nodeType:AccessAssignment select:path,id,namespace,name,nodeType,content limit:all'. A query without a concrete first segment would have to UNION every partition schema, which locks the whole database for every other caller. Anchor it (path:<partition>/… or namespace:<partition>/…), or request the fan-out explicitly (partitions:all — or a wildcard namespace, e.g. namespace:*/_Thread) if spanning partitions is genuinely what this read means.
This log site's previous ticket, https://github.com/Systemorph/MeshWeaver/issues/5508, was closed about a different fingerprint, and this fault fired after that close. It is left closed: an occurrence of this fingerprint is no evidence that the fault it was closed for came back. This issue now tracks the log site, and later fingerprints of it fold in here.
Opened automatically from Admin/_LogIncident/a50cc623d41e8eb7. Recurrences are folded into this issue rather than opening new ones.
It also stands for the whole log site 3c32237f72d0a48b: other fingerprints of this site fold in here as comments rather than opening tickets of their own.
- Lingua principale
- C#
- Stelle
- 12
- Fork
- 5
- Merge medio
- 6h 39m
- PR unite (30g)
- 891
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Systemorph/MeshWeaver
-
bug sev:L
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
Systemorph/MeshWeaver#7094 ·
I maintainer di solito rispondono entro 1 giorno
-
bug sev:L
Difficoltà 4/5 1-2 giorni Idoneità per principianti 35/100
Systemorph/MeshWeaver#7091 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug sev:L
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
Systemorph/MeshWeaver#7085 ·
I maintainer di solito rispondono entro 1 giorno
-
bug sev:M
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
Systemorph/MeshWeaver#7082 · 16 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
bug sev:M
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
Systemorph/MeshWeaver#7081 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Systemorph/MeshWeaver
Issue simili
-
area-multitenancy area-security p1-recommended priority-high technical-debt
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
help wanted needs-unity ready for a contributor
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
eyalgolan/statecraft-israel#1542 ·
I maintainer di solito rispondono entro 1 giorno
-
kind/enhancement Provider Upgrade pulumi/pulumi-azure R1 Task
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
pulumi/pulumi-azure#3669 ·
-
[BUG] FromCString causes 1 byte OOB read in native codeForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertatype/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno