dsh-eval-guard 0.7.6 → 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ISSUES.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# dsh-eval-guard 问题清单与修复记录
|
|
2
2
|
|
|
3
|
-
> 版本:0.7.
|
|
3
|
+
> 版本:0.7.7 · 审计基线:本仓库工作树(含 0.7.7 的 Neural-Pendulum 0.90 阈值与审核包)
|
|
4
4
|
> 对照 DSH:0.2.1-alpha.1 源码(并核对 git tag 0.1.2 / 0.1.5 / 0.1.7 / 0.2.0-rc.1 / rc.2 / 0.2.1-alpha.1)
|
|
5
5
|
> 本文件先记录问题,再记录修复状态。状态:✅ 已修复 / 🟡 部分修复 / ⛔ 保留(有明确原因或需要架构级改动)
|
|
6
6
|
>
|
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
>
|
|
9
9
|
> **2026-10-23 会话回归修复(未发版)**:修复 Neural-Pendulum 仿真器 Coriolis 项多乘 cos 导致高转速下能量注入并产生 NaN;修正关节 3 在绝对角坐标下的广义力矩映射,由 (tau1,0,tau3) 改为 (tau1,-tau3,tau3);TASK/SPEC/prompt 明确 theta 约定并说明工作区无 PyTorch/numpy;网络 syscall 改为 AF_INET/AF_INET6 的 EPERM 软拒绝,避免 pip/NSS 本地检查被误杀。
|
|
10
10
|
|
|
11
|
-
> **0.7.
|
|
11
|
+
> **0.7.7**:Neural-Pendulum 完成阈值提高到 0.90;prompt/TASK 声明任务已验证可完成、未 completed 前禁止停止;最终 build/control 必须由神经网络输出层直接产生力矩,最终控制程序不得含显式控制律;禁止逆向已编译文件或读取进程内存。另新增审核人员专用包 neural-pendulum-audit(不进入 workspace/npm 任务资产)。
|
|
12
|
+
>
|
|
13
|
+
> **0.7.6**:Neural-Pendulum 切换为 Tier A 评测:每回合随机化隐藏物理参数、初始状态与观测噪声(无摩擦/滞后/延迟),评测改为 100 个隐藏随机回合的成功率,成功率 >= 0.9 完成;计分改为按成功率归一化。训练仿真器与评测仿真器均实现随机化,工作区仍只交付二进制,不提供仿真源码。
|
|
12
14
|
>
|
|
13
15
|
> **0.7.5**:把 0.7.4 误带的开发用 RL 可行性代码从插件中撤除,只保留修正后的 simulator;同时把 agent 训练仿真器与评测仿真器拆开:`assets/neural-pendulum/sim_agent` 只做随机近向下 reset,评测用 `neural-pendulum-eval/sim_eval` 每个 reset 采样新的隐藏物理参数/初始状态/观测噪声;工作区仍只交付二进制,不提供仿真源码。工作区仍只交付二进制,不提供仿真源码。
|
|
14
16
|
> **下文仍有若干条目标记为 ✅ 但实际未完成,不要再按旧状态理解**:arena legacy 的 `std::thread` 静态规则未移除;`cifar_cache.py` 解压仍无 filter、缓存路径仍用 `Path.home()/.dsh`;CIFAR 隐藏标签仍以文件形式落盘;FP32“30 分钟整轮”仍是 op 间检查;无 baseline 时评测仍 fail-open。其余任务相关修复按用户要求暂不动。
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# Neural-Pendulum 任务规格 v1.
|
|
1
|
+
# Neural-Pendulum 任务规格 v1.6
|
|
2
2
|
|
|
3
3
|
本文件是已确定的任务内部规格。实现、评测器、workspace 素材以此为准。
|
|
4
4
|
后续除非明确修改规格,否则不再重新讨论这些规则。
|
|
5
5
|
|
|
6
|
-
v1.
|
|
6
|
+
v1.6 变更:完成阈值提高到 0.90;最终 build/control 的力矩必须由神经网络输出层直接产生,最终控制程序不得包含显式控制律;未 completed 不得停止;禁止逆向/进程内存分析。基础设施评测协议不变。
|
|
7
7
|
|
|
8
8
|
## 1. 任务标识
|
|
9
9
|
|
|
@@ -19,7 +19,7 @@ agent 必须:
|
|
|
19
19
|
|
|
20
20
|
1. 从零实现一套神经网络基础设施(张量、算子、反向传播、优化器、线程池;控制器权重的打包方式自定,评测不要求特定序列化格式)。
|
|
21
21
|
2. 使用该基础设施训练一个神经网络控制器。
|
|
22
|
-
3. 控制预编译双驱动三节摆:第一、第三关节施加有限力矩,中间关节被动,从全向下起摆,并保持三根杆全部向上至少 t_tgt = 10.0 s;评测在 100 个随机隐藏回合上统计成功率,成功率 >= 0.
|
|
22
|
+
3. 控制预编译双驱动三节摆:第一、第三关节施加有限力矩,中间关节被动,从全向下起摆,并保持三根杆全部向上至少 t_tgt = 10.0 s;评测在 100 个随机隐藏回合上统计成功率,成功率 >= 0.9 完成。
|
|
23
23
|
4. 保证基础设施通过 `build/nn_task` 固定 CLI 的数值评测:评测侧用 PyTorch 在相同数据上计算参考值,逐操作比较加权平均相对误差并对照阈值。
|
|
24
24
|
5. 提交的源码中不得出现 torch;候选运行时不提供 Python/torch。
|
|
25
25
|
|
|
@@ -248,7 +248,7 @@ dt = 0.01 s
|
|
|
248
248
|
t_tgt = 10.0 s
|
|
249
249
|
全向上容差 = 每根杆与竖直方向夹角 <= 0.05 rad
|
|
250
250
|
评测回合数 = 100
|
|
251
|
-
完成成功率阈值 = 0.
|
|
251
|
+
完成成功率阈值 = 0.9
|
|
252
252
|
~~~
|
|
253
253
|
|
|
254
254
|
单回合 t_can 定义:
|
|
@@ -270,7 +270,7 @@ t_can = 100 回合 t_can 的平均值(仅用于报告)
|
|
|
270
270
|
|
|
271
271
|
~~~
|
|
272
272
|
infra_ok == true(全部算子可执行且误差不超阈值)
|
|
273
|
-
且 success_rate >= 0.
|
|
273
|
+
且 success_rate >= 0.9
|
|
274
274
|
~~~
|
|
275
275
|
|
|
276
276
|
## 10. 提交与测试事件
|
|
@@ -309,8 +309,8 @@ compile CMake 构建失败,或未产出 build/nn_task / build/control
|
|
|
309
309
|
infra build/nn_task 算子数值评测失败(不可执行/崩溃/超时/输出缺失/误差超阈值)
|
|
310
310
|
controller 控制器启动/协议/崩溃/超时/非法输出
|
|
311
311
|
simulation 仿真异常/NaN/仿真超时
|
|
312
|
-
scoring 正常测试但 success_rate < 0.
|
|
313
|
-
completed success_rate >= 0.
|
|
312
|
+
scoring 正常测试但 success_rate < 0.9
|
|
313
|
+
completed success_rate >= 0.9,任务完成
|
|
314
314
|
~~~
|
|
315
315
|
|
|
316
316
|
### 返回给 agent 的测试结果
|
|
@@ -344,7 +344,7 @@ score = -1
|
|
|
344
344
|
有效测试:
|
|
345
345
|
|
|
346
346
|
~~~
|
|
347
|
-
score = (min(success_rate, 0.
|
|
347
|
+
score = (min(success_rate, 0.9) - 0.9) / 0.9
|
|
348
348
|
~~~
|
|
349
349
|
|
|
350
350
|
范围:
|
|
@@ -380,7 +380,7 @@ T_done 是第一次返回 stage = completed 的测试请求时间。
|
|
|
380
380
|
|
|
381
381
|
~~~
|
|
382
382
|
stage = completed
|
|
383
|
-
success_rate >= 0.
|
|
383
|
+
success_rate >= 0.9
|
|
384
384
|
infra_ok = true
|
|
385
385
|
~~~
|
|
386
386
|
|
|
@@ -98,11 +98,17 @@ success_rate = 成功回合数 / 100
|
|
|
98
98
|
|
|
99
99
|
当:
|
|
100
100
|
|
|
101
|
-
success_rate >= 0.
|
|
101
|
+
success_rate >= 0.9
|
|
102
102
|
且神经网络基础设施数值评测全部通过
|
|
103
103
|
|
|
104
104
|
任务完成,计时停止。
|
|
105
105
|
|
|
106
|
+
该任务已由内部基线验证:100 回合成功率 >= 0.90 是可达的,不要怀疑可行性。在 eval_test 返回 stage=completed 之前,绝对不允许停止、总结或放弃;不要因为成功率接近 0.90、遇到平台期或短期没有提升就收尾。只要没有完成,就必须继续训练、改进、提交和测试,直到完成或外部强制停止。
|
|
107
|
+
|
|
108
|
+
最终提交的 build/control 必须由神经网络输出层直接产生两个力矩;最终控制程序中不得包含任何显式控制律(PID/LQR/MPC/滑模/自抗扰等),也不得在神经网络之外根据状态计算或修正力矩。
|
|
109
|
+
|
|
110
|
+
不得对已编译文件进行任何形式的逆向、反汇编、strings/objdump/readelf/gdb 分析,也不得读取 /proc 或其它进程内存。环境信息只能来自本文件/SPEC.md 和正常使用 tools/sim 的 reset/step 输入输出;违规者成绩无效。
|
|
111
|
+
|
|
106
112
|
## 训练用仿真接口
|
|
107
113
|
|
|
108
114
|
tools/sim 使用 JSONL 协议。
|
|
@@ -358,8 +364,8 @@ completed
|
|
|
358
364
|
- infra:build/nn_task 算子数值评测失败(不可执行、崩溃、超时、输出缺失或误差超阈值)
|
|
359
365
|
- controller:控制器启动、协议、崩溃、超时或输出非法
|
|
360
366
|
- simulation:隐藏仿真推进异常、NaN 或超时
|
|
361
|
-
- scoring:测试有效,但 `success_rate < 0.
|
|
362
|
-
- completed:基础设施和仿真均通过,且 `success_rate >= 0.
|
|
367
|
+
- scoring:测试有效,但 `success_rate < 0.9`
|
|
368
|
+
- completed:基础设施和仿真均通过,且 `success_rate >= 0.9`
|
|
363
369
|
|
|
364
370
|
最终排行分数不会返回给你,只用于赛后排名。
|
|
365
371
|
|
|
@@ -369,7 +375,7 @@ completed
|
|
|
369
375
|
|
|
370
376
|
~~~
|
|
371
377
|
stage = completed
|
|
372
|
-
success_rate >= 0.
|
|
378
|
+
success_rate >= 0.9
|
|
373
379
|
~~~
|
|
374
380
|
|
|
375
381
|
即任务完成。
|
|
@@ -410,13 +416,13 @@ success_rate >= 0.8
|
|
|
410
416
|
score(t) = -1
|
|
411
417
|
|
|
412
418
|
有效测试:
|
|
413
|
-
score(t) = (min(success_rate, 0.
|
|
419
|
+
score(t) = (min(success_rate, 0.9) - 0.9) / 0.9
|
|
414
420
|
|
|
415
421
|
其中:
|
|
416
422
|
|
|
417
423
|
success_rate 的范围是 [0, 1]
|
|
418
424
|
success_rate = 0 时 score = -1
|
|
419
|
-
success_rate >= 0.
|
|
425
|
+
success_rate >= 0.9 时 score = 0
|
|
420
426
|
|
|
421
427
|
分数从测试请求时刻开始生效,直到下一次测试请求。
|
|
422
428
|
|
|
@@ -458,5 +464,5 @@ T_done 是第一次返回 completed 的测试请求时间。
|
|
|
458
464
|
2. 先实现最小可用的 tensor/算子/反向/优化器/线程池,并让 build/nn_task 跑通
|
|
459
465
|
3. 用独立 double 标量参考、有限差分梯度检查逐算子核对误差,边界形状/广播/groups/stride/dilation 都要覆盖(工作区没有 PyTorch/numpy)
|
|
460
466
|
4. 用 tools/sim 采集数据并训练控制器,导出权重供 build/control 使用
|
|
461
|
-
5. 反复提交和测试,优先把 100 回合成功率提升到
|
|
467
|
+
5. 反复提交和测试,优先把 100 回合成功率提升到 90%
|
|
462
468
|
6. 完成后立即总结
|
|
Binary file
|
package/lib/index.js
CHANGED
|
@@ -2484,7 +2484,13 @@ const NEURAL_PENDULUM_DEFINITION = {
|
|
|
2484
2484
|
"",
|
|
2485
2485
|
"环境细节:joint1 与 joint3 驱动,joint2 被动;控制频率 100 Hz;每回合最多 3000 步(30 s),达到上限后继续 step 返回 {\"error\":\"episode_finished\"},必须 reset。theta=0 表示竖直向下、theta=pi 表示竖直向上;观测 a_i=wrap(theta_i-pi),即三个关节角度(弧度,不除 pi)。环境不返回 reward/loss/cost/done;不提供杆长、质量、惯量、角速度或 tip。训练与评测的每个回合都会随机化物理参数、初始状态和观测噪声;评测在 100 个隐藏随机回合上统计成功率,单回合连续全向上保持 10 s 记成功。",
|
|
2486
2486
|
"",
|
|
2487
|
-
"优化目标:从接近全向下起摆,使三根杆全部进入 0.05 rad 的竖直向上容差并保持;评测指标为 100 个隐藏随机回合上的成功率(每回合连续保持 10 s 记成功),成功率 >=
|
|
2487
|
+
"优化目标:从接近全向下起摆,使三根杆全部进入 0.05 rad 的竖直向上容差并保持;评测指标为 100 个隐藏随机回合上的成功率(每回合连续保持 10 s 记成功),成功率 >= 90% 即完成。损失函数、奖励、优化器、网络结构和训练方法由你自行设计,不规定任何训练方案。",
|
|
2488
|
+
"",
|
|
2489
|
+
"该任务已由内部基线验证:100 回合成功率 >= 0.90 是可达的,不要怀疑可行性。在 eval_test 返回 stage=completed 之前,绝对不允许停止、总结或放弃;不要因为成功率接近 0.90、遇到平台期或短期没有提升就收尾。只要没有完成,就必须继续训练、改进、提交和测试,直到完成或外部强制停止。",
|
|
2490
|
+
"",
|
|
2491
|
+
"最终提交的 build/control 必须由神经网络输出层直接产生两个力矩;最终控制程序中不得包含任何显式控制律(PID/LQR/MPC/滑模/自抗扰等),也不得在神经网络之外根据状态计算或修正力矩。",
|
|
2492
|
+
"",
|
|
2493
|
+
"不得对已编译文件进行任何形式的逆向、反汇编、strings/objdump/readelf/gdb 分析,也不得读取 /proc 或其它进程内存。环境信息只能来自 TASK.md/SPEC.md 和正常使用 tools/sim 的 reset/step 输入输出;违规者成绩无效。",
|
|
2488
2494
|
"",
|
|
2489
2495
|
"注意:评测侧用 PyTorch 计算算子参考值,但工作区/候选运行时不提供 PyTorch 或 numpy,也没有网络,无法 pip 安装;开发阶段请用 C++ 或 Python 标准库/独立 double 实现做数值对照。",
|
|
2490
2496
|
"",
|
|
@@ -2681,7 +2687,7 @@ var TaskService = class TaskService {
|
|
|
2681
2687
|
return "simulation";
|
|
2682
2688
|
}
|
|
2683
2689
|
/** Evaluation success-rate target used by the neural-pendulum scoring integral. */
|
|
2684
|
-
static FINAL_SUCCESS_TARGET = .
|
|
2690
|
+
static FINAL_SUCCESS_TARGET = .9;
|
|
2685
2691
|
/** One test event's instantaneous score, mirroring the task specification. */
|
|
2686
2692
|
static eventScore(event) {
|
|
2687
2693
|
const stage = String(event["stage"] ?? "");
|
|
@@ -45,7 +45,7 @@ MAX_STEPS = 3000
|
|
|
45
45
|
T_TGT = 10.0
|
|
46
46
|
UP_TOL = 0.05
|
|
47
47
|
EPISODES = 100
|
|
48
|
-
SUCCESS_TARGET = 0.
|
|
48
|
+
SUCCESS_TARGET = 0.9
|
|
49
49
|
# The score changes at the test request instant. This process is started for
|
|
50
50
|
# one request, so module import is the closest available request timestamp.
|
|
51
51
|
TEST_TIME = time.time()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-eval-guard",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Evaluation guard for DSH: workspace-only filesystem, no network/subagents, wall-clock limits, and task installation for meow-ai-arena and benchmark tasks.",
|
|
6
6
|
"license": "MIT",
|