# Many research sets one world **🔵 Expert · Lesson 25** RESEARCH SETS, PLURAL. Everything so far used the default set and never said there was a choice. A ResearchSet is a whole INDEPENDENT BODY OF HISTORY over the same runtime - its own lanes, its own residency, its own journal, its own campaigns. research.create_research_set("refactor-2026") research.list_research_set_names() research.research_set("refactor-2026") WHY MORE THAN ONE Lanes branch a line of versions. A SET is the thing lanes live in - so two sets are two entirely separate investigations that happen to be looking at the same world. Expert 23's join can never cross them, residency is per set, and a lane name in one set says nothing about a lane name in the other. Two agents auditing the same runtime for different reasons do not have to agree on a lane vocabulary, or even know about each other. EVERY RESEARCH VERB TAKES `set_name`, AND IT DEFAULTS Root-level reads and writes carry `set_name="default"`. That is why the first twenty-odd lessons never mentioned sets: the default was doing the work silently. The moment you have two, the argument stops being decoration. AN UNKNOWN SET NAME RAISES, AND THE ERROR LISTS THE KNOWN ONES This is a small thing that matters enormously to an agent. A typo does not return an empty set that looks like "no history here" - it refuses AND tells you what does exist, so the next call is correct instead of being another guess. Compare with a silent empty: an agent would conclude the world had no record and act on it. AND OMITTING THE NAME RESOLVES THE DEFAULT, NOT ALL SETS. `research_set()` is "the default one", never "every one" - so the cheap call is scoped rather than sweeping, and nothing accidentally reports across investigations that were meant to stay apart. THE WORLD IS SHARED; THE RECORD IS NOT The spells, the frames, the conduits - one runtime, seen by both. What differs is what each set has DECLARED about it. A version can be resident in one set and unknown to another, and neither is wrong: a research set records what an investigation chose to look at, not everything that exists. ## 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/25_many_research_sets_one_world.py ``` ```powershell py -3.14t UX_and_AIX_experiences/04_expert/25_many_research_sets_one_world.py ``` {download}`Download this collection <../../downloads/expert-examples.zip>` · [Source on GitHub](https://github.com/Synaptic724/melder/blob/0895ce795453cd87e35d70665957b4e89aad3317/UX_and_AIX_experiences/04_expert/25_many_research_sets_one_world.py) ## Public surface MutationResearch.create_research_set / list_research_set_names / research_set, per-set lanes and residency, and the set_name argument on the root research verbs ## Code ```{literalinclude} ../../downloads/04_expert/25_many_research_sets_one_world.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 - [Research sets, lanes, residency, and recorded source](../../expert/research.md) ## API contracts - [MutationResearch](../../reference/api/research/mutationresearch.md)