# Rust 应用接入验证

日期：2026-10-10（Pacific/Auckland）。Rust 1.99、Linux aarch64；所有编译、依赖、测试与格式工具在所属 Docker 容器内运行。

## 范围与结果

完整 Sync 串行回归通过：190 单元、53 集成、9 文档，共 252 个不同测试，0 失败、0 忽略。最大 16MiB 内容单元与较小写入策略互操作实际执行。

完整回归后，仅补充并发请求退出屏障，保证被取消的异步请求先释放其 Vault 捕获，再解除 shutdown 等待。最终源码额外复验 Iroh/P2P 29 项、SDK 单元 2 项、SDK 集成 7 项，全部通过；这些测试与完整组重叠，不重复累计。工作区全目标全功能、Sync 无默认功能全目标编译检查、11 个相关 Rust 文件格式检查和 git diff --check 通过。编译警告仍保留。

双实例示例实际运行通过：两个独立库目录、独立节点、真实直接 QUIC，启用同步后双向 put/get/get_range 与逻辑删除传播。业务调用未手动 synchronize。

## 复现命令

```sh
cargo test --locked -p cipherfs-sync --all-features -- --test-threads=1
cargo test --locked -p cipherfs-sync --all-features --lib p2p::tests -- --test-threads=1
cargo test --locked -p cipherfs-sync --all-features --lib synced_vault::tests -- --test-threads=1
cargo test --locked -p cipherfs-sync --all-features --test synced_vault_test -- --test-threads=1
cargo check --locked --offline --workspace --all-targets --all-features
cargo check --locked -p cipherfs-sync --no-default-features --all-targets
cargo run --locked -p cipherfs-sync --example synced_vault --no-default-features --features iroh-p2p
```

## 源码指纹

以下第一行是 Core/Sync 内所有 Rust 源文件和 Cargo.toml，按相对路径排序后，对逐文件 sha256sum 输出再次计算 SHA-256；其余两行是工作区 manifest 与 lockfile。指纹对应最终源码及上述最后复验，完整 252 项命令早于最后的退出屏障补充。

```text
eebef681441637c8450ca76e2b777dcf18caac47db982e58c1da3a151a86edd5  -
fd5923e3dea1e470ff551c5cc59d52e561bb10d6d093508be09fcce787457f3c  Cargo.toml
850ea6e32006274ff9a32c080ae7008de2426e563a52623211ffd64e797d4cdb  Cargo.lock
```

## 发现与修正

- 本机私有缓存发布曾误解除待同步保护。现在缓存不确认发布，只有真实对端已认证提交头中的精确记录才解除保护；后续本机写入仍保持待同步，检查点需精确匹配当前记录。
- 索引先可见、正文连接后注册，曾导致立即读取 ContentUnavailable。正文来源现在先准备；同一连接允许最多 16 个并发请求，正文读取有独立配额，避免同步的反向确认阻塞读取。
- 初轮新单元测试误以为保留列表不含当前版本，数量从 3 修为 4，并保留逐记录待同步保护断言。旧的 2 秒 worker 观察截止时间在并行组超时一次；未修改该测试截止时间，定向复验、完整串行与最终 P2P 复验均通过。

## 边界

写入成功承诺本机持久化；复制最终一致，正文按需获取。put/get 使用完整字节缓冲，大对象读取用 get_range。测试为容器内直接 QUIC，未验证两台物理服务器、公网 NAT/中继、长期压力或很长提交链的确认性能。本轮不重复验证核心之外的 UI、语言绑定或 macOS 挂载。

## 阶段结果摘录

以下保留成功与失败阶段，日志名称用于标识运行阶段。

```text
cipherfs-sdk-app-verified.log:93:test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 67.50s
cipherfs-sdk-p2p-cleanup-final.log:494:test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 161 filtered out; finished in 236.40s
cipherfs-sdk-slots-focused.log:465:test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 189 filtered out; finished in 3.14s
cipherfs-sdk-lifecycle-verified.log:467:test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 188 filtered out; finished in 6.70s
cipherfs-sdk-serial-final.log:668:test result: ok. 190 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 281.86s
cipherfs-sdk-serial-final.log:685:test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 34.39s
cipherfs-sdk-serial-final.log:695:test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 17.10s
cipherfs-sdk-serial-final.log:704:test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.17s
cipherfs-sdk-serial-final.log:711:test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
cipherfs-sdk-serial-final.log:719:test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 16.71s
cipherfs-sdk-serial-final.log:737:test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 44.40s
cipherfs-sdk-serial-final.log:745:test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
cipherfs-sdk-serial-final.log:759:test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
cipherfs-sdk-serial-final.log:772:test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 37.82s
cipherfs-sdk-serial-final.log:781:test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 67.43s
cipherfs-sdk-serial-final.log:796:test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s
cipherfs-sdk-receipt-all-integration.log:94:test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 18.63s
cipherfs-sdk-receipt-all-integration.log:104:test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 9.54s
cipherfs-sdk-receipt-all-integration.log:113:test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.49s
cipherfs-sdk-receipt-all-integration.log:120:test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
cipherfs-sdk-receipt-all-integration.log:128:test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.28s
cipherfs-sdk-receipt-all-integration.log:146:test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 31.59s
cipherfs-sdk-receipt-all-integration.log:154:test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
cipherfs-sdk-receipt-all-integration.log:168:test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
cipherfs-sdk-receipt-all-integration.log:174:test business_io_replicates_index_fetches_ranges_and_preserves_independent_local_history ... FAILED
cipherfs-sdk-receipt-all-integration.log:185:thread 'business_io_replicates_index_fetches_ranges_and_preserves_independent_local_history' (11212) panicked at crates/cipherfs-sync/tests/synced_vault_test.rs:114:60:
cipherfs-sdk-receipt-all-integration.log:186:called `Result::unwrap()` on an `Err` value: Core(ContentUnavailable)
cipherfs-sdk-receipt-all-integration.log:193:test result: FAILED. 6 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.87s
cipherfs-sdk-receipt-unit.log:532:test engine::committed::tests::a_private_cache_keeps_pending_history_and_peer_proof_acknowledges_only_its_head ... FAILED
cipherfs-sdk-receipt-unit.log:658:thread 'engine::committed::tests::a_private_cache_keeps_pending_history_and_peer_proof_acknowledges_only_its_head' (6372) panicked at crates/cipherfs-sync/src/engine/committed.rs:666:9:
cipherfs-sdk-receipt-unit.log:660:  left: 4
cipherfs-sdk-receipt-unit.log:661: right: 3
cipherfs-sdk-receipt-unit.log:668:test result: FAILED. 188 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 152.49s
cipherfs-sdk-complete-final.log:584:test p2p::tests::core_queries_do_not_block_async_uploads_or_leak_worker_slots_when_cancelled ... FAILED
cipherfs-sdk-complete-final.log:672:thread 'p2p::tests::core_queries_do_not_block_async_uploads_or_leak_worker_slots_when_cancelled' (12184) panicked at crates/cipherfs-sync/src/p2p_tests.rs:416:6:
cipherfs-sdk-complete-final.log:673:called `Result::unwrap()` on an `Err` value: Elapsed(())
cipherfs-sdk-complete-final.log:680:test result: FAILED. 189 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 156.42s
```

