Strict, versioned operator-workspace manifest.
Runtime repository paths are logical. They materialize beneath the current operator's data root and never point at a different operator's writable checkout.
Summary
Types
@type t() :: %PromptRunner.Workspace.Manifest{ commit_mode: String.t(), containment: String.t(), contract_artifacts: [map()], contract_modules: [String.t()], failure_policy: String.t(), id: String.t(), path: String.t(), prompt_runner_requirement: String.t() | nil, push_policy: String.t(), repositories: %{required(String.t()) => repository()}, required_capabilities: [String.t()], runtime_root: String.t(), workspace_root: String.t() }