bitflicker64 commented on code in PR #557:
URL: https://github.com/apache/hugegraph-doc/pull/557#discussion_r4439901474


##########
content/en/docs/quickstart/toolchain/hugegraph-hubble.md:
##########
@@ -218,23 +218,55 @@ Input footers show model generation time and query 
request time separately. Asyn
 
 ## Built-in algorithms: explore with parameter forms
 
-Use **Built-in Algorithms** when you prefer a form to writing traversal code. 
Search for an algorithm and supply its parameters.
-Neighbor exploration answers what surrounds a vertex, path algorithms connect 
two vertices, and similarity/ranking algorithms compare or select vertices.
-Start with a known vertex ID and limit direction, edge labels, depth, and 
result size before attempting broader computation.
+Hubble cleanly separates algorithm execution into two dedicated workflows: 
**OLTP online exploration** and **OLAP batch computing**.
+
+### OLTP online algorithms
+
+Use **Built-in Algorithms** when you prefer parameter forms to writing manual 
Gremlin traversals for real-time queries:
+- **Neighbor exploration**: answers what surrounds a vertex (e.g. K-neighbor, 
K-hop).
+- **Paths**: discovers connections between two vertices (e.g. shortest path, 
all paths).
+- **Similarity & ranking**: compares or ranks vertices within local subgraphs.
 
 Forms provide parameter guidance and documentation links, and restore common 
parameters when navigating away and back.
-Results use graph or algorithm-specific panels. Consult the help and 
documentation links beside the algorithm title for definitions and parameters.
 While the parameter form is focused, `Ctrl` / `Command` + `Enter` runs the 
current algorithm.
 
-OLAP batch algorithms require external compute services such as Computer or 
Vermeer.
-The two containers in this example provide online graph operations, not those 
compute services.
-
 For example, select K-neighbor (GET) with `source=1:marko`, `max_depth=1`, and 
`limit=20`.
 After parameter validation, use the run button on the card or the form 
shortcut to explore one-hop neighbors.
 
 ![Built-in neighbor algorithm parameters and graph 
result](/docs/images/hubble/algorithms.jpg)
 {width="1600" height="1000"}
 
+### Native Vermeer OLAP integration
+
+For large-scale, whole-graph analytical algorithms, Hubble integrates natively 
with the high-performance **Vermeer** graph computing engine.
+Hubble prefers Vermeer for OLAP workloads by default, while Computer remains 
available as an opt-in alternative.
+
+#### Configuration in `hugegraph-hubble.properties`
+
+Enable direct Vermeer communication in `conf/hugegraph-hubble.properties`:
+
+```properties
+# Direct Vermeer integration endpoint
+vermeer.url=http://vermeer-master:8888

Review Comment:
   **Important: wrong Vermeer port.**
   
   The Vermeer master listens on `http_peer=0.0.0.0:6688` (`hugegraph-computer` 
`vermeer/config/master.ini:19`). With `:8888`, both `vermeer.url` here and 
`operations.vermeer.address` (around line 490) point at a port where nothing is 
listening, so a copied config cannot connect to Vermeer. The CN page has the 
same values (around lines 235 and 458).
   
   ```suggestion
   vermeer.url=http://vermeer-master:6688
   ```



##########
content/en/docs/quickstart/hugegraph-ai/hugegraph-llm-sdk.md:
##########
@@ -0,0 +1,226 @@
+---
+title: "HugeGraph-LLM SDK Quick Start"
+linkTitle: "HugeGraph-LLM SDK"
+weight: 8
+description: "Standalone Python SDK for schema design, entity/relation 
extraction, graph validation, and reviewed graph construction from text."
+search_keywords: [HugeGraph-LLM SDK, hugegraph_llm_sdk, schema design, graph 
extraction, knowledge graph, Python SDK]
+---
+
+`hugegraph-llm-sdk` is a lightweight, standalone Python SDK for 
programmatically designing schemas, extracting property graphs from 
unstructured text,
+validating schemas against HugeGraph rules, and performing iterative model 
review and bounded repair.
+
+Unlike the full `hugegraph-llm` application, the SDK is completely headless 
and does not require HugeGraph Server, Gradio Web UI, FastAPI, or a vector
+database. Its core runtime depends only on `pydantic>=2.14,<3`.
+
+[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html) · [Ask 
DeepWiki](https://deepwiki.com/apache/hugegraph-ai)
+
+## Requirements and Installation
+
+- **Python**: `>=3.12` (tested and supported on Python 3.12, 3.13, and 3.14).
+- **Package name**: `hugegraph-llm-sdk`
+- **Import name**: `hugegraph_llm_sdk`
+
+### Install with pip or uv
+
+Install the package directly from PyPI or your local source checkout:
+
+```bash
+# Install via pip
+pip install hugegraph-llm-sdk

Review Comment:
   **Important: the SDK is not on PyPI.**
   
   `https://pypi.org/pypi/hugegraph-llm-sdk/json` currently returns 404. The 
upstream `hugegraph-llm-sdk/README.md` says the SDK is not yet published to a 
public package index, and should be installed from a repository path or a built 
wheel.
   
   So `pip install hugegraph-llm-sdk`, including the extras commands from line 
44, fails. An unclaimed package name on a public index could also be registered 
by someone else. Please lead with the source or wheel install, here and on the 
CN page.



