""" tools/file_mutation_queue.jl - File mutation queue This module provides file mutation serialization for safe concurrent file writes. """ module FileMutationQueue using ..Types: * using ..HarnessTypes: ExecutionEnv, getOrThrow, FileError, Result # ============================================================================ # Mutation queue state # ============================================================================ mutable struct MutationQueueState queues::Dict{String, Any} registration::Any end # Global state const states = Dict{ExecutionEnv, MutationQueueState}() function getState(env::ExecutionEnv)::MutationQueueState if !haskey(states, env) states[env] = MutationQueueState(Dict{String, Any}(), nothing) end return states[env] end # ============================================================================ # File mutation queue helpers # ============================================================================ async function getMutationQueueKey(env::ExecutionEnv, path::String)::String absolute_path = getOrThrow(getOrThrow(absolutePath(env, path), "Failed to get absolute path")) canonical_path = canonicalPath(env, absolute_path, nothing) if canonical_path.ok return canonical_path.value end if canonical_path.error.code in ("not_found", "not_supported") return absolute_path end throw(canonical_path.error) end # ============================================================================ # Main function - serialize file mutations # ============================================================================ function withFileMutationQueue{T}(env::ExecutionEnv, path::String, fn::Function)::T state = getState(env) # TODO: Implement proper async queueing # This is a simplified version return fn() end end