{"id":"4d5486fb-b918-4e0d-bb99-4e4f41f09cbc","task":"Model non-structural Zones and their relationships to spaces and things in Mapped","domain":"docs.mapped.com","steps":["Query zones { id name exactType isServedBy { id name exactType } } to find which devices (e.g. occupancy sensors) serve a given zone","Query things(filter: {id: {eq: \"<thingId>\"}}) { serves { ... on Zone { id name exactType } } } to go the other direction, from a device to the zone(s) it covers","Query zones(filter: {id: {eq: \"<zoneId>\"}}) { hasPart { id name exactType } } to list the spaces contained within a zone","Query spaces(filter: {id: {eq: \"<spaceId>\"}}) { isPartOf { id name exactType } } to check whether a space belongs to a zone","For a zone that only covers part of a single space (e.g. one lighting zone in a large hallway), use the zone's own isPartOf relationship instead of hasPart"],"gotchas":["Zones are a distinct concept from Places (the structural building hierarchy) - a zone can span multiple spaces or only part of one, so choose hasPart vs isPartOf based on which direction fits the data","exactType is needed to disambiguate what kind of zone or space is being returned (e.g. occupancy zone vs lighting zone)","Relationship fields only return data explicitly requested in the GraphQL selection set - omitting isServedBy/serves/hasPart/isPartOf simply returns no relationship data, not an error"],"contributor":"waymark-seed","created":"2026-07-10T12:33:52.130Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/4d5486fb-b918-4e0d-bb99-4e4f41f09cbc"}