##########
content/en/docs/quickstart/hugegraph-ai/hugegraph-llm-sdk.md:
##########
@@ -0,0 +1,226 @@
+---
+title: "HugeGraph-LLM SDK Quick Start"
+linkTitle: "HugeGraph-LLM SDK"
+weight: 8
+description: "Standalone Python SDK for schema design, entity/relation 
extraction, graph validation, and reviewed graph construction from text."
+search_keywords: [HugeGraph-LLM SDK, hugegraph_llm_sdk, schema design, graph 
extraction, knowledge graph, Python SDK]
+---
+
+`hugegraph-llm-sdk` is a lightweight, standalone Python SDK for 
programmatically designing schemas, extracting property graphs from 
unstructured text,
+validating schemas against HugeGraph rules, and performing iterative model 
review and bounded repair.
+
+Unlike the full `hugegraph-llm` application, the SDK is completely headless 
and does not require HugeGraph Server, Gradio Web UI, FastAPI, or a vector
+database. Its core runtime depends only on `pydantic>=2.14,<3`.
+
+[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html) · [Ask 
DeepWiki](https://deepwiki.com/apache/hugegraph-ai)
+
+## Requirements and Installation
+
+- **Python**: `>=3.12` (tested and supported on Python 3.12, 3.13, and 3.14).
+- **Package name**: `hugegraph-llm-sdk`
+- **Import name**: `hugegraph_llm_sdk`
+
+### Install with pip or uv
+
+Install the package directly from PyPI or your local source checkout:
+
+```bash
+# Install via pip
+pip install hugegraph-llm-sdk
+
+# Or install in editable mode from local repository source
+pip install -e /path/to/hugegraph-ai/hugegraph-llm-sdk
+
+# Using uv in your own project
+uv add --editable /path/to/hugegraph-ai/hugegraph-llm-sdk
+```
+
+### Provider Extras
+
+The base SDK does not bundle specific LLM provider client libraries. If you 
want ready-to-use provider clients, install the corresponding extras:
+
+```bash
+# Install with OpenAI adapter
+pip install "hugegraph-llm-sdk[openai]"
+# Or with uv: uv add --editable /path/to/hugegraph-ai/hugegraph-llm-sdk 
--extra openai
+
+# Install with Ollama adapter
+pip install "hugegraph-llm-sdk[ollama]"
+
+# Install with LiteLLM adapter (multi-provider routing)
+pip install "hugegraph-llm-sdk[litellm]"
+```
+
+## Quick Start: Minimal Example
+
+Here is a complete example demonstrating schema design, schema validation, and 
reviewed graph extraction using a custom model function:
+
+```python
+from hugegraph_llm_sdk import (
+    FunctionModel,
+    design_schema,
+    validate_schema,
+    extract_graph,
+)
+
+# 1. Define or wrap your LLM caller
+model = FunctionModel(generate=lambda prompt: 
my_agent_model.invoke(prompt).content)
+
+# 2. Design a graph schema from sample texts and target questions
+draft = design_schema(
+    texts=["Alice works for Acme Corp. Bob reports to Alice."],
+    questions=["Which company does each person work for? Who reports to 
whom?"],
+    model=model,
+)
+
+# Inspect any structural or conceptual issues flagged during design
+if draft.issues:
+    print(f"Schema draft issues: {draft.issues}")
+
+schema = draft.schema
+
+# 3. Validate schema structure against HugeGraph rules
+validation_issues = validate_schema(schema)
+assert not validation_issues, f"Validation failed: {validation_issues}"
+
+# 4. Extract property graph from text
+result = extract_graph(

Review Comment:
   **Important: the examples pass a keyword argument that does not exist.**
   
   The upstream signature is `extract_graph(texts, *, schema, model=None, ...)` 
(`hugegraph-llm-sdk/src/hugegraph_llm_sdk/api.py:117`). Both `text=` here and 
`text_or_chunks=` (around lines 163 and 198) raise `TypeError: unexpected 
keyword argument`.
   
   The `design_schema` table (around line 106) has a related problem: it lists 
an `examples` parameter that does not exist, and shows keyword-only parameters 
as positional. The CN page has the same issues.



##########
content/en/docs/config/config-option.md:
##########
@@ -233,6 +233,7 @@ Basic Config Options and Backend Config Options correspond 
to configuration file
 
|-------------------------------------------------|--------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 | backend                                         |                            
                      | Must be set to `rocksdb`.                               
                                                                                
                                                                                
                                                                                
                                                                                
              |
 | serializer                                      |                            
                      | Must be set to `binary`.                                
                                                                                
                                                                                
                                                                                
                                                                                
              |
+| rocksdb.provider | default | RocksDB engine provider implementation. Allowed 
values: `default` (or `rocksdb`) and `topling`. |

Review Comment:
   **Important: wrong default and allowed values.**
   
   `RocksDBOptions` declares `allowValues("rocksdb", "topling")` with the 
default `"rocksdb"`. A user who sets `rocksdb.provider=default`, as this row 
suggests, fails config validation at startup. The CN row also implies that any 
custom provider can be plugged in.
   
   ```suggestion
   | rocksdb.provider | rocksdb | RocksDB-compatible runtime provider. Allowed 
values: `rocksdb` and `topling`. |
   ```



##########
content/en/docs/quickstart/hugegraph/hugegraph-pd.md:
##########
@@ -557,4 +561,46 @@ The two `log` endpoints take a time range as 
`{"startTime": "...", "endTime": ".
 
 PD registers its own meters under the `hg` prefix, so `/actuator/prometheus` 
exposes `hg_up`, `hg_graphs`, `hg_stores` and `hg_terms` alongside the standard 
JVM metrics, plus per-graph partition and size meters once graphs exist.
 
+It also exposes Raft membership gauges for monitoring and alerting on quorum 
loss:
+- `hg_raft_leader`: `1` if this PD node is the elected Raft leader, `0` 
otherwise.
+- `hg_raft_has_leader`: `1` if this PD node observes an active Raft leader 
(i.e. is part of a quorum), `0` when quorum is lost.
+- `hg_raft_alive_peers`: Number of active Raft peers (including itself) that 
the leader has heard from within the leader lease timeout;
+  reported as `NaN` on non-leader follower nodes.
+
+> [!NOTE]
+> **Quorum Loss Alerting**: Cluster quorum is lost when `sum(hg_raft_leader) 
== 0` or `hg_raft_has_leader == 0` across all members. Alert rules should
+> configure a `for:` window longer than the Raft election timeout (e.g. `for: 
30s`) to avoid false positives during expected leader transitions.
+> To alert on peer degradation from Prometheus, query `hg_raft_alive_peers and 
on(instance) (hg_raft_leader == 1)`.
+
 In versions after 1.7.0, PD also exports, for each registered store, 
`hg_store_state{store="<id>",state="<state>"}`, which is `1` for the store's 
current state (`Unknown`, `Pending`, `Up`, `Offline`, `Exiting` or `Tombstone`) 
and `0` for the others, and `hg_store_leader_count{store="<id>"}`, the number 
of shard groups whose leader is on that store. A rebuilt Store reports `0` 
leaders until leadership moves back to it. Every PD member reads the same 
replicated metadata, so select one instance before aggregating these series.
+
+#### 7.6 Store Decommissioning and Drain Lifecycle
+
+Decommissioning a Store node follows a state machine to safely drain partition 
replicas without service interruption:
+
+1. **State Machine Overview**:
+   - `Up`: The Store is online, healthy, and accepting new shard allocations 
and leader roles.
+   - `Exiting`: The Store is actively draining. While in `Exiting`, the Store 
continues renewing its heartbeat lease, but PD excludes it from new
+     replica allocation and partition migration targets.
+   - Partition Migration: PD schedules background tasks to migrate all shard 
replicas off the draining store to other eligible active Stores.
+   - `Tombstone`: The Store is permanently retired. Once marked `Tombstone`, 
management updates cannot return the Store to an active state.
+
+2. **Draining Invocation**:
+   Initiate store draining via:
+   ```bash
+   curl -X POST http://<pd-host>:8620/v1/store/{storeId} \
+     -H "Authorization: Basic <credentials>" \
+     -H "Content-Type: application/json" \
+     -d '{"storeState": "Exiting"}'
+   ```
+
+3. **Capacity Constraints & Retirement Checks**:
+   - **Capacity Check**: Draining checks that remaining eligible active stores 
satisfy `minStoreCount` (`pd.initial-store-count`). If remaining

Review Comment:
   **Important: wrong config key for the drain capacity check.**
   
   `minStoreCount` is bound to `@Value("${pd.min-store-count:0}")` 
(`PDConfig.java:73`). `pd.initial-store-count` only applies at bootstrap. An 
operator whose drain is rejected would therefore tune the wrong setting. Please 
name `pd.min-store-count` (EN and CN), and consider adding it to the PD config 
table.
   
   One reviewer also notes that a first `Up→Exiting` request that fails this 
check throws before anything is persisted, so "the stored intent remains 
`Exiting`" (line 600) may not hold in that case. That point is [Uncertain / 
needs confirmation].



##########
content/en/docs/clients/restful-api/traverser.md:
##########
@@ -3266,3 +3267,78 @@ POST 
http://localhost:8080/graphspaces/DEFAULT/graphs/{graph}/traversers/count
 ##### 3.2.27.3 Use Cases
 
 Get the size of a multi-step neighborhood when only the number matters, so the 
vertices do not have to be serialized and transferred.
+
+#### 3.2.28 Same Neighbors Batch (POST)
+
+##### 3.2.28.1 Function Introduction
+
+Independently compute the common neighbors of multiple vertex pairs in a 
single batch HTTP request.
+Unlike the GET `sameneighbors` endpoint which accepts two vertices, or the 
single-pair POST endpoint which computes one intersection across all vertices,
+`sameneighborsbatch` accepts an array of pairs and evaluates each pair 
independently.
+
+###### Params
+
+- vertex_list: A list of vertex pairs, required. Each entry must contain 
exactly two non-null vertex IDs. Numeric IDs must be whole
+  numbers in the 64-bit integer range (`-9223372036854775808` to 
`9223372036854775807`). String and UUID formats are also supported.
+- direction: Direction in which vertices expand outward (`OUT`, `IN`, `BOTH`). 
Optional, default is `BOTH`.
+- label: Edge label filter. Optional, default matches all edge labels.
+- max_degree: Maximum number of adjacent edges to traverse per vertex. 
Optional, default is `10000`. Must be positive or `-1` (unlimited).
+- limit: Maximum number of common neighbors returned per pair. Optional, 
default is `10000000`. Must be positive up to `2147483647` or `-1`.
+
+##### 3.2.28.2 Usage Method
+
+###### Method & Url
+
+```text
+POST 
http://localhost:8080/graphspaces/DEFAULT/graphs/{graph}/traversers/sameneighborsbatch
+```
+
+###### Request Body
+
+```json
+{
+  "vertex_list": [
+    ["1:marko", "1:josh"],
+    ["1:peter", "1:josh"]
+  ],
+  "direction": "BOTH",
+  "label": "knows",
+  "max_degree": 10000,
+  "limit": 100
+}
+```
+
+###### Response Status
+
+```json
+200
+```
+
+###### Response Body
+
+The response contains `same_neighbors`, an array of arrays in input-pair 
order, and `measure` with traversal iteration counts and elapsed time:
+
+```json
+{
+  "same_neighbors": [
+    [
+      "2:lop"
+    ],
+    []
+  ],
+  "measure": {
+    "vertex_iter_counter": 6,

Review Comment:
   **Minor: wrong response field names.**
   
   The server returns `vertice_iterations`, `edge_iterations` and `cost(ns)` 
(`API.java:317-318`; asserted in `SameNeighborsBatchApiTest`), not 
`vertex_iter_counter`, `edge_iter_counter` and `cost`. The CN page has the same 
names.



##########
content/en/docs/quickstart/hugegraph/hugegraph-pd.md:
##########
@@ -49,25 +51,27 @@ cd 
apache-hugegraph-incubating-1.7.0/apache-hugegraph-pd-incubating-1.7.0
 
 #### 3.2 Compile from source
 
-```bash
-# 1. Clone the source code
-git clone https://github.com/apache/hugegraph.git
+1. **Clone the source code:**
 
-# 2. Build the project
-cd hugegraph
-mvn clean install -DskipTests=true
+   ```bash
+   git clone https://github.com/apache/hugegraph.git
+   cd hugegraph
+   ```
 
-# 3. After a successful build, the PD directory and packages are located at
-#    hugegraph-pd/apache-hugegraph-pd-{version}          (unpacked PD 
distribution)
-#    hugegraph-pd/apache-hugegraph-pd-{version}.tar.gz   (PD only package, 
Linux build hosts only)
-#    target/apache-hugegraph-{version}.tar.gz            (PD + Store + Server 
package)
-```
+1. **Build the PD module:**
 
-To build only the PD distribution and the modules it depends on:
+   ```bash
+   # Build only the PD distribution and its dependencies
+   mvn clean package -pl hugegraph-pd/hg-pd-dist -am -DskipTests
+   ```
 
-```bash
-mvn clean package -pl hugegraph-pd/hg-pd-dist -am -DskipTests
-```
+1. **Locate the distribution output:**
+
+   ```bash
+   cd hugegraph-pd/apache-hugegraph-pd-*

