actr-hyper 0.3.1

Hyper — Actor platform infrastructure: sandbox, transport, scheduler, WASM engine, signing, AIS bootstrap, persistence & crypto primitives
Documentation
# core/hyper API 清理进展

更新日期:2026-04-23

## 背景

本轮工作承接 `/tmp/actr-session-summary-2026-04-22.md` 中的
`T5.5 C23 Batch 2 core/hyper` 收尾,目标是继续缩小 `actr-hyper`
的正式公开面,把只供 runtime 内部或 integration test 使用的低层类型移出正式 API,
同时把 ACTR 的公开术语收敛到当前已经拍板的口径:

- 节点按 `peer` 叙述,不再混入 `client/server`
- workload 接入动词只保留:
  - `attach(...)``wasm / dyn lib`
  - `link(...)``static lib`

## 已完成

### 第一批:已提交

提交:`a69cb003 refactor(hyper): hide internal workload loader helpers`

主要内容:

- `LoadedWorkload``Hyper::load_workload_package()` 收回到 crate 内部。
- 新增 `test_support::inspect_workload_package()`,让测试改走摘要视图,而不是依赖内部工作负载类型。
- 收回一批配置与验证相关的内部 helper:
  - `config` 中的默认常量和 `[hyper]` 解析辅助类型
  - `verify_ed25519_manifest`
  - `HostState`
  - `INITIAL_CONNECTION_TIMEOUT`
- 更新依赖这些入口的测试与 example 测试。

### 第二批:已提交

提交:`9faa0753 refactor(hyper): hide low-level engine instantiation APIs`

主要内容:

- 收回 WASM / dynclib 低层实例化入口:
  - `WasmHost::instantiate()``pub(crate)`
  - `WasmWorkload` 及其 `init/call_on_start/handle``pub(crate)`
  - `DynclibHost::instantiate()``pub(crate)`
  - `DynclibInstance``pub(crate)`
  - `DynClibWorkload``pub(crate)`
- 新增 test-only 包装层,避免 integration test 继续直接依赖内部运行时类型:
  - `test_support::TestWasmWorkload`
  - `test_support::instantiate_wasm_workload()`
  - `test_support::TestDynclibWorkload`
  - `test_support::instantiate_dynclib_workload()`
- 将这些测试切换到新的 `test_support` 入口:
  - `core/hyper/tests/component_model_dispatch.rs`
  - `core/hyper/tests/dynclib_host.rs`
  - `core/hyper/tests/dynclib_actor_e2e.rs`
- 顺手收回 runtime 内部枚举:
  - `workload::Workload``pub(crate)`
  - 从 crate 顶层 re-export 中移除 `Workload`

### 第三批:已提交

提交:`8477ff06 refactor(hyper): collapse redundant module paths`

主要内容:

- 收敛冗余公开子模块路径,保留现有 re-export,不改变对外类型名:
  - `transport::connection_event` → 私有模块,改由 `transport::{ConnectionEvent, ConnectionState}` 暴露
  - `transport::error` → 私有模块,改由 `transport::{NetworkError, NetworkResult}` 暴露
  - `wire::webrtc::{signaling, coordinator}` → 私有模块,改由 `wire::webrtc::*` 边界暴露
  - `storage::db` → 私有模块,保留 `storage::ActorStore`
  - `verify::{trust, cert_cache}` → 私有模块,保留 `verify::*`
  - `wasm::{host, error}` → 私有模块,保留 `wasm::{WasmHost, WasmError}`
- 清理 crate 内部和 integration tests 对这些深路径模块的直接依赖,统一改走模块边界 re-export。

### 第四批:已提交

提交:`44595b95 refactor(hyper): remove attach_none and fix peer terminology`

主要内容:

- 彻底删除 `Node::attach_none()``Workload::None`- `Node<Attached>::register*()` 不再把非 package 路径当成异常分支;`link(...)` 路径可以正常注册。
- Python / TypeScript 绑定不再走“无 workload”路径,而是改成挂一个最小 `link(...)` workload。
- 清理 `attach_none``Workload::None``client-only` 等相关描述,统一回到 peer 模型。

