Reads and parses .foundry/manifest.exs from a project root. Returns the manifest as a keyword list. Caches per {file_path, mtime} in ETS.
@spec read(project_root :: String.t()) :: {:ok, keyword()} | {:error, :not_found | :parse_error}