Review Comment:
   **Minor: this glob matches two paths on Linux.**
   
   The PD dist build produces both the `apache-hugegraph-pd-*` directory and a 
`.tar.gz` with the same prefix. The glob therefore expands to two arguments and 
`cd` fails in Bash and zsh. A trailing slash, `cd 
hugegraph-pd/apache-hugegraph-pd-*/`, restricts it to the directory. Same in CN.



##########
scripts/audit-90d-commits-inventory.md:
##########
@@ -0,0 +1,383 @@
+# 90-Day Commit History Audit & Documentation Gap Master Inventory
+
+> **Audit Period**: 2026-08-01 to 2026-11-01 (90 days relative to 2026-11-01)  
+> **Audited Repositories**: `apache/hugegraph`, `apache/hugegraph-toolchain`, 
`apache/hugegraph-ai`, `apache/hugegraph-computer`, `apache/hugegraph-doc`  
+> **Auditing Agent**: `worker_m4` (synthesizing surveys from 
`teamwork_explorer_survey_1`, `survey_2`, and `survey_3`)  

Review Comment:
   **Minor: internal agent work log committed to the repository.**
   
   This file records internal agent workflow ("Auditing Agent: `worker_m4` …"). 
Nothing references it and the site does not publish it. It also contains 
inaccuracies:
   - it marks the #3293 `.resume-pending` gap as filled, but no such text 
exists under `content/`;
   - it gives `HG_SERVER_STARTUP_TIMEOUT` where the variable is 
`HG_SERVER_STARTUP_TIMEOUT_S`;
   - it says MCP is aligned to 1.8.0, while the page still pins 1.7.1.
   
   Consider removing it from the PR, or keeping it outside the repository. 
Reviewers were split on this item.



##########
content/en/docs/quickstart/computing/hugegraph-vermeer.md:
##########
@@ -95,701 +95,846 @@ cp config/master.ini config/worker.ini "$CONFIG_DIR/"
 ```
 
 Keep master HTTP/gRPC listeners at `0.0.0.0:6688` and `0.0.0.0:6689`. The 
Compose example assigns `172.20.0.10` to master and `172.20.0.11` to worker; 
set these options in the copied `worker.ini`:
-
-```ini
-[default]
+
+```ini
+[default]
 http_peer=0.0.0.0:6788
 grpc_peer=172.20.0.11:6789
 master_peer=172.20.0.10:6689
 run_mode=worker
 worker_group=$
-```
-
+```
+
 This single-worker example uses literal `worker_group=$`, the general group 
used when no named group is bound. The repository template defaults to 
`worker_group=default`; if retaining that named group, bind it to the task 
space or graph before submitting tasks. For default space `$DEFAULT`, use:
-
+
 ```shell
 curl --fail --show-error -X POST \
   'http://localhost:6688/admin/workers/alloc/default/%24DEFAULT'
 ```
-
+
 An `errcode=0` response confirms binding; with token authentication, also 
supply the authorization header. `master_peer` must reach master gRPC from the 
worker network. `grpc_peer` is both the listener and advertised worker address, 
so do not advertise `0.0.0.0`, which other containers cannot reach. Update 
these IPs when changing the subnet or addresses; each additional worker needs a 
unique, mutually reachable `grpc_peer`.
 
 1. **Option 1: Docker Compose (Recommended)**
 
 Run from the Vermeer repository root. Modify existing `docker-compose.yaml` or 
use the following example. The repository file currently mounts all of `~/` as 
configuration and does not publish master HTTP; replace the mount and add the 
port mapping before starting:
-
-```yaml
-services:
-  vermeer-master:
-    image: hugegraph/vermeer
-    container_name: vermeer-master
-    ports:
+
+```yaml
+services:
+  vermeer-master:
+    image: hugegraph/vermeer
+    container_name: vermeer-master
+    ports:
       - "127.0.0.1:6688:6688"
-    volumes:
+    volumes:
       - /home/user/vermeer-config:/go/bin/config:ro
-    command: --env=master
-    networks:
-      vermeer_network:
+    command: --env=master
+    networks:
+      vermeer_network:
         ipv4_address: 172.20.0.10 # Static master address
-
-  vermeer-worker:
-    image: hugegraph/vermeer
-    container_name: vermeer-worker
-    volumes:
+
+  vermeer-worker:
+    image: hugegraph/vermeer
+    container_name: vermeer-worker
+    volumes:
       - /home/user/vermeer-config:/go/bin/config:ro
-    command: --env=worker
-    networks:
-      vermeer_network:
+    command: --env=worker
+    networks:
+      vermeer_network:
         ipv4_address: 172.20.0.11 # Static worker address
-
-networks:
-  vermeer_network:
-    driver: bridge
-    ipam:
-      config:
+
+networks:
+  vermeer_network:
+    driver: bridge
+    ipam:
+      config:
         - subnet: 172.20.0.0/24 # Change the subnet as needed
-```
-
+```
+
 Replace `/home/user/vermeer-config` with your actual absolute configuration 
directory. Changing the subnet or static IPs of `vermeer_network` also requires 
updating `grpc_peer` and `master_peer` in `worker.ini`. Do not use the default 
`grpc_peer=0.0.0.0:6789` as an advertised container address.
-
+
 Build and start from the project directory:
-
-```shell
+
+```shell
 # Build the image from the Vermeer root directory
-docker build -t hugegraph/vermeer .
-
+docker build -t hugegraph/vermeer .
+
 # Start from the Vermeer root directory
-docker-compose up -d
+docker-compose up -d
 # Or use the newer CLI:
-# docker compose up -d
-```
-
+# docker compose up -d
+```
+
 View logs / stop / remove:
-
-```shell
-docker-compose logs -f
-docker-compose down
-```
-
+
+```shell
+docker-compose logs -f
+docker-compose down
+```
+
 2. **Option 2: Separate docker run Commands (Manual Network and Static IPs)**
-
+
 Set `CONFIG_DIR` to the prepared configuration directory, with `grpc_peer` and 
`master_peer` matching the static container addresses. Replace the example 
`CONFIG_DIR` with your actual absolute path.
-
-Build the image:
-
-```shell
-docker build -t hugegraph/vermeer .
-```
-
+
+Build the image:
+
+```shell
+docker build -t hugegraph/vermeer .
+```
+
 Create a custom bridge network (once):
-
-```shell
-docker network create --driver bridge \
-  --subnet 172.20.0.0/24 \
-  vermeer_network
-```
-
+
+```shell
+docker network create --driver bridge \
+  --subnet 172.20.0.0/24 \
+  vermeer_network
+```
+
 Run master (use your absolute `CONFIG_DIR` and adjust IPs as needed):
-
-```shell
+
+```shell
 CONFIG_DIR=/home/user/vermeer-config
-
-docker run -d \
-  --name vermeer-master \
-  --network vermeer_network --ip 172.20.0.10 \
+
+docker run -d \
+  --name vermeer-master \
+  --network vermeer_network --ip 172.20.0.10 \
   -p 127.0.0.1:6688:6688 \
   -v ${CONFIG_DIR}:/go/bin/config:ro \
-  hugegraph/vermeer \
-  --env=master
-```
-
-Run worker:
-
-```shell
-docker run -d \
-  --name vermeer-worker \
-  --network vermeer_network --ip 172.20.0.11 \
+  hugegraph/vermeer \
+  --env=master
+```
+
+Run worker:
+
+```shell
+docker run -d \
+  --name vermeer-worker \
+  --network vermeer_network --ip 172.20.0.11 \
   -v ${CONFIG_DIR}:/go/bin/config:ro \
-  hugegraph/vermeer \
-  --env=worker
-```
-
+  hugegraph/vermeer \
+  --env=worker
+```
+
 View logs / stop / remove:
-
-```shell
-docker logs -f vermeer-master
-docker logs -f vermeer-worker
-
-docker stop vermeer-master vermeer-worker
-docker rm vermeer-master vermeer-worker
-
+
+```shell
+docker logs -f vermeer-master
+docker logs -f vermeer-worker
+
+docker stop vermeer-master vermeer-worker
+docker rm vermeer-master vermeer-worker
+
 # Delete the custom network if needed
-docker network rm vermeer_network
-```
-
+docker network rm vermeer_network
+```
+
 3. **Option 3: Build from Source**
-
+
 Build following the [Vermeer 
README](https://github.com/apache/hugegraph-computer/tree/master/vermeer).
-
-```shell
-go build
-```
-
+
+```shell
+go build
+```
+
 Start from the Vermeer root directory with `./vermeer --env=master` and 
`./vermeer --env=worker01`. In `worker01.ini`, set `grpc_peer` to an address 
bindable locally and reachable by master and other workers; point `master_peer` 
to master gRPC.
-
+
 After starting master, check its HTTP port from the host:
-
-```shell
-curl --fail --show-error http://localhost:6688/graphs
-```
-
+
+```shell
+curl --fail --show-error http://localhost:6688/graphs
+```
+
 Expect HTTP 200 and JSON `errcode=0`.
-
-## 2. Task Creation REST API
-
-### 2.1 Introduction
-
+
+### 1.3 Authentication, Token Tooling, and Deployment Credentials
+
+When `auth=token` is enabled in `master.ini` (or `-auth token` via CLI), 
protect the Master signing factor in a dedicated file (`0600`) instead of 
command-line
+arguments. File-backed authentication uses **v2 HMAC-SHA256** Base58-encoded 
tokens with constant-time MAC verification, preventing legacy downgrade attacks.
+
+#### 1. Generating File-Backed Signing Factor
+
+Create a protected signing factor file before starting Master:
+
+```bash
+umask 077
+openssl rand -hex 32 > config/token-factor
+```
+
+Set the environment variable 
`VERMEER_AUTH_TOKEN_FACTOR_FILE=/path/to/token-factor`, or set 
`auth_token_factor_file` in Master's `master.ini`. The environment
+variable takes precedence over the INI file, and either file setting takes 
precedence over inline `auth_token_factor`. The file must contain one valid 
UTF-8
+line with at least 16 characters and cannot consist solely of whitespace. An 
invalid or unreadable file stops Master before opening network listeners (fails
+closed), and it never falls back to inline or default factors.
+
+#### 2. Generating Auth Tokens with `/go/bin/vermeer-token`
+
+Vermeer container images bundle the native `/go/bin/vermeer-token` CLI utility 
(built from `cmd/vermeer-token`). It generates v2 Base58 tokens without
+requiring a running Master or Kubernetes API access:
+
+```bash {tab="Docker CLI"}
+docker run --rm --user "$(id -u):$(id -g)" -v "$PWD/config:/tokens" \
+  --entrypoint /go/bin/vermeer-token \
+  hugegraph/vermeer:latest -user admin -space '$DEFAULT' \
+  -factor-file /tokens/token-factor -output-file /tokens/admin-token -i -quiet
+```
+
+```bash {tab="Go Source"}
+go run ./cmd/vermeer-token -user admin -space '$DEFAULT' \
+  -factor-file config/token-factor -output-file config/admin-token -i -quiet
+```
+
+CLI Parameters:
+- `-user`: Username (default: `foo`).
+- `-space`: Graph space name (default: `bar`; use `$DEFAULT` for system 
default graph space).
+- `-factor-file`: Path to the signing factor file (required; inline factors 
are rejected).
+- `-output-file`: Atomically writes the Base58 token with file mode `0600` 
without echoing secrets to stdout.
+- `-quiet`: Suppresses informational logs and outputs only the token when 
`-output-file` is omitted.
+- `-client`: Client identifier (default: `hg`).
+- `-i`: Generates an immortal token that never expires (standard tokens expire 
after 24 hours).
+
+To authenticate HTTP requests, pass the generated token in the header:
+```bash
+curl -H "Authorization: Bearer <token>" http://localhost:6688/graphs
+```
+
+#### 3. Kubernetes Secret Password Files and Credential Isolation
+
+To integrate with Kubernetes Secrets without wrapping raw credentials in JSON, 
configure Worker with raw password files:
+
+- Set `VERMEER_HUGEGRAPH_USERNAME` and `VERMEER_HUGEGRAPH_PASSWORD_FILE` (or 
`hugegraph_username` and `hugegraph_password_file` in `worker.ini`). Both values
+  must be configured together; if either is set, a missing or unreadable file 
fails graph loading closed.
+- Raw password file bytes are preserved exactly, including quotes, 
backslashes, spaces, and terminal newlines.
+- When an explicit JSON credentials file is set 
(`VERMEER_HUGEGRAPH_CREDENTIALS_FILE` or `hugegraph_credentials_file`), it 
takes precedence over the raw pair.
+- For PD authentication, mount `VERMEER_PD_PASSWORD_FILE` (or 
`pd_password_file` in INI). When deployment credentials are used, 
`VERMEER_PD_PEERS` (`pd_peers`)
+  is required to discover Schema exclusively through trusted PD endpoints.
+- Secret credentials remain confined to deployment configuration and worker 
processes; they are never persisted in task metadata or returned in query APIs.
+- Dial timeouts can be bounded with `grpc_dial_timeout` or 
`VERMEER_GRPC_DIAL_TIMEOUT` (default `5s`).
+
+## 2. Task Creation REST API
+
+### 2.1 Introduction
+
 Submit a `load` task, wait for loading to finish, then submit a `compute` 
task. A loaded graph can support repeated computations and is not deleted after 
completion. Asynchronous APIs return creation results and task information, 
including ID, before completion; synchronous APIs wait for success or failure, 
so client and proxy HTTP timeouts must be sufficiently long. Query task states: 
`loaded` for successful loading, `complete` for successful computation, `error` 
for failure, and `canceled` for cancellation; other states remain waiting or 
running. Graphs loading or in an error state cannot be computed. Deletion 
requires a deletable graph state and no current usage.
-
+
 Available URLs:
-
+
 - Asynchronous: `POST http://master_ip:port/tasks/create`; read the ID from 