### 第五批:当前工作区

主要内容:

- 正式公开动词收敛为:
  - `Node::attach(...)``wasm / dyn lib`
  - `Node::link(...)``static lib`
-`attach_linked(...)` 改名为 `link(...)`- 低层 object-safe 桥接退回内部:
  - `link_handle(...)``pub(crate)`
  - `LinkedWorkloadHandle``pub(crate)`
  - `WorkloadAdapter``pub(crate)`
  - 从 crate 顶层 re-export 移除
- `signaling / transport` 继续按“契约公开、实现内收”收敛:
  - 默认公开:`SignalingConfig``ReconnectConfig``AuthConfig``AuthType``DisconnectReason``SignalingEvent``SignalingStats` 等契约/值对象
  - `PeerTransport``WireBuilder``DefaultWireBuilder``WebRtcCoordinator``WebSocketSignalingClient` 只在 `test-utils` 下对外
- `outbound` / `inbound` / 低层 transport 实现进一步从默认公开面退出:
  - `outbound` 模块默认改为 crate 内部,`HostGate` / `PeerGate` 只在 `test-utils` 下公开
  - `inbound` 模块默认改为 crate 内部,`MediaFrameRegistry` 不再作为默认公开 API
  - `HostTransport``DataLane``WireHandle``ConnType` 改为仅在 `test-utils` 下公开
- 清理这批内部 warning:
  - `Hyper::load_workload_package()` 仅在 `test-utils` 下编译
  - `WebSocketSignalingClient::connect_to()` 改为 test-only
  - 删除未使用的 `WorkloadAdapter::from_arc()`
  - 清理 `outbound` / transport 内部 test-only helper 引起的默认构建 `dead_code` warning
  - 修正 `WebRtcConnection` / `WebSocketConnection``is_connected()` 低层实现,避免递归歧义
- 扩展术语清理,把 `WebSocket C/S``client-side``server only` 一类描述从相关框架 / FFI / 绑定生成代码注释中一并扫掉。

## 验证

已提交批次已通过:

- `cargo fmt --all`
- `cargo check -p actr-hyper --all-features --quiet`
- `cargo check -p actr-hyper --tests --all-features --quiet`
- `git diff --check`

第五批当前工作区已通过:

- `cargo fmt --all`
- `cargo fmt --all` in `bindings/python`
- `cargo fmt --all` in `bindings/typescript`
- `cargo check -p actr-hyper --quiet`
- `cargo check -p actr-hyper --tests --all-features --quiet`
- `cargo check -p actr-framework --quiet`
- `cargo check --quiet` in `bindings/python`
- `cargo check --quiet` in `bindings/typescript`
- `git diff --check`

## 当前判断

到目前为止,`core/hyper` 里“低风险、纯机械、只影响内部实现或测试入口”的公开面收缩,已经基本做完。

已经不再属于真实剩余项的旧 TODO:

- “第三批当前工作区”这一条已经提交,不再是未完成事项
- `LinkedWorkloadHandle` / `WorkloadAdapter` 已经收回内部,不再是公开 API 待清理项
- `attach_none` / `Workload::None` 路径已经完全删除

剩余更可能需要设计判断而不是机械降级的部分,集中在:

- `signaling / transport` 的高层正式契约边界
  - 例如 `ConnectionEvent`
  - signaling 侧 `ConnectionState`
  - transport 侧 `ConnectionState`
- `HostGate` / `PeerGate` 是否继续作为正式公开高层入口长期保留
- `core/hyper` 收尾后,转入 `T5.5 Batch 5 bindings/web``T18`

## 下一步建议

1. 先提交第五批,把 `attach/link` 命名收敛和 `signaling / transport` 契约收敛落盘。
2. 再做 `core/hyper` Batch 2 的最后一轮设计性收尾,专门审高层契约类型是否继续保留为正式 API。
3. `core/hyper` 收尾后,再转去 `T5.5 Batch 5 bindings/web``T18`