Skip to content

Commit fbd9f42

Browse files
author
developerworks
committed
Stabilize dashboard relay integration
- Align dashboard specification and final report status - Remove unused fake task fixtures from supervisor test support - Update dashboard task records for the relay boundary
1 parent 8d375c9 commit fbd9f42

7 files changed

Lines changed: 9 additions & 84 deletions

File tree

ASSUMPTIONS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
- `ipc.enabled=true` 时, `ipc.path``registration.relay_registration_path` 必须是 absolute path(绝对路径).
2828
- dynamic registration(动态注册) 只上报 `target_id`, `display_name`, `ipc_path`, `authorization_scope``lease_seconds`.
2929
- event(事件) 和 log(日志) subscription(订阅) 必须由 established dashboard session(已建立看板会话) 触发, registration(注册) 本身不触发主动推送.
30-
- 本次 UI(用户界面) browser test(浏览器测试) 使用 `mock://dashboard` 静态数据验证交互. 真实 `wss://` relay(中继) 连接适配已经实现, 但是浏览器测试不证明真实 mTLS(双向传输层安全协议认证) 证书链有效.
31-
- 当前仓库的 target-side IPC server(目标侧进程间通信服务端) 提供可测试 dispatcher(分发器), Unix listener(Unix 监听器) bind(绑定) 和命令映射边界. relay(中继) 测试使用记录型 IPC client(进程间通信客户端) 覆盖会话门控和转发顺序.
30+
- 本次 UI(用户界面) browser test(浏览器测试) 使用 `wss://` relay(中继) URL(统一资源定位符) 和本地 TLS(传输层安全协议) WebSocket(网络套接字协议) 协议测试服务验证交互. 浏览器测试不证明真实 mTLS(双向传输层安全协议认证) 证书链有效.
31+
- 当前仓库的 target-side IPC server(目标侧进程间通信服务端) 提供可测试 dispatcher(分发器), Unix listener(Unix 监听器) bind(绑定) 和命令映射边界. relay(中继) 测试使用真实 Unix domain socket IPC(Unix 域套接字进程间通信) 测试目标覆盖会话门控和转发顺序.
3232

3333
## 发布默认值
3434

FINAL_REPORT.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@
4040
## 剩余风险
4141

4242
- 当前可访问 URL(访问地址) 是 `http://127.0.0.1:5174/`, 它使用 build output(构建产物) 静态服务展示 UI(用户界面).
43-
- UI(用户界面) browser test(浏览器测试) 使用 `mock://dashboard` 数据验证交互, 没有连接真实 relay(中继) 服务.
43+
- UI(用户界面) browser test(浏览器测试) 使用 `wss://` relay(中继) URL(统一资源定位符) 和本地 TLS(传输层安全协议) WebSocket(网络套接字协议) 协议测试服务验证交互.
4444
- 真实 mTLS(双向传输层安全协议认证) 证书链需要由部署环境提供, 本次测试覆盖配置, 身份派生和拒绝路径, 不覆盖真实证书签发.
45-
- relay(中继) 到 target IPC(目标进程进程间通信) 的安全顺序由记录型 IPC client(进程间通信客户端) 覆盖, 没有启动真实三进程端到端联调.
45+
- relay(中继) 到 target IPC(目标进程进程间通信) 的安全顺序由真实 Unix domain socket IPC(Unix 域套接字进程间通信) 测试目标覆盖, 没有启动真实三进程端到端联调.

specs/001-create-supervisor-core/contracts/public-api.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,6 @@ SBOM(软件物料清单) 不得包含 secret(密钥),token(令牌),本地绝对
420420
`test_support` 必须提供这些帮助能力:
421421

422422
- paused time setup(暂停时间设置)
423-
- fake task factory(假任务工厂)
424423
- heartbeat control(心跳控制)
425424
- readiness control(就绪控制)
426425
- event collection(事件收集)

