# Several worlds of record in one process **🔵 Expert · Lesson 34** KEEP TWO SEPARATE WORLDS OF RECORD IN ONE PROCESS. Every lesson so far has recorded into one nameless place. It has a name - "default" - and you can have others. A PROFILE IS WHERE EMISSIONS LAND. Twins accumulate into the active profile, and unqualified operations resolve to it. Two profiles are two separate bodies of recorded content in one running process: a staging record and a production one, or one per tenant, or a throwaway you clear between experiments. BUT A PROFILE IS NOT A PRIVATE LEDGER, AND THIS IS THE THING TO GET RIGHT. `create_checkpoint` snapshots ONE profile's window and advances THAT profile's journal mark - the content is partitioned. `list_checkpoint_ids()` returns "all checkpoint ids in exact ledger creation order" for the PROCESS. Switching profiles does not give you a filtered view and does not hide anyone else's seals. Same shelf, different boxes. Assume otherwise and you will write an assertion that fails - this lesson's author did exactly that. YOU CREATE WORLDS BY NAME AND NOTHING ELSE. The facade says so outright: "users and agents create worlds by name only; PersistenceProfile objects never escape the depths." You never hold the profile object, so there is nothing to pass around, alias, or accidentally keep alive - the name IS the handle. That is worth contrasting with a surface that does NOT do this: the ACL authoring chain hands you internal builders and is marked "do not drive it directly". Here the internal object is kept buried and you are given a name. Same codebase, two answers, and the one you get tells you whether a surface is finished. SWITCHING MOVES A POINTER. NOTHING ELSE. `set_active_profile` "moves the pointer only - no data is copied or migrated between profiles". Nothing is merged, nothing is duplicated, and the profile you left keeps exactly what it had. If you expected a switch to bring your checkpoints along, this is the sentence that saves you. CLEAR AND DELETE ARE DIFFERENT VERBS ON PURPOSE clear_profile EMPTIES it and KEEPS it - still listed, still activatable. The non-destructive reset. delete_profile REMOVES it. The name stops appearing in list_profile_names(). And "default" is NEVER DELETABLE - it is the guaranteed landing place, the same shape of law as the default research lane that never archives (expert 31). Every system needs one thing that cannot be removed, or its own fallbacks have nowhere to fall. ALL OF IT REQUIRES AN ACTIVATED CRYSTALLIZER, and the refusal is the point: "a configured-but-not-activated crystallizer raises rather than silently no-opping. Recording is opt-in and this is where that shows up." A world that quietly recorded nothing would be worse than one that refused. ## 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/34_several_worlds_of_record_in_one_process.py ``` ```powershell py -3.14t UX_and_AIX_experiences/04_expert/34_several_worlds_of_record_in_one_process.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/34_several_worlds_of_record_in_one_process.py) ## Public surface Crystallizer.active_profile_name / create_profile / set_active_profile / list_profile_names / describe_profile / clear_profile / delete_profile, with create_checkpoint proving the partition is real ## Code ```{literalinclude} ../../downloads/04_expert/34_several_worlds_of_record_in_one_process.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 - [Persistence, profiles, and source custody](../../expert/persistence.md) ## API contracts - [Crystallizer](../../reference/api/persistence/crystallizer.md)