Workspace materials
How to save a steel chemistry into your workspace library, who can see and edit it, and how to run a simulation against it.
The problem this solves#
You have a mill certificate for the coil your line actually runs. It is not DP600 and it is not DP780 — it is your supplier's DP600, half a point of carbon off, with the chromium they happen to use. Typing that chemistry into chat works, and it works for exactly as long as that conversation lasts.
A workspace material is that chemistry given a name and stored in your workspace, where everyone on your team can load it by name in any conversation, in any simulator, indefinitely. It sits alongside the built-in grades from the material catalog, and you use it the same way.
What is actually stored#
A workspace material is a named row in your workspace holding:
- a composition in weight percent
- the base grade it was derived from, kept for traceability
- optional starting phase fractions
- optional free-text notes
- a pinned reference to the exact verified material card the chemistry is carried on, recorded by hash
Names are unique within a workspace, so you cannot have two materials called Supplier-A DP600 in the same workspace.
The pinned card reference is the part that makes a workspace material trustworthy over time. It fixes the exact card bytes your material was built against, and the reference is verified against its recorded hashes every time the material is loaded. If the pinned card cannot be verified, loading fails with a clear error rather than quietly substituting a different card.
Saving one from chat#
The simplest route is to build the chemistry in conversation and then save it. Load a base grade with your overrides, confirm the chemistry when Phases asks (see using your own chemistry), and then save:
Save this material to my workspace as Supplier-A DP600.
While an unsaved custom material is active, the chat footer also shows the active material name and a Save to workspace for future use button next to it. When Phases produces a custom-material card in the conversation, that card carries its own Save to workspace for future use button as well.
Two things get refused, both on purpose:
- Saving a base grade under a new name. If the composition you pass is identical to the base grade's, the save is rejected with a message telling you to pass your real custom chemistry. The workspace library is for real recipes, not renamed built-ins.
- Saving without a workspace, or as a viewer. Saving requires an open workspace and a member or admin role. Without a workspace you get
No workspace context found. Open chat from a workspace before saving materials.; as a viewer you getSaving workspace materials requires a workspace member or admin role.
Saving is not a request to simulate. After a save, Phases reports the saved material and stops — it will ask which simulation you want rather than running one.
Creating one in the Materials workbench#
Workspaces also have a Materials page at /ws/<workspace>/materials. It has three scopes — Material, Compare and Family / Group data — and a cascading picker for choosing a built-in grade or one of your workspace materials.
If your role can manage materials, a + New material button appears in the header. It opens a dialog where you pick an optional base grade, edit the composition grid, give the material a name and add notes.
Selecting an existing material shows tabs for Composition, Simulate, and — where the flow-stress feature is enabled for your workspace — Flow Stress.
Built-in grades are read-only here. Their composition grid is disabled and the action button reads Clone to edit rather than Open editor. Cloning opens the same New material dialog with that grade preselected as the base, its composition pre-filled as the starting point, and a suggested name made from the grade label plus (custom) — for example DP600 (custom). Change what actually differs, then save. Your own workspace materials show Open editor and take you to the full material editor page.
Who can see and use them#
Workspace materials belong to the workspace, not to the person who created them. Every member of that workspace can read them; the database policy scopes each material row to its workspace, and only members of that workspace can see it. A material saved in one workspace is invisible in another.
What you can do with them depends on your role:
| Role | Read | Create, edit, clone | Run simulations |
|---|---|---|---|
| Admin | yes | yes | yes |
| Member | yes | yes | yes |
| Viewer | yes | no | no |
Roles, invites and the difference between a personal and an organization workspace are covered in workspaces and roles.
Using one in a simulation#
Refer to it by the name you saved. Phases is instructed to check your workspace materials before falling back to built-in grades when you name a material, so this works:
Load my workspace material Supplier-A DP600 and generate a CCT diagram.
To confirm what is available:
List the materials saved in my workspace.
That calls list_materials, which returns built-in grades and your workspace materials in separate sections. Under the hood a workspace material is loaded by its identifier — load_material(tenant_material_id='<uuid>') — but you do not need to type that; naming it is enough.
Loading a workspace material is direct. Unlike a freshly typed chemistry, it does not trigger the confirmation gate, because the definition and its template were already fixed when the material was created.
Once loaded, it stays as the session's active material and every subsequent simulation tool uses it. Simulation outputs — the card header, the run metadata and the figure titles — carry the material's exact saved name, so a run browsed weeks later still says Supplier-A DP600 rather than DP600 (custom). See sessions, runs and artifacts for how to find those runs again.
Editing a workspace material in chat forks it#
If you load a workspace material and then change its chemistry or its starting phase fractions in conversation, Phases does not modify the stored row. The edit produces a session-only fork: the workspace identity is dropped, any previously resolved material capabilities are cleared, and the persisted material is left exactly as it was.
That is protective — a throwaway "what if the carbon were 0.02 higher" in chat must never silently rewrite the material your colleagues are simulating against. If you want the fork to stick, save it as a new workspace material, and give it a name that says what changed.
To edit the stored material itself, use the editor in the Materials workbench.
Limits worth knowing before you rely on this#
- A workspace material is not a new grade for every simulator. Coverage follows the material's physics, not its name. Resistance spot welding in particular runs only on the twenty grades with validated bulk electrical, thermal and mechanical properties; asking the product to weld a workspace material that maps onto none of them is refused with
This material has no validated RSW bulk-property mapping.followed by the list of grades that are supported. See the capability matrix and resistance spot welding. - Saving stores a definition, not calibrated physics. It records the chemistry and the verified card the chemistry sits on. Transformation kinetics, phase flow stress and V-Gleeble bulk flow surfaces are resolved later, when a simulator asks for them, and the simulator reports honestly when one is a fallback or unavailable. How we validate explains what that separation buys you.
- Very old workspace materials can fail closed. A legacy row created before verified immutable template definitions existed, and without the evidence needed to reconstruct one, refuses to load with
This legacy workspace material has no verified immutable template definition. Recreate or explicitly repair it before loading or simulating.The fix is to recreate it from the chemistry.
If you are deciding whether to save a chemistry at all, the trade-off is simple: a session material is fine for one investigation, and a workspace material is what you want the moment a second person, a second simulator, or a second week is involved. Reusing the resulting runs is covered in reuse and share runs.
