# Ortho viewport membership ## Runtime path `EntryPoint.RunDiagnostic` reads each `OrthoViewportInfo` and calls `PlantObjectReader.ReadObjects`. The reader resolves source Piping rows, then `PlantViewportMembershipReader.Read` evaluates the stored query for that exact view. It maps `MdObjectId.PrjObjectId` to a source DataLinks row and assigns a membership status to every independent `PlantObjectSnapshot`. | Status | Meaning | Diagnostic evidence | | --- | --- | --- | | `Resolved` | The source row was returned by the exact view query. | `VIEW_MEMBERSHIP_FROM_CONFIRMED_PNP_ID` | | `ObjectOutsideView` | The source row was not returned by that confirmed query. | `VIEW_MEMBERSHIP_OBJECT_OUTSIDE_CLIP` | | `NotResolved` | The view contract is unavailable, ambiguous, or failed. | `VIEW_MEMBERSHIP_API_UNSUPPORTED` | No source object is treated as visible solely because it belongs to the same model drawing. No geometry-only result is upgraded to `Resolved`. ## Plan effect `AnnotationPlanBuilder` includes membership status in its canonical plan input. `ObjectOutsideView`, unsupported, and unresolved objects are `Skip` operations with stable reason codes. `Resolved` membership can progress only through the existing annotation rules; this DryRun slice never writes an annotation. ## Paired DryRun evidence The paired local DryRun resolved five of seven source rows through the exact view query and classified the remaining two as `ObjectOutsideView`. Each of the three supported commands produced an identical PlanId on its repeated invocation. Both Launcher sessions reached `RolledBack`. The paired command-window DBMOD output was not retained. It is intentionally reported as `NOT RECORDED`; project-file SHA-256 inventories nevertheless had zero delta for both CONTROL and DRYRUN copies.