This is an automated email from the ASF dual-hosted git repository.

zyxxoo pushed a commit to branch refactor/rust-rewrite-design
in repository https://gitbox.apache.org/repos/asf/hugegraph.git


The following commit(s) were added to refs/heads/refactor/rust-rewrite-design 
by this push:
     new 8d9d85cb3 docs(test): tighten snapshot and oracle evidence
8d9d85cb3 is described below

commit 8d9d85cb3a46578ff00e09ba8417f206ceca0146
Author: vaughn <[email protected]>
AuthorDate: Sun Sep 13 09:01:45 2026 +0800

    docs(test): tighten snapshot and oracle evidence
---
 .../rust-rewrite/store-observed-reports.json       | 406 +++++++++++++++++++++
 docs/rust-rewrite-partition-pilot.md               |   8 +
 docs/rust-rewrite-pd-store-test-audit.md           |   2 +
 tools/rust-partition-poc/src/lib.rs                |  42 ++-
 4 files changed, 452 insertions(+), 6 deletions(-)

diff --git a/docs/evidence/rust-rewrite/store-observed-reports.json 
b/docs/evidence/rust-rewrite/store-observed-reports.json
new file mode 100644
index 000000000..ab886bb91
--- /dev/null
+++ b/docs/evidence/rust-rewrite/store-observed-reports.json
@@ -0,0 +1,406 @@
+{
+  "status": "historical reports observed; original build exit and source 
revision unverified",
+  "reports": [
+    {
+      "source": 
"hugegraph-store/hg-store-node/target/surefire-reports/TEST-org.apache.hugegraph.store.node.grpc.ScanUtilTest.xml",
+      "sha256": 
"13a35a0ce3355e20d9f56676dd8651cc5fa24df0c38aab2dd1fa68bcdb1be34d",
+      "counts": {
+        "tests": 6,
+        "failures": 0,
+        "errors": 0,
+        "skipped": 0
+      },
+      "cases": [
+        {
+          "classname": "org.apache.hugegraph.store.node.grpc.ScanUtilTest",
+          "name": 
"testOrderedStreamCloseAcknowledgesCapabilityBeforeFirstPage",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.node.grpc.ScanUtilTest",
+          "name": "testUnorderedAllPartitionRangeUsesLegacyScan",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.node.grpc.ScanUtilTest",
+          "name": "testOneShotOrderedRangeUsesOrderedScanAndAcknowledgesIt",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.node.grpc.ScanUtilTest",
+          "name": "testOrderedAllPartitionRangeUsesOrderedScan",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.node.grpc.ScanUtilTest",
+          "name": "testOrderedScanRejectsOpaquePositionBeforeOpeningIterator",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.node.grpc.ScanUtilTest",
+          "name": "testBatchScanRejectsOrderByKey",
+          "result": "passed"
+        }
+      ]
+    },
+    {
+      "source": 
"hugegraph-store/hg-store-node/target/surefire-reports/TEST-org.apache.hugegraph.store.node.metrics.JraftMetricsTest.xml",
+      "sha256": 
"a51405451c0945bd0a2c8cdc362f64b6452872e1bbad8b1f7c86765f19304fe7",
+      "counts": {
+        "tests": 1,
+        "failures": 0,
+        "errors": 0,
+        "skipped": 0
+      },
+      "cases": [
+        {
+          "classname": 
"org.apache.hugegraph.store.node.metrics.JraftMetricsTest",
+          "name": "testRefineLabel",
+          "result": "passed"
+        }
+      ]
+    },
+    {
+      "source": 
"hugegraph-store/hg-store-test/target/surefire-reports/TEST-org.apache.hugegraph.store.client.ClientSuiteTest.xml",
+      "sha256": 
"afae5cfd8a6dd92c572004f5fc5b0c08ac38b21f3e20cb33d58a59dbd26e69d2",
+      "counts": {
+        "tests": 34,
+        "failures": 0,
+        "errors": 0,
+        "skipped": 0
+      },
+      "cases": [
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.AbstractGrpcClientTest",
+          "name": "testBlockingStubPoolCoversEveryChannel",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.AbstractGrpcClientTest",
+          "name": "testStaleNoticePreservesSameAddressReplacement",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.AbstractGrpcClientTest",
+          "name": "testCancelledRpcDoesNotEvictCurrentNode",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.AbstractGrpcClientTest",
+          "name": "testAsyncStubPoolCoversEveryChannel",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.AbstractGrpcClientTest",
+          "name": "testClosedTargetRebindsStubPools",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.AbstractGrpcClientTest",
+          "name": "testUnavailableRpcEvictsExpectedNodeAndTarget",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.AbstractGrpcClientTest",
+          "name": "testCloseDuringStubBuildDoesNotPublishRetiredChannel",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.client.NodeTxExecutorTest",
+          "name": "testParallelReplacementUsesOneCurrentSession",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.client.NodeTxExecutorTest",
+          "name": "testRetryReplacesSessionFromEvictedNode",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.KvPageScannerTest",
+          "name": "testRejectsOrderedScanWithoutCapabilityAck",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.KvPageScannerTest",
+          "name": "testAcceptsOrderedScanWithCapabilityAck",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.grpc.KvPageScannerTest",
+          "name": "testKeepsExplicitPageSizeAndRequestsNextPageOnDemand",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.NodeTxSessionProxyTest",
+          "name": "testOrderedScanHandlesEmptyStoreAndEarlyClose",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.NodeTxSessionProxyTest",
+          "name": "testScanIteratorOrderedUsesOneStreamPerStoreLazily",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.NodeTxSessionProxyTest",
+          "name": "testNodeTkvDoesNotMutateSharedOwnerKeys",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.NodeTxSessionProxyTest",
+          "name": "testOrderedScanRejectsMixedStoreVersionsAndClosesAll",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.NodeTxSessionProxyTest",
+          "name": "testBatchQueryRejectsOrderByKey",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.NodeTxSessionProxyTest",
+          "name": "testOrderedScanMergesPagedStoresWithLimitAndCursor",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.NodeTxSessionProxyTest",
+          "name": "testScanIteratorOrderedClosesOpenedIteratorsOnOpenFailure",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.NodeTxSessionProxyTest",
+          "name": "testOrderedScanClosesOtherStoreOnPagedFailure",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testMergeInterleavedSourcesByUnsignedKey",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testMergePrimesSourcesConcurrently",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testConcurrentInitializeFailsWithoutWaitingForSlowSource",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": 
"testSlowQueriesUseBoundedWorkersAndDoNotBlockIndependentQuery",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testMergeIsLazyAndStopsAtRawLimit",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testMergeClosesAllSourcesWhenConcurrentInitializeFails",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testMergeClosesAllSourcesWhenAdvanceFails",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testSingleSourceInitializationDoesNotUseExecutor",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testMergeComparesKeysAsUnsignedBytes",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testMergeUsesStableSourceOrderForEqualKeys",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": 
"testInitializeDrainsInFlightTaskBeforeRetryingRejectedSource",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testSingleSourceInitializationPreservesInterrupt",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testInitializeDrainsFailureBeforeSubmittingNinthSource",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.client.OrderedKvIteratorTest",
+          "name": "testInitializeDrainsCompletedFailureBeforeRefillingWindow",
+          "result": "passed"
+        }
+      ]
+    },
+    {
+      "source": 
"hugegraph-store/hg-store-test/target/surefire-reports/TEST-org.apache.hugegraph.store.common.CommonSuiteTest.xml",
+      "sha256": 
"21d05bd9a07e71f7357b3e53ac640c2f4d61cb830ceb04b2484c9762b03214fd",
+      "counts": {
+        "tests": 2,
+        "failures": 0,
+        "errors": 0,
+        "skipped": 0
+      },
+      "cases": [
+        {
+          "classname": 
"org.apache.hugegraph.store.common.ByteBufferAllocatorTest",
+          "name": "getAndReleaseTest",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.common.KVByteBufferTest",
+          "name": "testOps",
+          "result": "passed"
+        }
+      ]
+    },
+    {
+      "source": 
"hugegraph-store/hg-store-test/target/surefire-reports/TEST-org.apache.hugegraph.store.core.BatchGraphIsolationTest.xml",
+      "sha256": 
"a2441bd4713b554e6f95e73212b9ec7dcfa7c2b682f23e101b9b794cc1deb60c",
+      "counts": {
+        "tests": 6,
+        "failures": 0,
+        "errors": 0,
+        "skipped": 0
+      },
+      "cases": [
+        {
+          "classname": 
"org.apache.hugegraph.store.core.BatchGraphIsolationTest",
+          "name": "testBatchPutKeepsGraphsIsolated",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.core.BatchGraphIsolationTest",
+          "name": "testBatchMergeKeepsGraphsIsolated",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.core.BatchGraphIsolationTest",
+          "name": "testDataManagerRollsBackFailedBatch",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.core.BatchGraphIsolationTest",
+          "name": "testDefaultDataMoverRollsBackFailedBatch",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.core.BatchGraphIsolationTest",
+          "name": "testTruncateWaitsForInFlightBatch",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.core.BatchGraphIsolationTest",
+          "name": "testFirstBatchOnEmptyPartitionCompletes",
+          "result": "passed"
+        }
+      ]
+    },
+    {
+      "source": 
"hugegraph-store/hg-store-test/target/surefire-reports/TEST-org.apache.hugegraph.store.raftcore.RaftSuiteTest.xml",
+      "sha256": 
"ab08935c300249885c33e35b9584945e81666ff38228c283948d4ffa9a8add8c",
+      "counts": {
+        "tests": 3,
+        "failures": 0,
+        "errors": 0,
+        "skipped": 0
+      },
+      "cases": [
+        {
+          "classname": "org.apache.hugegraph.store.raftcore.BytesCarrierTest",
+          "name": "testWrite",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.raftcore.ZeroByteStringHelperTest",
+          "name": "testWrap",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.raftcore.ZeroByteStringHelperTest",
+          "name": "testConcatenate",
+          "result": "passed"
+        }
+      ]
+    },
+    {
+      "source": 
"hugegraph-store/hg-store-test/target/surefire-reports/TEST-org.apache.hugegraph.store.rocksdb.RocksDbSuiteTest.xml",
+      "sha256": 
"12e3e65e3f242af3947bd5945ce4f3b047fb1b55b16c9639f9ae674f23d04071",
+      "counts": {
+        "tests": 3,
+        "failures": 0,
+        "errors": 0,
+        "skipped": 0
+      },
+      "cases": [
+        {
+          "classname": "org.apache.hugegraph.store.rocksdb.RocksDBFactoryTest",
+          "name": "testTotalKeys",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.rocksdb.RocksDBFactoryTest",
+          "name": "releaseAllGraphDB",
+          "result": "passed"
+        },
+        {
+          "classname": "org.apache.hugegraph.store.rocksdb.RocksDBFactoryTest",
+          "name": "testCreateSession",
+          "result": "passed"
+        }
+      ]
+    },
+    {
+      "source": 
"hugegraph-store/hg-store-test/target/surefire-reports/TEST-org.apache.hugegraph.store.service.ServerSuiteTest.xml",
+      "sha256": 
"7a2598a4fdf04d4359c926a9a41875f5636bda4f613e5c066d826c821956757c",
+      "counts": {
+        "tests": 6,
+        "failures": 0,
+        "errors": 0,
+        "skipped": 0
+      },
+      "cases": [
+        {
+          "classname": 
"org.apache.hugegraph.store.business.OrderedMultiPartitionIteratorTest",
+          "name": "testInitializationFailureClosesOpenedIterators",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.business.OrderedMultiPartitionIteratorTest",
+          "name": "testMergeByUnsignedKeyAndTrackPartitionPosition",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.business.OrderedMultiPartitionIteratorTest",
+          "name": "testCountConsumesAllRemainingEntries",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.business.OrderedMultiPartitionIteratorTest",
+          "name": "testCloseBeforeInitializationDoesNotOpenSources",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.business.OrderedMultiPartitionIteratorTest",
+          "name": "testMergeComparesKeysAsUnsignedBytes",
+          "result": "passed"
+        },
+        {
+          "classname": 
"org.apache.hugegraph.store.business.OrderedMultiPartitionIteratorTest",
+          "name": "testOrderedScanIsBackwardCompatibleDefaultMethod",
+          "result": "passed"
+        }
+      ]
+    }
+  ]
+}
diff --git a/docs/rust-rewrite-partition-pilot.md 
b/docs/rust-rewrite-partition-pilot.md
index 8929db79c..87fd217f6 100644
--- a/docs/rust-rewrite-partition-pilot.md
+++ b/docs/rust-rewrite-partition-pilot.md
@@ -4,6 +4,12 @@
 
 这是将测试盘点方法落地的第一个试点边界。选择 Partition 是因为它同时包含状态变更、心跳、清理任务和合并操作,且存在 core/service 
