# The record crosses as a json string **🔵 Expert · Lesson 28** NO FILE, NO DATABASE, NO DRIVER - A PYTHON STRING. Merge two research lanes, turn the whole record into TEXT, throw the live set away, and rebuild it from that text with its identity intact. THE TWO VERBS THAT MAKE A RECORD PORTABLE research_set.describe() -> Dict[str, object] md.ResearchSet.from_payload(d) -> ResearchSet `describe_composition()` guarantees "PLAIN-VALUE THROUGHOUT. Every nested value is JSON-safe", which is why this script calls `json.dumps(payload)` with NO `default=` handler. The strict call IS the guard: the day something non-plain lands in that payload it raises TypeError and names the offender. A `default=str` would turn a broken guarantee into a silently lossy round trip - a datetime would go out as a string, come back as a string, and nothing would notice. WHAT SURVIVES, AND WHY IT MATTERS `from_payload` RESTORES THE RECORDED IDENTITY - the rebuilt set keeps its `set_id` and `created_at` rather than minting new ones. So this is not "a set that looks like the old one"; it is the SAME set, hydrated. Contrast expert 24/27, where a restored WORLD is deliberately equivalent-not-identical and hands you a translation map. Runtime objects are rebuilt; the RECORD is restored. It also carries `network_versioner`, so the undo ring survives and `restore_network` still reaches pre-death shapes on the rebuilt set. Rebuild is SILENT by design: `on_mutation` is suppressed during hydration and installed at the end, so rehydrating does not re-fire persistence for every recorded node. AND THE JOIN ORDER IS LOAD-BEARING. The clean join happens while the receiver still sits at the anchor; move the receiver first and even the "clean" branch is divergent. The lanes stay EMPTY on purpose - `bind_inactive` declares its version into `default` automatically, and single residence means that id then lives in exactly one lane, so registering it onto a branch would raise the rediscovery signal instead (expert 26 shows that refusal). And the staged version is bound the way the index's first one was: Policy under the string category 'Policy' - the address a bare bind of Policy has - with binding name 'wire-policy', and PolicyV2 the same; bind_inactive refuses a version bound any other way (2026-10-25). ## Before you run Use the [Expert guide](../../expert/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/04_expert/28_the_record_crosses_as_a_json_string.py ``` ```powershell py -3.14t UX_and_AIX_experiences/04_expert/28_the_record_crosses_as_a_json_string.py ``` {download}`Download this collection <../../downloads/expert-examples.zip>` · [Source on GitHub](https://github.com/Synaptic724/melder/blob/1211e838099a342c9dde48f064b1e772b6060e13/UX_and_AIX_experiences/04_expert/28_the_record_crosses_as_a_json_string.py) ## Public surface md.ResearchSet.from_payload, ResearchSet.describe / lane_names / walk / set_id / network_snapshot_shas, research_create_lane / research_join / research_heads, Conduit.bind_inactive, and the mesh quartet (with_store_handler / with_fetch_handler) ## Code ```{literalinclude} ../../downloads/04_expert/28_the_record_crosses_as_a_json_string.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 expert examples](index.md) · [Level guide](../../expert/index.md) ## Related guides - [External storage integration](../../expert/external-storage.md) - [Complete operational walkthroughs](../../expert/walkthroughs.md) ## API contracts - [Conduit](../../reference/api/resolution/conduit.md) - [ResearchSet](../../reference/api/research/researchset.md)