Changes in version 0.2.1 (2026-08-21) CRAN resubmission - The Description field no longer opens with a redundant "an R", and single quotes are now limited to software and package names ('AstraeaDB', 'Apache Arrow Flight', 'arrow') rather than acronyms such as BFS or GQL. Acronyms that remain are spelled out on first use. - No \dontrun{} remains in the package. Two examples that need no server run unconditionally; the rest are \donttest{} guarded by astraea_server_available(), so they are a no-op without a server and genuinely execute with one. - Examples touching the optional Arrow Flight transport are wrapped in requireNamespace("arrow", quietly = TRUE), and 'arrow' stays in Suggests. Bug fixes - UnifiedClient$query_df() no longer fails with "arguments imply differing number of rows" when a matched node lacks one of the requested properties, or when rows carry different property sets. An absent property now becomes NA and the result takes the union of columns across rows. This affected ordinary queries: MATCH (n:Person) RETURN n.name, n.age errored whenever any person had no age. Documentation - Examples no longer reference hard-coded node and edge IDs such as 1L. Each creates the nodes it needs and uses the returned IDs, so it is self-contained. - Examples that store embeddings size them from client$ping()$vector_dim instead of a fixed three-element vector, since a store pins its embedding width on first insert. Changes in version 0.2.0 New features - Graph algorithms are now exposed as client methods, computed server-side: run_pagerank(), run_louvain(), run_connected_components(), run_degree_centrality(), and run_betweenness_centrality(). Each accepts an optional nodes argument to restrict the computation to a node subset. - Depth-first traversal: dfs() and the time-travel variant dfs_at(). - Lookups: find_by_label(), find_edge_by_type(), and bulk delete_by_label(). - Raw subgraph export via get_subgraph() and graph-wide graph_stats(). - All of the above are available on both AstraeaClient and UnifiedClient. Breaking changes - Removed the anomaly-detection methods (anomaly_check(), anomaly_stats(), and anomaly_alerts()); the AstraeaDB server no longer provides this operation. Documentation - vector_search() results are now documented as returning distance (smaller is closer), with a legacy score alias retained for backward compatibility. semantic_neighbors() results likewise carry distance, while hybrid_search() returns a combined score.