response `task.id`.
 - Synchronous: `POST http://master_ip:port/tasks/create/sync`; returns after 
the task ends.
 - Query task: `GET http://master_ip:port/task/{task_id}`. `errcode=0` 
indicates a successful query; inspect `task.state` for task status.
-  Set a client polling deadline for asynchronous jobs; reaching it stops 
client waiting without canceling the server task.
-- Read retained results: `GET http://master_ip:port/tasks/value/{task_id}` (or 
`/api/v1/tasks/value/{id}`).
-
-Native clients submit `POST /api/v1/tasks/create` with `graph`, `task_type` 
(`load`, `reload` or `compute`), and a flat string-valued `params` map.
-For computation, set `params["compute.algorithm"]`, not a top-level 
`algorithm`.
-The response contains a native `task.id`; query it at `GET /api/v1/task/{id}` 
and read retained values at `GET /api/v1/tasks/value/{id}`.
-These paths and positive IDs differ from Hubble's wrapper.
-`POST /api/v1/tasks` does not submit work: after the task-method fix it 
returns HTTP 405 and `Allow: GET`;
-older builds can return a misleading `{"code":200}` without creating a task.
-See the [native API 
examples](https://github.com/apache/hugegraph-computer/blob/master/vermeer/README.md#api-overview).
-
-Vermeer Master HTTP follows Helm mode defaults: easy is NodePort, strict is 
ClusterIP; RPC and Worker ports remain internal.
-Native UI admin uses the password in `<release>-vermeer-admin`. Automation 
APIs use service tokens in `Authorization: Bearer <token>`;
+  Set a client polling deadline for asynchronous jobs; reaching it stops 
client waiting without canceling the server task.
+- Read retained results: `GET http://master_ip:port/tasks/value/{task_id}` (or 
`/api/v1/tasks/value/{id}`).
+- Cluster health snapshot: `GET http://master_ip:port/api/v1/admin/cluster` 
(admin token required; see [Section 4](#4-cluster-monitoring-and-telemetry)).
+- Worker availability probe: `GET 
http://master_ip:port/api/v1/workers/availability` (space-scoped availability 
check).
+
+Native clients submit `POST /api/v1/tasks/create` with `graph`, `task_type` 
(`load`, `reload` or `compute`), and a flat string-valued `params` map.
+For computation, set `params["compute.algorithm"]`, not a top-level 
`algorithm`.
+The response contains a native `task.id`; query it at `GET /api/v1/task/{id}` 
and read retained values at `GET /api/v1/tasks/value/{id}`.
+These paths and positive IDs differ from Hubble's wrapper.
+`POST /api/v1/tasks` does not submit work: after the task-method fix it 
returns HTTP 405 and `Allow: GET`;
+older builds can return a misleading `{"code":200}` without creating a task.
+See the [native API 
examples](https://github.com/apache/hugegraph-computer/blob/master/vermeer/README.md#api-overview).
+
+Vermeer Master HTTP follows Helm mode defaults: easy is NodePort, strict is 
ClusterIP; RPC and Worker ports remain internal.
+Native UI admin uses the password in `<release>-vermeer-admin`. Automation 
APIs use service tokens in `Authorization: Bearer <token>`;
 UI admin password cannot be used as this token. Chart automatically configures 
service token for Hubble.
-
-### 2.2 Loading Graph Data
-
+
+### 2.2 Loading Graph Data
+
 The examples list common load parameters. Each loader reads its own keys; 
unused keys do not change behavior.
-
+
 Vermeer provides three loading methods:
-
+
 1. Local files
-
+
 `load.vertex_files` and `load.edge_files` map worker address host portions to 
file paths read by those workers. With containers, mount data into the worker 
and use container paths. In the Compose example, mount a host data directory at 
worker `/data` (such as `- /host/data:/data:ro`) and use `172.20.0.11` from 
`grpc_peer` as the mapping key. Other deployments use the host portion of their 
advertised worker addresses.
-
+
 Obtain a dataset such as 
[Twitter-2010](https://snap.stanford.edu/data/twitter-2010.html); the first 
`twitter-2010.txt.gz` file is sufficient.
 
 **Request example:**
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "load",
- "graph": "testdb",
- "params": {
-  "load.parallel": "50",
-  "load.type": "local",
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "load",
+ "graph": "testdb",
+ "params": {
+  "load.parallel": "50",
+  "load.type": "local",
   "load.vertex_files": "{\"172.20.0.11\":\"/data/twitter-2010.v_[0,99]\"}",
   "load.edge_files": "{\"172.20.0.11\":\"/data/twitter-2010.e_[0,99]\"}",
-  "load.use_out_degree": "1",
-  "load.use_outedge": "1"
- }
-}
-```
-
+  "load.use_out_degree": "1",
+  "load.use_outedge": "1"
+ }
+}
+```
+
 2. HugeGraph
-
+
 **Request example:**
-
+
 Replace request addresses, graph name, and credentials with your actual 
connection settings.
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
-  "task_type": "load",
-  "graph": "testdb",
-  "params": {
-    "load.parallel": "50",
-    "load.type": "hugegraph",
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+  "task_type": "load",
+  "graph": "testdb",
+  "params": {
+    "load.parallel": "50",
+    "load.type": "hugegraph",
     "load.hg_pd_peers": "[\"<pd-address-reachable-from-vermeer>:8686\"]",
-    "load.hugegraph_name": "DEFAULT/hugegraph2/g",
-    "load.hugegraph_username": "admin",
-    "load.hugegraph_password": "<your-password-here>",
-    "load.use_out_degree": "1",
-    "load.use_outedge": "1"
-  }
-}
-```
-
+    "load.hugegraph_name": "DEFAULT/hugegraph2/g",
+    "load.hugegraph_username": "admin",
+    "load.hugegraph_password": "<your-password-here>",
+    "load.use_out_degree": "1",
+    "load.use_outedge": "1"
+  }
+}
+```
+
 Vermeer master connects to PD through `load.hg_pd_peers` to look up 
partitions; workers read data from the returned Store addresses. These services 
must be reachable from the corresponding Vermeer hosts or containers. Inside 
Docker, `127.0.0.1` identifies the container itself, not the host or another 
container.
-
+
 3. HDFS
 
 **Request example:**
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
-  "task_type": "load",
-  "graph": "testdb",
-  "params": {
-    "load.parallel": "50",
-    "load.type": "hdfs",
-    "load.hdfs_namenode": "name_node1:9000",
-    "load.hdfs_conf_path": "/path/to/conf",
-    "load.krb_realm": "EXAMPLE.COM",
-    "load.krb_name": "[email protected]",
-    "load.krb_keytab_path": "/path/to/keytab",
-    "load.krb_conf_path": "/path/to/krb5.conf",
-    "load.hdfs_use_krb": "1",
-    "load.vertex_files": "/data/graph/vertices",
-    "load.edge_files": "/data/graph/edges",
-    "load.use_out_degree": "1",
-    "load.use_outedge": "1"
-  }
-}
-```
-
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+  "task_type": "load",
+  "graph": "testdb",
+  "params": {
+    "load.parallel": "50",
+    "load.type": "hdfs",
+    "load.hdfs_namenode": "name_node1:9000",
+    "load.hdfs_conf_path": "/path/to/conf",
+    "load.krb_realm": "EXAMPLE.COM",
+    "load.krb_name": "[email protected]",
+    "load.krb_keytab_path": "/path/to/keytab",
+    "load.krb_conf_path": "/path/to/krb5.conf",
+    "load.hdfs_use_krb": "1",
+    "load.vertex_files": "/data/graph/vertices",
+    "load.edge_files": "/data/graph/edges",
+    "load.use_out_degree": "1",
+    "load.use_outedge": "1"
+  }
+}
+```
+
 ### 2.3 Outputting Computation Results
-
+
 Current result writers support `local`, `hdfs`, and `hugegraph` through 
`output.type`; `none` disables output. Source retains an `afs` constant, but 
current master registers no AFS loader or writer. Set 
`output.need_statistics=1` to put statistics into task information; supported 
statistics operators depend on each algorithm implementation.
-
+
 The examples list common computation and output parameters; supported 
algorithm parameters depend on current Vermeer implementations.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "pagerank",
- "compute.parallel": "10",
- "compute.max_step": "10",
- "output.type": "local",
- "output.parallel": "1",
- "output.file_path": "result/pagerank"
-  }
-}
-```
-
-`output.type=local` writes to the executing worker's local filesystem. For 
containers, mount the output directory if the host needs to read results.
-
-### 2.4 Submit and Integrate via Hubble
-
-With Chart-managed native integration, `POST /api/v1.3/vermeer/task` is used 
to load or reload a graph, not for computation.
-It accepts `graphspace`, `graph`, `task_type:"load"`, and optional loading 
tuning parameters.
-Once the graph is loaded, submit the algorithm via the graph-level computation 
endpoint:
-
-```bash
-curl -b hubble.cookies -X POST \
-  
'http://localhost:8088/api/v1.3/graphspaces/DEFAULT/graphs/hugegraph/algorithms/vermeer'
 \
-  -H 'Content-Type: application/json' \
-  -d 
'{"params":{"compute.algorithm":"pagerank","compute.parallel":1,"compute.max_step":10,"pagerank.damping":0.85,"pagerank.diff_threshold":0.00001}}'
-```
-
-Parameters and example values come from the current Hubble PageRank form:
-
-| Parameter | Meaning | Example |
-|---|---|---|
-| `compute.algorithm` | Supported algorithm name | `pagerank` |
-| `compute.parallel` | Computation parallelism | `1` |
-| `compute.max_step` | Maximum iteration steps | `10` |
-| `pagerank.damping` | PageRank damping factor | `0.85` |
-| `pagerank.diff_threshold` | Convergence threshold | `0.00001` |
-
-Current Hubble accepts `pagerank`, `wcc`, `lpa`, `degree`, 
`closeness_centrality`, `betweenness_centrality`, `triangle_count`, `kcore`, 
and `sssp`.
-Use the selected algorithm's form for its own parameters; PageRank keys do not 
apply to another algorithm.
-The direct adapter accepts `compute.*`, the selected algorithm's 
`<algorithm>.*` keys and `output.need_statistics`.
-Vermeer still validates the actual values. Hubble controls output storage and 
does not accept arbitrary output paths or Server credentials.
-
-The response contains `data.task_id` inside the Hubble response envelope. 
Preserve the returned sign:
-Hubble maps native Vermeer task IDs to negative IDs. Poll the same graph's
-`GET /api/v1.3/graphspaces/DEFAULT/graphs/hugegraph/async-tasks/{id}`;
-read result pages through `GET .../async-tasks/{id}/values?cursor=0&limit=100` 
after successful completion.
-Do not send that Hubble ID to Server's native `/tasks/{id}` endpoint.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "pagerank",
+ "compute.parallel": "10",
+ "compute.max_step": "10",
+ "output.type": "local",
+ "output.parallel": "1",
+ "output.file_path": "result/pagerank"
+  }
+}
+```
+
+`output.type=local` writes to the executing worker's local filesystem. For 
containers, mount the output directory if the host needs to read results.
+
+### 2.4 Submit and Integrate via Hubble
+
+With Chart-managed native integration, `POST /api/v1.3/vermeer/task` is used 
to load or reload a graph, not for computation.
+It accepts `graphspace`, `graph`, `task_type:"load"`, and optional loading 
tuning parameters.
+Once the graph is loaded, submit the algorithm via the graph-level computation 
endpoint:
+
+```bash
+curl -b hubble.cookies -X POST \
+  
'http://localhost:8088/api/v1.3/graphspaces/DEFAULT/graphs/hugegraph/algorithms/vermeer'
 \
+  -H 'Content-Type: application/json' \
+  -d 
'{"params":{"compute.algorithm":"pagerank","compute.parallel":1,"compute.max_step":10,"pagerank.damping":0.85,"pagerank.diff_threshold":0.00001}}'
+```
+
+Parameters and example values come from the current Hubble PageRank form:
+
+| Parameter | Meaning | Example |
+|---|---|---|
+| `compute.algorithm` | Supported algorithm name | `pagerank` |
+| `compute.parallel` | Computation parallelism | `1` |
+| `compute.max_step` | Maximum iteration steps | `10` |
+| `pagerank.damping` | PageRank damping factor | `0.85` |
+| `pagerank.diff_threshold` | Convergence threshold | `0.00001` |
+
+Current Hubble accepts `pagerank`, `wcc`, `lpa`, `degree`, 
`closeness_centrality`, `betweenness_centrality`, `triangle_count`, `kcore`, 
and `sssp`.
+Use the selected algorithm's form for its own parameters; PageRank keys do not 
apply to another algorithm.
+The direct adapter accepts `compute.*`, the selected algorithm's 
`<algorithm>.*` keys and `output.need_statistics`.
+Vermeer still validates the actual values. Hubble controls output storage and 
does not accept arbitrary output paths or Server credentials.
+
+The response contains `data.task_id` inside the Hubble response envelope. 
Preserve the returned sign:
+Hubble maps native Vermeer task IDs to negative IDs. Poll the same graph's
+`GET /api/v1.3/graphspaces/DEFAULT/graphs/hugegraph/async-tasks/{id}`;
+read result pages through `GET .../async-tasks/{id}/values?cursor=0&limit=100` 
after successful completion.
+Do not send that Hubble ID to Server's native `/tasks/{id}` endpoint.
 A graph state of `loaded` confirms loading only. An HTTP 400 on computation 
requires inspecting the exact rejected request and response.
 
-
-## 3. Supported Algorithms
-
-### 3.1 PageRank
-
-The PageRank algorithm, also known as the web ranking algorithm, is a 
technique used by search engines to calculate the relevance and importance of 
web pages (nodes) based on their mutual hyperlinks.
-
-- If a web page is linked to by many other web pages, it indicates that the 
web page is relatively important, and its PageRank value will be relatively 
high.
-- If a web page with a high PageRank value links to other web pages, the 
PageRank value of the linked web pages will also increase accordingly.
-
-The PageRank algorithm is suitable for scenarios such as web page ranking and 
identifying key figures in social networks.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "pagerank",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/pagerank",
- "compute.max_step":"10"
- }
-}
-```
-
-### 3.2 WCC (Weakly Connected Components)
-
-The weakly connected components algorithm calculates all connected subgraphs 
in an undirected graph and outputs the weakly connected subgraph ID to which 
each vertex belongs, indicating the connectivity between points and 
distinguishing different connected communities.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "wcc",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/wcc",
- "compute.max_step":"10"
- }
-}
-```
-
-### 3.3 LPA (Label Propagation Algorithm)
-
-The label propagation algorithm is a graph clustering algorithm commonly used 
in social networks to discover potential communities.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "lpa",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/lpa",
- "compute.max_step":"10"
- }
-}
-```
-
-### 3.4 Degree Centrality
-
-The degree centrality algorithm calculates the degree centrality value of each 
node in the graph, supporting both undirected and directed graphs. Degree 
centrality is an important indicator of node importance; the more edges a node 
has with other nodes, the higher its degree centrality value, and the more 
important the node is in the graph. In an undirected graph, degree centrality 
is calculated based on edge information to count the number of times a node 
appears, resulting in the degree centrality value of the node. In a directed 
graph, it is based on the direction of the edges, filtering based on input or 
output-edge information to count the number of times a node appears, resulting 
in the in-degree or out-degree value of the node. It indicates the importance 
of each point, with more important points having higher degrees.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "degree",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/degree",
- "degree.direction":"both"
- }
-}
-```
-
-### 3.5 Closeness Centrality
-
-Closeness centrality is used to calculate the inverse of the shortest distance 
from a node to all other reachable nodes, accumulating and normalizing the 
value. Closeness centrality can be used to measure the time it takes for 
information to be transmitted from the node to other nodes. The larger the 
closeness centrality of a node, the closer its position in the graph is to the 
center, suitable for scenarios such as identifying key nodes in social networks.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "closeness_centrality",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/closeness_centrality",
- "closeness_centrality.sample_rate":"0.01"
- }
-}
-```
-
-### 3.6 Betweenness Centrality
-
-The betweenness centrality algorithm determines the value of a node as a 
"bridge" node; the larger the value, the more likely it is to be a necessary 
path between two points in the graph. Typical examples include mutual followers 
in social networks. It is suitable for measuring the degree of aggregation 
around a node in a community.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "betweenness_centrality",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/betweenness_centrality",
- "betweenness_centrality.sample_rate":"0.01"
- }
-}
-```
-
-### 3.7 Triangle Count
-
-The triangle count algorithm calculates the number of triangles passing 
through each vertex, suitable for calculating the relationships between users 
and whether the associations form triangles. The more triangles, the higher the 
degree of association between nodes in the graph, and the tighter the 
organizational relationship. In social networks, triangles indicate cohesive 
communities, and identifying triangles helps understand clustering and 
interconnections among individuals or groups in the network. In financial or 
transaction networks, the presence of triangles may indicate suspicious or 
fraudulent activities, and triangle counting can help identify transaction 
patterns that may require further investigation.
-
-The output result is the Triangle Count corresponding to each vertex, i.e., 
the number of triangles the vertex is part of.
-
-Note: This algorithm is for undirected graphs and ignores edge directions.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "triangle_count",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/triangle_count"
- }
-}
-```
-
-### 3.8 K-Core
-
-The K-Core algorithm marks all vertices with a degree of K, suitable for graph 
pruning and finding the core part of the graph.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "kcore",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/kcore",
- "kcore.degree_k":"5"
- }
-}
-```
-
-### 3.9 SSSP (Single Source Shortest Path)
-
-The single source the shortest path algorithm calculates the shortest distance 
from one point to all other points.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "sssp",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/degree",
- "sssp.source":"tom"
- }
-}
-```
-
-### 3.10 KOUT
-
-Starting from a point, get the k-layer nodes of this point.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "kout",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/kout",
- "kout.source":"tom",
- "compute.max_step":"6"
- }
-}
-```
-
-### 3.11 Louvain
-
-The Louvain algorithm is a community detection algorithm based on modularity. 
The basic idea is that nodes in the network try to traverse all neighbor 
community labels and choose the community label that maximizes the modularity 
increment. After maximizing modularity, each community is regarded as a new 
node, and the process is repeated until the modularity no longer increases.
-
-The distributed Louvain algorithm implemented on Vermeer is affected by 
factors such as node order and parallel computation. Due to the random 
traversal order of the Louvain algorithm, community compression also has a 
certain randomness, leading to different results in multiple executions. 
However, the overall trend will not change significantly.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "louvain",
- "compute.parallel":"10",
- "compute.max_step":"1000",
- "louvain.threshold":"0.0000001",
- "louvain.resolution":"1.0",
- "louvain.step":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/louvain"
-  }
- }
-```
-
-### 3.12 Jaccard Similarity Coefficient
-
-The Jaccard index, also known as the Jaccard similarity coefficient, is used 
to compare the similarity and diversity between finite sample sets. The larger 
the Jaccard coefficient value, the higher the similarity of the samples. It is 
used to calculate the Jaccard similarity coefficient between a given source 
point and all other points in the graph.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "jaccard",
- "compute.parallel":"10",
- "compute.max_step":"2",
- "jaccard.source":"123",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/jaccard"
- }
-}
-```
-
-### 3.13 Personalized PageRank
-
-The goal of personalized PageRank is to calculate the relevance of all nodes 
relative to user u. Starting from the node corresponding to user u, at each 
node, there is a probability of 1-d to stop walking and start again from u, or 
a probability of d to continue walking, randomly selecting a node from the 
nodes pointed to by the current node to walk down. It is used to calculate the 
personalized PageRank score starting from a given starting point, suitable for 
scenarios such as social recommendations.
-
-Since the calculation requires using out-degree, load.use_out_degree needs to 
be set to 1 when reading the graph.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "ppr",
- "compute.parallel":"100",
- "compute.max_step":"10",
- "ppr.source":"123",
- "ppr.damping":"0.85",
- "ppr.diff_threshold":"0.00001",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/ppr"
- }
-}
-```
-
-### 3.14 Global Kout
-
-Calculate the k-degree neighbors of all nodes in the graph (excluding 
themselves and 1~k-1 degree neighbors). Due to the severe memory expansion of 
the global kout algorithm, k is currently limited to 1 and 2. Additionally, the 
global kout algorithm supports filtering functions (parameters such as 
"compute.filter":"risk_level==1"), and the filtering condition is judged when 
calculating the k-degree. The final result set includes those that meet the 
filtering condition. The algorithm's final output is the number of neighbors 
that meet the condition.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "kout_all",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"10",
- "output.file_path":"result/kout",
- "compute.max_step":"2",
- "compute.filter":"risk_level==1"
- }
-}
-```
-
-### 3.15 Clustering Coefficient
-
-The clustering coefficient represents the coefficient of the clustering degree 
of nodes in a graph. In real networks, especially in specific networks, nodes 
tend to establish a tightly organized relationship due to relatively 
high-density connection points. The clustering coefficient algorithm (Cluster 
Coefficient) is used to calculate the clustering degree of nodes in the graph. 
This algorithm is for local clustering coefficients. The local clustering 
coefficient can measure the clustering degree around each node in the graph.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "clustering_coefficient",
- "compute.parallel":"100",
- "compute.max_step":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/cc"
- }
-}
-```
-
-### 3.16 SCC (Strongly Connected Components)
-
-In the mathematical theory of directed graphs, if every vertex of a graph can 
be reached from any other point in the graph, the graph is said to be strongly 
connected. The parts of any directed graph that can achieve strong connectivity 
are called strongly connected components. It indicates the connectivity between 
points and distinguishes different connected communities.
-
-Request example:
-
-```javascript
-POST http://localhost:6688/tasks/create
-{
- "task_type": "compute",
- "graph": "testdb",
- "params": {
- "compute.algorithm": "scc",
- "compute.parallel":"10",
- "output.type":"local",
- "output.parallel":"1",
- "output.file_path":"result/scc",
- "compute.max_step":"200"
- }
-}
-
-```
-
-> 🚧, further updates and improvements will be made at any time. Suggestions 
and feedback are welcome.
+
+## 3. Supported Algorithms
+
+### 3.1 PageRank
+
+The PageRank algorithm, also known as the web ranking algorithm, is a 
technique used by search engines to calculate the relevance and importance of 
web pages (nodes) based on their mutual hyperlinks.
+
+- If a web page is linked to by many other web pages, it indicates that the 
web page is relatively important, and its PageRank value will be relatively 
high.
+- If a web page with a high PageRank value links to other web pages, the 
PageRank value of the linked web pages will also increase accordingly.
+
+The PageRank algorithm is suitable for scenarios such as web page ranking and 
identifying key figures in social networks.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "pagerank",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/pagerank",
+ "compute.max_step":"10"
+ }
+}
+```
+
+### 3.2 WCC (Weakly Connected Components)
+
+The weakly connected components algorithm calculates all connected subgraphs 
in an undirected graph and outputs the weakly connected subgraph ID to which 
each vertex belongs, indicating the connectivity between points and 
distinguishing different connected communities.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "wcc",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/wcc",
+ "compute.max_step":"10"
+ }
+}
+```
+
+### 3.3 LPA (Label Propagation Algorithm)
+
+The label propagation algorithm is a graph clustering algorithm commonly used 
in social networks to discover potential communities.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "lpa",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/lpa",
+ "compute.max_step":"10"
+ }
+}
+```
+
+### 3.4 Degree Centrality
+
+The degree centrality algorithm calculates the degree centrality value of each 
node in the graph, supporting both undirected and directed graphs. Degree 
centrality is an important indicator of node importance; the more edges a node 
has with other nodes, the higher its degree centrality value, and the more 
important the node is in the graph. In an undirected graph, degree centrality 
is calculated based on edge information to count the number of times a node 
appears, resulting in the degree centrality value of the node. In a directed 
graph, it is based on the direction of the edges, filtering based on input or 
output-edge information to count the number of times a node appears, resulting 
in the in-degree or out-degree value of the node. It indicates the importance 
of each point, with more important points having higher degrees.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "degree",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/degree",
+ "degree.direction":"both"
+ }
+}
+```
+
+### 3.5 Closeness Centrality
+
+Closeness centrality is used to calculate the inverse of the shortest distance 
from a node to all other reachable nodes, accumulating and normalizing the 
value. Closeness centrality can be used to measure the time it takes for 
information to be transmitted from the node to other nodes. The larger the 
closeness centrality of a node, the closer its position in the graph is to the 
center, suitable for scenarios such as identifying key nodes in social networks.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "closeness_centrality",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/closeness_centrality",
+ "closeness_centrality.sample_rate":"0.01"
+ }
+}
+```
+
+### 3.6 Betweenness Centrality
+
+The betweenness centrality algorithm determines the value of a node as a 
"bridge" node; the larger the value, the more likely it is to be a necessary 
path between two points in the graph. Typical examples include mutual followers 
in social networks. It is suitable for measuring the degree of aggregation 
around a node in a community.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "betweenness_centrality",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/betweenness_centrality",
+ "betweenness_centrality.sample_rate":"0.01"
+ }
+}
+```
+
+### 3.7 Triangle Count
+
+The triangle count algorithm calculates the number of triangles passing 
through each vertex, suitable for calculating the relationships between users 
and whether the associations form triangles. The more triangles, the higher the 
degree of association between nodes in the graph, and the tighter the 
organizational relationship. In social networks, triangles indicate cohesive 
communities, and identifying triangles helps understand clustering and 
interconnections among individuals or groups in the network. In financial or 
transaction networks, the presence of triangles may indicate suspicious or 
fraudulent activities, and triangle counting can help identify transaction 
patterns that may require further investigation.
+
+The output result is the Triangle Count corresponding to each vertex, i.e., 
the number of triangles the vertex is part of.
+
+Note: This algorithm is for undirected graphs and ignores edge directions.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "triangle_count",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/triangle_count"
+ }
+}
+```
+
+### 3.8 K-Core
+
+The K-Core algorithm marks all vertices with a degree of K, suitable for graph 
pruning and finding the core part of the graph.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "kcore",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/kcore",
+ "kcore.degree_k":"5"
+ }
+}
+```
+
+### 3.9 SSSP (Single Source Shortest Path)
+
+The single source the shortest path algorithm calculates the shortest distance 
from one point to all other points.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "sssp",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/degree",
+ "sssp.source":"tom"
+ }
+}
+```
+
+### 3.10 KOUT
+
+Starting from a point, get the k-layer nodes of this point.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "kout",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/kout",
+ "kout.source":"tom",
+ "compute.max_step":"6"
+ }
+}
+```
+
+### 3.11 Louvain
+
+The Louvain algorithm is a community detection algorithm based on modularity. 
The basic idea is that nodes in the network try to traverse all neighbor 
community labels and choose the community label that maximizes the modularity 
increment. After maximizing modularity, each community is regarded as a new 
node, and the process is repeated until the modularity no longer increases.
+
+The distributed Louvain algorithm implemented on Vermeer is affected by 
factors such as node order and parallel computation. Due to the random 
traversal order of the Louvain algorithm, community compression also has a 
certain randomness, leading to different results in multiple executions. 
However, the overall trend will not change significantly.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "louvain",
+ "compute.parallel":"10",
+ "compute.max_step":"1000",
+ "louvain.threshold":"0.0000001",
+ "louvain.resolution":"1.0",
+ "louvain.step":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/louvain"
+  }
+ }
+```
+
+### 3.12 Jaccard Similarity Coefficient
+
+The Jaccard index, also known as the Jaccard similarity coefficient, is used 
to compare the similarity and diversity between finite sample sets. The larger 
the Jaccard coefficient value, the higher the similarity of the samples. It is 
used to calculate the Jaccard similarity coefficient between a given source 
point and all other points in the graph.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "jaccard",
+ "compute.parallel":"10",
+ "compute.max_step":"2",
+ "jaccard.source":"123",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/jaccard"
+ }
+}
+```
+
+### 3.13 Personalized PageRank
+
+The goal of personalized PageRank is to calculate the relevance of all nodes 
relative to user u. Starting from the node corresponding to user u, at each 
node, there is a probability of 1-d to stop walking and start again from u, or 
a probability of d to continue walking, randomly selecting a node from the 
nodes pointed to by the current node to walk down. It is used to calculate the 
personalized PageRank score starting from a given starting point, suitable for 
scenarios such as social recommendations.
+
+Since the calculation requires using out-degree, load.use_out_degree needs to 
be set to 1 when reading the graph.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "ppr",
+ "compute.parallel":"100",
+ "compute.max_step":"10",
+ "ppr.source":"123",
+ "ppr.damping":"0.85",
+ "ppr.diff_threshold":"0.00001",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/ppr"
+ }
+}
+```
+
+### 3.14 Global Kout
+
+Calculate the k-degree neighbors of all nodes in the graph (excluding 
themselves and 1~k-1 degree neighbors). Due to the severe memory expansion of 
the global kout algorithm, k is currently limited to 1 and 2. Additionally, the 
global kout algorithm supports filtering functions (parameters such as 
"compute.filter":"risk_level==1"), and the filtering condition is judged when 
calculating the k-degree. The final result set includes those that meet the 
filtering condition. The algorithm's final output is the number of neighbors 
that meet the condition.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "kout_all",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"10",
+ "output.file_path":"result/kout",
+ "compute.max_step":"2",
+ "compute.filter":"risk_level==1"
+ }
+}
+```
+
+### 3.15 Clustering Coefficient
+
+The clustering coefficient represents the coefficient of the clustering degree 
of nodes in a graph. In real networks, especially in specific networks, nodes 
tend to establish a tightly organized relationship due to relatively 
high-density connection points. The clustering coefficient algorithm (Cluster 
Coefficient) is used to calculate the clustering degree of nodes in the graph. 
This algorithm is for local clustering coefficients. The local clustering 
coefficient can measure the clustering degree around each node in the graph.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "clustering_coefficient",
+ "compute.parallel":"100",
+ "compute.max_step":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/cc"
+ }
+}
+```
+
+### 3.16 SCC (Strongly Connected Components)
+
+In the mathematical theory of directed graphs, if every vertex of a graph can 
be reached from any other point in the graph, the graph is said to be strongly 
connected. The parts of any directed graph that can achieve strong connectivity 
are called strongly connected components. It indicates the connectivity between 
points and distinguishes different connected communities.
+
+Request example:
+
+```javascript
+POST http://localhost:6688/tasks/create
+{
+ "task_type": "compute",
+ "graph": "testdb",
+ "params": {
+ "compute.algorithm": "scc",
+ "compute.parallel":"10",
+ "output.type":"local",
+ "output.parallel":"1",
+ "output.file_path":"result/scc",
+ "compute.max_step":"200"
+ }
+}
+
+```
+
+## 4. Cluster Monitoring and Telemetry
+
+Vermeer provides dedicated REST endpoints for operations dashboards (such as 
Apache HugeGraph Hubble) and cloud-native container orchestrators (such as
+Kubernetes / Helm availability probes).
+
+### 4.1 Cluster Health Snapshot (`GET /api/v1/admin/cluster`)
+
+`GET /api/v1/admin/cluster` returns a read-only, versioned cluster health 
snapshot (`schema_version: 1`). In deployments where `auth=token` is enabled, 
this
+endpoint requires an administrator token (`Authorization: Bearer 
<admin-token>`) and enforces the standard `/admin` authentication filters.
+
+#### Health and Readiness Semantics
+- **`registered_workers` vs `ready_workers`**: Worker registration alone does 
not constitute readiness. A worker is considered ready only when it maintains an
+  active reverse gRPC connection to Master and 3 live task streams: `load`, 
`compute`, and `superstep`.
+- **Status evaluation**: If there are zero registered workers or any 
registered worker fails readiness checks, the cluster status is marked as 
`DEGRADED`
+  with an explicit explanation in `reason` (such as `no_workers` or 
`worker_not_ready`). A fully operational cluster reports status `UP` (or 
`HEALTHY`).
+- **Telemetry metrics**: Process-level telemetry is collected independently 
for Master and each Worker under `metrics`:
+  - `metrics.cpu_cores`: Consumed process CPU seconds per elapsed wall-clock 
second (can exceed 1.0 on multi-core architectures).
+  - `metrics.rss_bytes`: Resident Set Size in bytes (actual process resident 
memory, rather than host or container limits).
+  - `sample_window_seconds`: Elapsed time window over which CPU utilization 
was measured.
+  - `metric_status`: Resource sampling state (`ok`, `metrics_warming_up` 
during the initial measurement window, or `unsupported` on legacy nodes).
+- **Isolation and bounded latency**: RPC metrics collection runs outside the 
Worker manager lock with an 800 ms timeout. A telemetry failure or timeout never
+  alters worker readiness or disrupts running computations.
+
+#### Example Request and Response
+
+```bash
+curl -H "Authorization: Bearer <admin-token>" \
+  http://localhost:6688/api/v1/admin/cluster
+```
+
+```json
+{
+  "schema_version": 1,
+  "observed_at": 1730419200000,
+  "status": "UP",
+  "registered_workers": 2,
+  "ready_workers": 2,
+  "master": {
+    "launch_time": "2026-11-01T08:00:00Z",
+    "status": "UP",
+    "ready": true,
+    "checks": { "grpc": true },
+    "metrics": {
+      "cpu_cores": 0.15,
+      "rss_bytes": 134217728,
+      "sample_window_seconds": 10.0
+    },
+    "metric_status": "ok"

Review Comment:
   **Important: the cluster-snapshot example does not match `http_cluster.go`.**
   
   In `vermeer/apps/master/services/http_cluster.go`:
   - `metric_status` is an object `{availability: 
AVAILABLE|UNAVAILABLE|UNSUPPORTED, observed_at, reason}` (lines 35-54 and 
216-223), not the string `"ok"`;
   - the master checks include `http_ready`, and worker check keys are 
`*_ready` names;
   - the not-ready reason is `workers_not_ready` (line 148), not 
`worker_not_ready`;
   - there is no `HEALTHY` status.
   
   Monitoring code written against this example would read fields that never 
appear. Please regenerate the example from a real response; the CN page has the 
same issues.



##########
content/en/docs/quickstart/toolchain/hugegraph-hubble.md:
##########
@@ -218,23 +218,55 @@ Input footers show model generation time and query 
request time separately. Asyn
 
 ## Built-in algorithms: explore with parameter forms
 
-Use **Built-in Algorithms** when you prefer a form to writing traversal code. 
Search for an algorithm and supply its parameters.
-Neighbor exploration answers what surrounds a vertex, path algorithms connect 
two vertices, and similarity/ranking algorithms compare or select vertices.
-Start with a known vertex ID and limit direction, edge labels, depth, and 
result size before attempting broader computation.
+Hubble cleanly separates algorithm execution into two dedicated workflows: 
**OLTP online exploration** and **OLAP batch computing**.
+
+### OLTP online algorithms
+
+Use **Built-in Algorithms** when you prefer parameter forms to writing manual 
Gremlin traversals for real-time queries:
+- **Neighbor exploration**: answers what surrounds a vertex (e.g. K-neighbor, 
K-hop).
+- **Paths**: discovers connections between two vertices (e.g. shortest path, 
all paths).
+- **Similarity & ranking**: compares or ranks vertices within local subgraphs.
 
 Forms provide parameter guidance and documentation links, and restore common 
parameters when navigating away and back.
-Results use graph or algorithm-specific panels. Consult the help and 
documentation links beside the algorithm title for definitions and parameters.
 While the parameter form is focused, `Ctrl` / `Command` + `Enter` runs the 
current algorithm.
 
-OLAP batch algorithms require external compute services such as Computer or 
Vermeer.
-The two containers in this example provide online graph operations, not those 
compute services.
-
 For example, select K-neighbor (GET) with `source=1:marko`, `max_depth=1`, and 
`limit=20`.
 After parameter validation, use the run button on the card or the form 
shortcut to explore one-hop neighbors.
 
 ![Built-in neighbor algorithm parameters and graph 
result](/docs/images/hubble/algorithms.jpg)
 {width="1600" height="1000"}
 
+### Native Vermeer OLAP integration
+
+For large-scale, whole-graph analytical algorithms, Hubble integrates natively 
with the high-performance **Vermeer** graph computing engine.
+Hubble prefers Vermeer for OLAP workloads by default, while Computer remains 
available as an opt-in alternative.
+
+#### Configuration in `hugegraph-hubble.properties`
+
+Enable direct Vermeer communication in `conf/hugegraph-hubble.properties`:
+
+```properties
+# Direct Vermeer integration endpoint
+vermeer.url=http://vermeer-master:8888
+# Protected file containing the Vermeer service bearer token
+vermeer.token_file=/path/to/vermeer-service.token
+```
+
+> [!NOTE]
+> When `vermeer.url` is empty, Hubble falls back to the legacy Server proxy 
path. Direct Vermeer integration requires PD/Store cluster mode;
+> it is disabled in standalone mode.
+
+#### Supported OLAP algorithms and execution lifecycle
+
+Vermeer executes batch algorithms over in-memory graph partitions:
+- **Supported algorithms**: PageRank, Personalized PageRank, Weakly Connected 
Components (WCC), Louvain community detection, Betweenness Centrality,

Review Comment:
   **Important: the algorithm list does not match what Hubble accepts.**
   
   `DirectVermeerService` (hubble-be, around line 170) accepts only `pagerank, 
wcc, lpa, degree, closeness_centrality, betweenness_centrality, triangle_count, 
kcore, sssp, ppr`. This list includes Louvain and Local Clustering Coefficient, 
which are rejected with "Unsupported Vermeer algorithm", and leaves out LPA, 
K-Core and SSSP. Please align the EN and CN lists with that set.



##########
content/en/docs/clients/restful-api/_index.md:
##########
@@ -1,18 +1,17 @@
 ---
 title: "HugeGraph RESTful API"
 linkTitle: "RESTful API"
-weight: 1
+weight: 2
 search_keywords: [HugeGraph REST API, RESTful API, OpenAPI]
 search_boost: 1.7
 description: "HugeGraph RESTful API reference for graph, schema, vertex, and 
edge operations."
 ---
 
-> This section documents the REST API on current master. For historical APIs, 
switch to the versioned [HugeGraph 1.7 RESTful API 
documentation](https://hugegraph.apache.org/versions/1.7/docs/clients/restful-api/)
 or

Review Comment:
   R3 status at `8faa8816`: **fixed**. The master/1.7/1.5 banners are back in 
EN and CN `restful-api/_index.md`, `auth.md` and `graphs.md`, together with the 
"`POST /graphs` is not the graph-creation endpoint" note.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to