I am generating and updating scene files using scene instantiation with preload. Are there some pitfalls or hidden problems that can occur? I have recurrring problems as follows. When I change the scene file that is instantiated in the other scene file, the changes are not reflected in that other scene file. I was not able to easilty reproduce this problem with demo project.

Any tooltip or useful links regarding in-editor generation of content will be apprecieated! (I have read the docs, but it is possible that I have missed or have forgotten something)

    owlrazum
    I am using this code:

    
    @tool
    class_name Graph
    extends Node3D
    
    @export_group("Editor")
    @export var _connect_graph_editor: bool:
    	set=_on_connect_graph_editor
    
    @export var _generate_places_editor: bool:
    	set=_on_generate_places_editor
    	
    @export var _correct_names_editor: bool:
    	set(_v):
    		for place in $Places.get_children():
    			(place as Place).change_place_name_editor(place.name)
    
    @export var _generation_data: GraphGenerationData
    
    
    func _on_connect_graph_editor(_v):
    	var paths_parent = $Paths
    	for p in paths_parent.get_children():
    		p.queue_free()
    	
    	var constructed = {}
    	var path_scene = preload("res://source/graph_elements/Path.tscn")
    	var root_owner = get_tree().edited_scene_root
    	for place in $Places.get_children():
    		place = place as Place
    		for connected in place.connectedPlaces:
    			connected = connected as Place
    			if (constructed.has(connected.name)):
    				continue
    				
    			constructed[place.name] = 1
    			var path: Node3D = path_scene.instantiate(PackedScene.GEN_EDIT_STATE_INSTANCE)
    			paths_parent.add_child(path)
    			path.set_owner(root_owner)
    			path.name = "%s to %s" % [place.name, connected.name]
    			
    			var p1 = place.position
    			var p2 = connected.position
    			path.look_at_from_position(p1, p2)
    			path.set_scale(Vector3(1, 1, (p2 - p1).length()))
    
    	Utilities.save_scene(self, "res://source/graphs/%s")
    
    
    func _on_generate_places_editor(_v):
    	var root_owner = get_tree().edited_scene_root
    
    	var places_parent
    	if not has_node("Places"):
    		places_parent = Node3D.new()
    		places_parent.name = "Places"
    		add_child(places_parent)
    		places_parent.set_owner(root_owner)
    	else:
    		places_parent = $Places
    
    	for p in places_parent.get_children():
    		p.queue_free()
    		
    	var points: Array[Vector3] = []
    
    	var max_iteration = 1000
    	var iter = 0
    	while points.size() < _generation_data.num_places:
    		iter += 1
    		if (iter > max_iteration):
    			printerr("iteration limit exceeded")
    			break
    		
    		var x = randf_range(- _generation_data.area, _generation_data.area)
    		var y = randf_range(- _generation_data.area, _generation_data.area)
    		var valid_point = true
    
    		for existing_point in points:
    			var distance = existing_point.distance_to(Vector3(x, 0, y))
    			prints("distance at index %s  %s" % [points.size(), distance])
    			if _generation_data.gap_minmax.x > distance or distance > _generation_data.gap_minmax.y:
    				valid_point = false
    				break
    
    		if valid_point:
    			points.append(Vector3(x, 0, y))
    
    	var place_scene = preload("res://source/graph_elements/place.tscn")
    	for p in range(points.size()):
    		var place: Node3D = place_scene.instantiate(PackedScene.GEN_EDIT_STATE_INSTANCE)
    		places_parent.add_child(place)
    		place.set_owner(root_owner)
    		place.change_place_name_editor(_generation_data.place_names[p]) 
    		place.position = points[p]
    	
    	Utilities.save_scene(self, root_owner.scene_file_path)

      owlrazum
      And this file for saving:

      class_name Utilities
      
      static func save_scene(node: Node, save_path: String):
      	var scene = PackedScene.new()
      	var result = scene.pack(node)
      	if result == OK:
      		save_path =  save_path % "%s%s" % [node.name, ".tscn"]
      		var error = ResourceSaver.save(scene, 
      				save_path, ResourceSaver.FLAG_BUNDLE_RESOURCES)
      		if error != OK:
      			push_error("error saving scene ", save_path, " ", error)

      Damn I am a fool. I am creating an Array mesh and assigning it in @tool mode, that is why I could not see changes in original scene.