specs/001-create-supervisor-core/reference-reports/Rust supervisor 架构设计.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ src/supervisor/
8484
observe.rs # tracing、metrics、subscriber
8585
shutdown.rs # 两阶段关闭,grace/abort
8686
error.rs # SupervisorError、TaskFailureKind
87-
test_support.rs # paused time、fake task、事件断言工具
87+
test_support.rs # 暂停时间, 确定性抖动, 事件断言工具
8888
```
8989

9090
核心接口可以这样定型:

specs/001-create-supervisor-core/tasks.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
- [X] T020 [P]`src/state/child.rs``src/state/supervisor.rs` 中实现 `ChildState`(子任务状态) 和 `SupervisorState`(监督器状态) 基础模型,覆盖 FR-025,FR-026 和 SC-009.
6161
- [X] T021 [P]`src/spec/supervisor.rs` 中实现唯一 `SupervisionStrategy`(监督策略),并在 `src/policy/decision.rs` 中实现 `RestartPolicy`,`RestartDecision``TaskFailureKind` 到策略输入的基础类型,覆盖 FR-007,FR-008,FR-009 和 FR-012.
6262
- [X] T022 [P]`src/config/state.rs``src/config/loader.rs` 中实现 `SupervisorConfig`(监督器配置),`ConfigState`(配置状态) 和配置版本基础结构,覆盖 FR-050.
63-
- [X] T023 [P]`src/test_support/assertions.rs``src/test_support/factory.rs` 中实现 paused time(暂停时间),fake task factory(假任务工厂),event collection(事件收集) 和 deterministic jitter(确定性抖动) 支持,覆盖 FR-017,FR-036 和 SC-010.
63+
- [X] T023 [P]`src/test_support/assertions.rs``src/test_support/factory.rs` 中实现 paused time(暂停时间),event collection(事件收集) 和 deterministic jitter(确定性抖动) 支持,覆盖 FR-017,FR-036 和 SC-010.
6464
- [X] T024 在 `src/tests/foundational_gate_test.rs` 中串联基础质量门禁,确认 source layout(源码布局),module boundary(模块边界),import rule(导入规则),naming(命名),configuration boundary(配置边界) 和 glossary(词汇表) 全部可独立运行,覆盖 FR-056,FR-057,FR-063,FR-066,FR-067,FR-077,SC-024,SC-025,SC-031,SC-034,SC-035 和 SC-045.
6565

6666
**Checkpoint(检查点)**: 基础契约,源码布局和质量门禁已经可用,用户故事实现可以开始.

specs/003-supervisor-dashboard/tasks.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@
161161
- **Setup(阶段一)**: 没有依赖, 可以立即开始.
162162
- **Foundational(阶段二)**: 依赖 Setup(阶段一) 完成, 并阻塞所有用户故事.
163163
- **User Story 1(用户故事一, P1)**: 依赖 Foundational(阶段二), 是 MVP(最小可用产品).
164-
- **User Story 2(用户故事二, P2)**: 依赖 Foundational(阶段二). 执行顺序建议在 US1 之后, 但可以用 mock session(模拟会话) 和 mock IPC(模拟进程间通信) 独立测试.
165-
- **User Story 3(用户故事三, P3)**: 依赖 Foundational(阶段二). 执行顺序建议在 US1 和 US2 之后, 但可以用 mock target process(模拟目标进程) 独立测试认证, 授权和命令契约.
164+
- **User Story 2(用户故事二, P2)**: 依赖 Foundational(阶段二). 执行顺序建议在 US1 之后, 并通过真实 relay(中继) 连接和 contract sample(契约样例) 独立测试.
165+
- **User Story 3(用户故事三, P3)**: 依赖 Foundational(阶段二). 执行顺序建议在 US1 和 US2 之后, 并通过真实 Unix domain socket IPC(Unix 域套接字进程间通信) 测试目标独立测试认证, 授权和命令契约.
166166
- **Polish(阶段六)**: 依赖所有选定用户故事完成.
167167

168168
### User Story Dependencies(用户故事依赖)

src/test_support/factory.rs

Lines changed: 1 addition & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
//! Deterministic helpers for supervisor tests.
22
//!
33
//! The module provides small reusable fixtures for event collection, paused
4-
//! time, fake task outcomes, and deterministic jitter.
4+
//! time, and deterministic jitter.
55
6-
use crate::error::types::TaskFailure;
76
use crate::event::payload::{SupervisorEvent, What, Where};
87
use crate::event::time::{CorrelationId, EventSequence, EventSequenceSource, EventTime, When};
98
use crate::id::types::{Attempt, ChildId, Generation, SupervisorPath};
@@ -113,79 +112,6 @@ impl DeterministicJitter {
113112
}
114113
}
115114

116-
/// Fake task outcome for tests that do not need a real runtime.
117-
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
118-
pub enum FakeTaskOutcome {
119-
/// Task completes successfully.
120-
Complete,
121-
/// Task is cancelled.
122-
Cancel,
123-
/// Task returns a typed failure.
124-
Fail {
125-
/// Failure payload returned by the task.
126-
failure: TaskFailure,
127-
},
128-
}
129-
130-
/// Fake task factory that returns deterministic outcomes in order.
131-
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
132-
pub struct FakeTaskFactory {
133-
/// Ordered outcomes returned by attempts.
134-
pub outcomes: Vec<FakeTaskOutcome>,
135-
/// Next outcome index.
136-
pub next_index: usize,
137-
}
138-
139-
impl FakeTaskFactory {
140-
/// Creates a fake task factory.
141-
///
142-
/// # Arguments
143-
///
144-
/// - `outcomes`: Ordered outcomes returned by attempts.
145-
///
146-
/// # Returns
147-
///
148-
/// Returns a [`FakeTaskFactory`].
149-
///
150-
/// # Examples
151-
///
152-
/// ```
153-
/// let mut factory = rust_supervisor::test_support::factory::FakeTaskFactory::new(vec![
154-
/// rust_supervisor::test_support::factory::FakeTaskOutcome::Complete,
155-
/// ]);
156-
/// assert!(matches!(
157-
/// factory.next_outcome(),
158-
/// rust_supervisor::test_support::factory::FakeTaskOutcome::Complete
159-
/// ));
160-
/// ```
161-
pub fn new(outcomes: Vec<FakeTaskOutcome>) -> Self {
162-
Self {
163-
outcomes,
164-
next_index: 0,
165-
}
166-
}
167-
168-
/// Returns the next deterministic outcome.
169-
///
170-
/// # Arguments
171-
///
172-
/// This function has no arguments.
173-
///
174-
/// # Returns
175-
///
176-
/// Returns the next [`FakeTaskOutcome`], or `Complete` after configured
177-
/// outcomes are exhausted.
178-
pub fn next_outcome(&mut self) -> FakeTaskOutcome {
179-
let outcome = self
180-
.outcomes
181-
.get(self.next_index)
182-
.cloned()
183-
.unwrap_or(FakeTaskOutcome::Complete);
184-
self.next_index = self.next_index.saturating_add(1);
185-
outcome
186-
}
187-
}
188-
189115
/// Collector that stores supervisor events in memory.
190116
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
191117
pub struct EventCollector {

0 commit comments

Comments
 (0)