# What you cannot see **🟠 Advanced · Lesson 15** THE READ SURFACE REPORTS ITS OWN BLIND SPOTS. Arc C closes on the most unusual thing in the viewer family, and the most useful one if you are an agent. START FROM THE PROBLEM. You call describe_spell(...) and a field is not there. What does that mean? (a) the field does not exist for this spell, or (b) it exists and this rift is not allowed to see it. melder states outright that you cannot tell from the outside: "VISIBILITY-FILTERED PROJECTION: absence means 'not visible to this rift' OR 'not present', INDISTINGUISHABLE FROM OUTSIDE." Almost every API in existence stops there and leaves you to guess. For a human that produces a confused afternoon. For an agent it produces a CONFIDENT WRONG ANSWER - "this spell has no source binding" instead of "I was not shown the source binding" - and the agent has no way to know which it said. SO MELDER SHIPS THE DISAMBIGUATOR. describe_spell_missing_sections(...) ViewSpell describe_conduit_missing_sections(...) ViewConduit describe_missing_surface(...) ViewFrame / FrameViewer The spell one describes itself as "THE WITHHELD-SECTION PROBE: it computes every payload field name and subtracts the visible ones, so it reports the NAMES of sections you cannot read. THIS IS HOW YOU TELL 'HIDDEN' FROM 'EMPTY' WITHOUT THE CONTENTS." READ THAT LAST CLAUSE AGAIN - IT IS THE WHOLE DESIGN. You learn the SHAPE of your blindness without breaching it. The contract says "does not expose hidden payload bodies". So the probe is safe to ship to a low-authority room: it can honestly say "there are three sections here you may not read" without reading them. That is what makes this different from an error message. A refusal tells you that you were stopped. This tells you WHAT you were stopped from, by name, without stopping being enforced any less. VISIBLE AND MISSING ARE COMPLEMENTS describe_visible_surface() what I can see right now describe_missing_surface() what I cannot Together they partition the world. Either alone is half an answer. AND ONE ANTI-FOOTGUN WORTH STEALING Every one of these takes frame_name, and it is NOT a selector: "`frame_name` is an ASSERTION, not a selector - when supplied it must match the bound frame or the call raises." A parameter shaped like a filter that is really a guard. You cannot accidentally read a different frame than the one you think you are holding; saying the wrong name is an error, not a surprise result. ## Before you run Use the [Advanced guide](../../advanced/index.md) for prerequisite concepts. Run from a checkout with Melder installed and Python 3.14 free-threading selected. The collection download includes the level's local helper modules. ## Run the saved script ```bash python UX_and_AIX_experiences/03_advanced/15_what_you_cannot_see.py ``` ```powershell py -3.14t UX_and_AIX_experiences/03_advanced/15_what_you_cannot_see.py ``` {download}`Download this collection <../../downloads/advanced-examples.zip>` · [Source on GitHub](https://github.com/Synaptic724/melder/blob/4b364a338debcb1c010d0f6e9dcbbabb62945ba0/UX_and_AIX_experiences/03_advanced/15_what_you_cannot_see.py) ## Public surface describe_visible_surface / describe_missing_surface, describe_spell_missing_sections, describe_conduit_missing_sections ## Code ```{literalinclude} ../../downloads/03_advanced/15_what_you_cannot_see.py :language: python :linenos: ``` ## Check the outcome The script contains its own assertions or demonstrated refusal paths. Run it to evaluate those checks against your installed version. The code above is taken directly from the saved file; no run output is invented here. [More advanced examples](index.md) · [Level guide](../../advanced/index.md) ## Related guides - [Read-only rooms for endpoints](../../advanced/read-only-rooms.md) - [Viewer navigation and the describe ladder](../../advanced/viewers.md) - [World inspection walkthrough](../../advanced/inspection-walkthrough.md)