两层测试。
 
+## 复核更正(2026-09-13)
+
+此前“模型层闭环”的结论撤回:现有 POC 尚未连接 Java 
实现,也没有进程崩溃、持久化恢复或实现级变异执行器。输入反例测试不能替代实现级变异杀伤率,重复调用 replay 
不能证明崩溃恢复。下方历史执行记录只证明当时所运行用例的结果。
+
+本次修正两个检查错误:范围覆盖不要求不同分区的版本递增;固定参考状态的缓存一致性要求范围与版本全部相等,不能只比较版本大小。新增同版本错误范围、未来版本两个反例。verify.sh
 实际执行 13 项通过,同时 fmt/clippy 通过;这些结果仍不是 Java 兼容或生产恢复证明。
+
 ## 1. 当前实际测试入口
 
 | 测试类 | 已发现方法 | 执行入口 |
@@ -69,3 +75,5 @@ Rust 工程门禁记录:`cargo fmt -- --check`、`cargo clippy 
--all-targets -
 完整 Partition 集成复验(2026-09-10):清理隔离数据后执行 `-Dtest='*Partition*Test'`,core 
4、service 3、cache 23、utils 2,共 **32/32 通过,0 失败,BUILD 
SUCCESS**。完整日志:`/tmp/pd-partition-all.log`。
 
 跨模块回归复验(2026-09-10):完整 `pd-core-test,pd-common-test` 通过;Common 83 项,Core 104 
项(跳过 2 项),失败/错误均为 0,`BUILD SUCCESS`。完整日志:`/tmp/pd-core-common-all.log`。
+
+POC Oracle 复核(2026-09-13):修正版本比较与缓存等价性错误后,`verify.sh` 为 13 
项通过。该结果仅证明独立模型自身的反例检测,不能替代服务实现级变异和 Java/Rust 差分。
diff --git a/docs/rust-rewrite-pd-store-test-audit.md 
b/docs/rust-rewrite-pd-store-test-audit.md
index a3f209cbe..682a9482c 100644
--- a/docs/rust-rewrite-pd-store-test-audit.md
+++ b/docs/rust-rewrite-pd-store-test-audit.md
@@ -43,3 +43,5 @@ Rust 迁移单元只有在:相关测试方法已映射契约编号;Oracle 
 本文件是基于源码和构建配置的资产审计,不声称现有测试完备。方法级契约映射、实际 Surefire 执行结果和补测报告需在 POC 
阶段提交后,才能将条目标记为 `covered`。
 
 2026-09-13 复核:完整 `hg-store-test` 构建曾成功,现有报告显示 61 项无失败;但 Snapshot 测试类 
`HgSnapshotHandlerTest` 未纳入 `CoreSuiteTest`(该 suite 当前整体注释),且用假的 
SnapshotReader/Writer,不能证明真实快照持久化恢复。Store Snapshot 仍保持迁移硬门禁,需新增可执行 suite、真实文件 
round-trip、损坏快照和重启恢复测试。
+
+进一步复核:`HgSnapshotHandlerTest` 针对的是已标记 `@Deprecated` 的 
`HgSnapshotHandler`,而运行时状态机使用 `SnapshotHandler`。因此现有 4 个 Snapshot 测试不能作为生产 
Snapshot 契约证据;必须迁移到活动实现并执行真实文件 round-trip。
diff --git a/tools/rust-partition-poc/src/lib.rs 
b/tools/rust-partition-poc/src/lib.rs
index 5030dbe7b..b6f7c8e0e 100644
--- a/tools/rust-partition-poc/src/lib.rs
+++ b/tools/rust-partition-poc/src/lib.rs
@@ -35,9 +35,6 @@ pub fn validate(parts: &[Partition], max: u64) -> Result<(), 
&'static str> {
             if prev.end != p.start {
                 return Err("gap-or-overlap");
             }
-            if p.version < prev.version {
-                return Err("version-regression");
-            }
         }
     }
     if parts.last().unwrap().end != max {
@@ -91,10 +88,10 @@ mod tests {
         assert_eq!(validate(&x, 20), Err("gap-or-overlap"));
     }
     #[test]
-    fn catches_version_regression() {
+    fn range_coverage_does_not_order_unrelated_versions() {
         let mut x = base();
         x[1].version = 0;
-        assert_eq!(validate(&x, 20), Err("version-regression"));
+        assert_eq!(validate(&x, 20), Ok(()));
     }
     #[test]
     fn rejects_stale_heartbeat() {
@@ -147,7 +144,7 @@ pub fn replay(
 
 pub fn cache_read(cache: Option<Partition>, source: &Partition) -> 
Result<Partition, &'static str> {
     match cache {
-        Some(value) if value.version >= source.version => Ok(value),
+        Some(value) if value == *source => Ok(value),
         _ => Err("cache-stale"),
     }
 }
@@ -239,3 +236,36 @@ mod cache_tests {
         assert_eq!(cache_read(Some(source.clone()), &source), Ok(source));
     }
 }
+
+#[cfg(test)]
+mod cache_counterexamples {
+    use super::{cache_read, Partition};
+
+    #[test]
+    fn rejects_equal_version_with_different_range() {
+        let source = Partition {
+            start: 0,
+            end: 10,
+            version: 2,
+        };
+        let wrong = Partition {
+            end: 11,
+            ..source.clone()
+        };
+        assert!(cache_read(Some(wrong), &source).is_err());
+    }
+
+    #[test]
+    fn rejects_future_version_against_fixed_reference() {
+        let source = Partition {
+            start: 0,
+            end: 10,
+            version: 2,
+        };
+        let wrong = Partition {
+            version: 3,
+            ..source.clone()
+        };
+        assert!(cache_read(Some(wrong), &source).is_err());
+    }
+}

Reply via email to