ralph-flow-pi 0.1.0

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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +428 -0
  3. package/dist/cli.d.ts +9 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +56 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/prompts.d.ts +25 -0
  8. package/dist/commands/prompts.d.ts.map +1 -0
  9. package/dist/commands/prompts.js +249 -0
  10. package/dist/commands/prompts.js.map +1 -0
  11. package/dist/commands/tools.d.ts +47 -0
  12. package/dist/commands/tools.d.ts.map +1 -0
  13. package/dist/commands/tools.js +633 -0
  14. package/dist/commands/tools.js.map +1 -0
  15. package/dist/engine/check-bash.d.ts +121 -0
  16. package/dist/engine/check-bash.d.ts.map +1 -0
  17. package/dist/engine/check-bash.js +373 -0
  18. package/dist/engine/check-bash.js.map +1 -0
  19. package/dist/engine/check.d.ts +47 -0
  20. package/dist/engine/check.d.ts.map +1 -0
  21. package/dist/engine/check.js +298 -0
  22. package/dist/engine/check.js.map +1 -0
  23. package/dist/engine/core.d.ts +153 -0
  24. package/dist/engine/core.d.ts.map +1 -0
  25. package/dist/engine/core.js +1984 -0
  26. package/dist/engine/core.js.map +1 -0
  27. package/dist/engine/lock.d.ts +27 -0
  28. package/dist/engine/lock.d.ts.map +1 -0
  29. package/dist/engine/lock.js +121 -0
  30. package/dist/engine/lock.js.map +1 -0
  31. package/dist/engine/runner.d.ts +108 -0
  32. package/dist/engine/runner.d.ts.map +1 -0
  33. package/dist/engine/runner.js +510 -0
  34. package/dist/engine/runner.js.map +1 -0
  35. package/dist/engine/skills.d.ts +53 -0
  36. package/dist/engine/skills.d.ts.map +1 -0
  37. package/dist/engine/skills.js +109 -0
  38. package/dist/engine/skills.js.map +1 -0
  39. package/dist/engine/step-tools.d.ts +22 -0
  40. package/dist/engine/step-tools.d.ts.map +1 -0
  41. package/dist/engine/step-tools.js +45 -0
  42. package/dist/engine/step-tools.js.map +1 -0
  43. package/dist/engine/types.d.ts +136 -0
  44. package/dist/engine/types.d.ts.map +1 -0
  45. package/dist/engine/types.js +20 -0
  46. package/dist/engine/types.js.map +1 -0
  47. package/dist/headless.d.ts +57 -0
  48. package/dist/headless.d.ts.map +1 -0
  49. package/dist/headless.js +318 -0
  50. package/dist/headless.js.map +1 -0
  51. package/dist/pi/adapter.d.ts +135 -0
  52. package/dist/pi/adapter.d.ts.map +1 -0
  53. package/dist/pi/adapter.js +231 -0
  54. package/dist/pi/adapter.js.map +1 -0
  55. package/dist/pi/interactive.d.ts +28 -0
  56. package/dist/pi/interactive.d.ts.map +1 -0
  57. package/dist/pi/interactive.js +58 -0
  58. package/dist/pi/interactive.js.map +1 -0
  59. package/dist/pi/tui.d.ts +12 -0
  60. package/dist/pi/tui.d.ts.map +1 -0
  61. package/dist/pi/tui.js +12 -0
  62. package/dist/pi/tui.js.map +1 -0
  63. package/dist/tui/app.d.ts +25 -0
  64. package/dist/tui/app.d.ts.map +1 -0
  65. package/dist/tui/app.js +47 -0
  66. package/dist/tui/app.js.map +1 -0
  67. package/dist/tui/embed.d.ts +42 -0
  68. package/dist/tui/embed.d.ts.map +1 -0
  69. package/dist/tui/embed.js +38 -0
  70. package/dist/tui/embed.js.map +1 -0
  71. package/dist/tui/extension.d.ts +88 -0
  72. package/dist/tui/extension.d.ts.map +1 -0
  73. package/dist/tui/extension.js +114 -0
  74. package/dist/tui/extension.js.map +1 -0
  75. package/dist/tui/history-editor.d.ts +38 -0
  76. package/dist/tui/history-editor.d.ts.map +1 -0
  77. package/dist/tui/history-editor.js +55 -0
  78. package/dist/tui/history-editor.js.map +1 -0
  79. package/dist/tui/launcher.d.ts +24 -0
  80. package/dist/tui/launcher.d.ts.map +1 -0
  81. package/dist/tui/launcher.js +97 -0
  82. package/dist/tui/launcher.js.map +1 -0
  83. package/dist/tui/render.d.ts +87 -0
  84. package/dist/tui/render.d.ts.map +1 -0
  85. package/dist/tui/render.js +266 -0
  86. package/dist/tui/render.js.map +1 -0
  87. package/dist/tui/run-app.d.ts +49 -0
  88. package/dist/tui/run-app.d.ts.map +1 -0
  89. package/dist/tui/run-app.js +317 -0
  90. package/dist/tui/run-app.js.map +1 -0
  91. package/dist/tui/run-model.d.ts +162 -0
  92. package/dist/tui/run-model.d.ts.map +1 -0
  93. package/dist/tui/run-model.js +280 -0
  94. package/dist/tui/run-model.js.map +1 -0
  95. package/dist/tui/run-view.d.ts +71 -0
  96. package/dist/tui/run-view.d.ts.map +1 -0
  97. package/dist/tui/run-view.js +167 -0
  98. package/dist/tui/run-view.js.map +1 -0
  99. package/dist/tui/welcome-header.d.ts +40 -0
  100. package/dist/tui/welcome-header.d.ts.map +1 -0
  101. package/dist/tui/welcome-header.js +90 -0
  102. package/dist/tui/welcome-header.js.map +1 -0
  103. package/package.json +55 -0
  104. package/skills/c-to-rust-audit/SKILL.md +67 -0
  105. package/skills/c-to-rust-implement/SKILL.md +151 -0
  106. package/skills/c-to-rust-implement/references/c-to-rust-patterns.md +86 -0
  107. package/skills/c-to-rust-implement/references/conditional-compilation.md +47 -0
  108. package/skills/c-to-rust-implement/references/crate-reference.md +15 -0
  109. package/skills/c-to-rust-implement/references/error-strategies.md +80 -0
  110. package/skills/c-to-rust-implement/references/inline-asm.md +37 -0
  111. package/skills/c-to-rust-plan/SKILL.md +166 -0
  112. package/skills/c-to-rust-plan/references/detection-commands.md +66 -0
  113. package/skills/c-to-rust-test-gen/SKILL.md +130 -0
  114. package/skills/c-to-rust-test-gen/references/proptest-patterns.md +81 -0
  115. package/skills/c-to-rust-test-gen/references/test-porting.md +56 -0
  116. package/skills/c-to-rust-validate/SKILL.md +121 -0
  117. package/skills/everything2rust-audit/SKILL.md +69 -0
  118. package/skills/everything2rust-design/SKILL.md +121 -0
  119. package/skills/everything2rust-design/references/domain-playbooks.md +68 -0
  120. package/skills/everything2rust-design/references/paradigm-map.md +99 -0
  121. package/skills/everything2rust-implement/SKILL.md +101 -0
  122. package/skills/everything2rust-spec/SKILL.md +86 -0
  123. package/skills/everything2rust-spec/references/oracle-strategies.md +96 -0
  124. package/skills/everything2rust-survey/SKILL.md +99 -0
  125. package/skills/everything2rust-test-gen/SKILL.md +68 -0
  126. package/skills/everything2rust-test-gen/references/harness-patterns.md +186 -0
  127. package/skills/everything2rust-validate/SKILL.md +85 -0
  128. package/workflows/c-to-rust.yaml +202 -0
  129. package/workflows/everything2rust.yaml +259 -0
  130. package/workflows/loop.yaml +68 -0
  131. package/workflows/spec.yaml +183 -0
@@ -0,0 +1,85 @@
1
+ ---
2
+ name: everything2rust-validate
3
+ description: 独立 QA 视角对 everything2rust 重构做最终验收。跑全量构建/测试/lint/geiger/覆盖率/smoke,逐能力核对行为契约,逐条验收标准取证,产出 report.md。在 everything2rust 工作流的 verify 步骤触发。
4
+ ---
5
+
6
+ 你是独立 QA,对完成的 Rust 重构做发布前验收。原则:**每条结论都要附你亲手采集的证据**(命令 + 输出片段),不引用之前步骤的自述。发现不达标项立即修复,修完重新取证。
7
+
8
+ ## 输入 / 输出
9
+
10
+ > `<产出目录>` = DO 提示词「产出目录」一节给出的路径(形如 `.ralph-flow/artifacts/<任务摘要>-<后缀>/`)。
11
+
12
+ - 输入:完成的 Rust 项目 + `<产出目录>/plan.json` + `behavior-spec.md` + `golden/` + 源项目路径
13
+ - 输出:`<产出目录>/report.md` — 逐条验收标准的 PASS/FAIL + 证据
14
+
15
+ ## 验收标准与取证方法
16
+
17
+ 在 plan.json `target.output_dir` 下逐条执行:
18
+
19
+ ### 1. 可构建可运行
20
+
21
+ ```bash
22
+ cargo build --release 2>&1 | tail -3 # 零 error
23
+ <plan.json target.smoke_cmd> # 正常启动不 panic,记录输出
24
+ ```
25
+
26
+ ### 2. 测试全绿 + lint 干净
27
+
28
+ ```bash
29
+ cargo test --all 2>&1 | tail -10 # 无 FAILED;统计 passed 数
30
+ grep -rn '#\[ignore' src/ tests/ # 只允许差分测试的 ignore(有标注理由)
31
+ cargo clippy -- -D warnings 2>&1 | tail -3
32
+ ```
33
+
34
+ ### 3. 全量实现无桩
35
+
36
+ ```bash
37
+ grep -rn 'todo!\|unimplemented!\|dbg!' src/ tests/ # 应为空
38
+ jq -r '.capabilities[] | select(.status!="done") | .id' <产出目录>/plan.json # 应为空
39
+ ```
40
+
41
+ 抽查 3-5 个能力的实现:非空函数体、非仅返回默认值。
42
+
43
+ ### 4. Unsafe 在预算内
44
+
45
+ ```bash
46
+ RATIO=$(cargo geiger 2>/dev/null | grep -m1 -F "$(basename "$PWD") " | grep -oE '[0-9]+/[0-9]+' | sed -n '2p')
47
+ U=${RATIO%/*}; T=${RATIO#*/}
48
+ awk -v u="$U" -v t="$T" -v b="<unsafe_budget_pct>" 'BEGIN{ if(t==""||t+0==0){print "geiger 解析失败"; exit 2} r=u*100/t; printf "unsafe expr %d/%d = %.1f%% (target <%s%%)\n",u,t,r,b; exit (r<b?0:1) }'
49
+ grep -rn 'unsafe' src/ | grep -v 'SAFETY' # 每处 unsafe 上一行应有 SAFETY 注释(人工核对输出)
50
+ ```
51
+
52
+ ### 5. 行为等价(核心标准)
53
+
54
+ - golden 语料测试全过(含在 cargo test 里,单独确认对应测试名出现在 passed 列表)
55
+ - 原系统可运行时跑差分:`cargo test -- --ignored 2>&1 | tail -10`
56
+ - 对照 behavior-spec.md 逐能力过一遍 audit 留下的 notes(plan.json)——audit 修复过的点重点复验
57
+ - checklist 能力:核对 `tests/CHECKLIST.md` 的核对记录;能当场验证的抽验 2-3 条
58
+ - 数据格式互通:抽一个格式做双向读写验证
59
+ - 确认无 parity_exceptions 之外的行为偏差;parity_exceptions 逐条确认有 ADR 依据
60
+
61
+ ### 6. 主干路径覆盖
62
+
63
+ ```bash
64
+ cargo llvm-cov --summary-only 2>&1 | tail -5
65
+ ```
66
+
67
+ 覆盖率是参考不是门槛——重点人工确认:核心能力有针对性测试、happy path 和 error path 都有、边界有、确定性核心有 property 测试(对照 test-map.json 抽查)。
68
+
69
+ ## report.md 结构
70
+
71
+ ```markdown
72
+ # everything2rust 验收报告:<项目名>
73
+ ## 概览 — 源系统 → Rust 的一段话总结;能力数、测试数、代码规模
74
+ ## 验收结果 — 7 条标准的 PASS/FAIL 表
75
+ ## 逐条证据 — 每条标准:执行的命令 + 输出片段 + 结论
76
+ ## 行为等价明细 — 逐能力:预言策略 / 测试结果 / audit notes / 复验结论
77
+ ## parity_exceptions — 白名单逐条 + ADR 引用
78
+ ## 遗留与建议 — 未验证项(含原因)、后续改进建议
79
+ ```
80
+
81
+ ## 完成标准
82
+
83
+ - report.md 七条标准全 PASS,每条有亲手采集的证据
84
+ - 发现的不达标项已修复并重新取证
85
+ - 无声明外的行为偏差;checklist 未验证项如实标注原因
@@ -0,0 +1,202 @@
1
+ description: |
2
+ C 项目 → 惯用安全 Rust(binary target):逐模块渐进移植 + TDD,unsafe<10%。
3
+
4
+ adversarial_check:
5
+ timeout_ms: 3600000
6
+ model: "anthropic/claude-opus-4-5"
7
+ steps:
8
+
9
+ - id: setup-env
10
+ desc: 环境配置——安装并校验工具链,fail-fast
11
+ do: |
12
+ 你是搭建 CI 环境的工程师。安装并校验本工作流依赖的全部工具,确保后续步骤不会因缺工具而中途退化。直接执行安装命令,不要只列清单。先探测再决定:已就绪的工具直接复用、只补缺失的(保持幂等)。
13
+
14
+ 必须就绪(缺则安装):
15
+ - Rust 工具链:rustc / cargo(rustup 安装),组件 clippy、rustfmt
16
+ - cargo-geiger:cargo install cargo-geiger --locked。若编译失败,尝试较早版本
17
+ - cargo-audit:cargo install cargo-audit --locked
18
+ - cargo-llvm-cov:cargo install cargo-llvm-cov --locked,并 rustup component add llvm-tools-preview
19
+ - C 工具链与构建系统:编译/运行 C 测试所需(gcc 或 clang、make,若 C 项目用 cmake/meson 则一并装上)
20
+ - 文本/算术辅助:jq、bc
21
+
22
+ 安装后把每个工具的版本写入 env.md。
23
+ 任一必须工具无法安装时,如实说明卡点,不要输出 done。
24
+ input: 无
25
+ output: env.md(工具版本快照);全部必须工具可调用
26
+ check: |
27
+ 自主验证:
28
+ 1. env.md 存在,列出各工具版本(无占位符)
29
+ 2. cargo geiger --version、cargo clippy --version、cargo audit --version、cargo llvm-cov --version 均正常输出
30
+ 3. jq --version、bc --version 均正常输出
31
+ on_pass: analyze
32
+ on_fail: setup-env
33
+ max_fail_count: 5
34
+
35
+ - id: analyze
36
+ desc: C 项目分析——探测布局/测试框架/构建系统,提取 API,依赖分层,产出 plan.json
37
+ do: |
38
+ 使用 c-to-rust-plan skill(在可用 skill 列表中按 location 读取它)。
39
+ 你是接手陌生 C 代码库的工程师。先探测项目真实布局(不要假设 src/inc),
40
+ 识别测试框架与构建系统,再提取公开/内部 API、构建依赖分层、产出 plan.json + api-inventory.md + function-contracts.md。
41
+ input: C 项目源码目录路径
42
+ output: plan.json + api-inventory.md + function-contracts.md
43
+ check: |
44
+ 自主验证:
45
+ 1. plan.json 是合法 JSON,modules 覆盖每个非测试/非 vendor 的 .c 源文件
46
+ 2. layers 是无环分层,每个 depends_on 只引用更低层
47
+ 3. 每个模块含 public_functions、internal_functions、difficulty、recommended_crates、c_advanced_features
48
+ 4. plan.json 含 output_name、output_dir、source_c_dir、c_test_dir、project_layout、test_framework、build_system、conditional_compilation、inline_asm_modules、completed_modules 字段
49
+ 5. project_layout 真实反映探测结果(非硬编码 src/inc)
50
+ 6. output_dir 是绝对路径且位于工作区内
51
+ 7. api-inventory.md 列出每个 C 公开函数及拟议 Rust 签名
52
+ 8. function-contracts.md 对复杂函数记录了语义要点
53
+ on_pass: baseline
54
+ on_fail: analyze
55
+ max_fail_count: 5
56
+
57
+ - id: baseline
58
+ desc: TDD 红阶段——Rust binary 骨架、API 桩、移植全部 C 测试、属性测试
59
+ do: |
60
+ 使用 c-to-rust-test-gen skill(在可用 skill 列表中按 location 读取它)。
61
+ 严格 RED:先确认 C 测试套件全绿,再建 binary target Rust 项目骨架,写好类型与错误,
62
+ 把每个 C 测试移植成 Rust #[test](断言语义精确保留,不合并降级)。
63
+ 每个模块补属性测试(proptest)。所有桩用 todo!("module::fn") 占位。
64
+ 目标状态:cargo build 通过,cargo test 因 todo!() 而 FAILED。
65
+ input: plan.json + C 源码 + C 测试
66
+ output: |
67
+ <output_name>_rust/ — Cargo binary 项目(src/main.rs + lib.rs + types.rs + error.rs + 各模块桩,
68
+ tests/oracle_*.rs + prop_*.rs)
69
+ check: |
70
+ 在 output_dir 自主验证:
71
+ 1. Cargo.toml 是 binary target,含 thiserror,dev-deps 含 proptest + rstest
72
+ 2. src/types.rs 字段已完整定义(非桩);src/error.rs 含全部错误变体
73
+ 3. lib.rs 声明了 plan.json 中的全部模块
74
+ 4. 每个 C 测试函数都有对应 Rust #[test],断言语义精确保留
75
+ 5. cargo build 通过;cargo test 出现 FAILED 且为 todo!() panic(不是编译错误)
76
+ 6. 每个 public_functions + internal_functions 都有 todo!("名字") 桩
77
+ 7. tests/ 含 oracle_*.rs 和 prop_*.rs,每个模块都有对应测试文件
78
+ on_pass: impl-core
79
+ on_fail: baseline
80
+ max_fail_count: 5
81
+
82
+ - id: impl-core
83
+ desc: 实现核心层(trivial+owned)——自底向上,每模块 TDD 转绿 + commit
84
+ do: |
85
+ 使用 c-to-rust-implement skill(在可用 skill 列表中按 location 读取它),范围 = difficulty 为 trivial|owned 的模块。
86
+ 你是工程师:读 C 原实现理解语义,写惯用安全 Rust,自底向上按 layer 顺序逐模块实现。
87
+ 编译器/测试报错就是自愈信号——用 systematic-debugging 定位根因后修复。
88
+ 对照 plan.json 逐函数确认:每个 public_functions + internal_functions 都有对应的 Rust 实现(非桩、非空函数体)。
89
+ 每模块通过后 git commit(impl-core: <module>)。
90
+ input: plan.json + baseline Rust 项目 + C 源码
91
+ output: trivial|owned 模块全部实现,对应测试转绿,每模块一个 commit
92
+ check: |
93
+ 在 output_dir 自主验证:
94
+ 1. cargo build 通过
95
+ 2. trivial|owned 模块的全部测试通过
96
+ 3. 已实现模块内无 todo!()/unimplemented!()
97
+ 4. 每个已实现模块有 impl-core: commit
98
+ 5. cargo geiger Expressions used/total < 10%
99
+ on_pass: audit-core
100
+ on_fail: impl-core
101
+ max_fail_count: 15
102
+
103
+ - id: audit-core
104
+ desc: 独立审查 core 层——逐函数验证完整性与语义等价
105
+ do: |
106
+ 使用 c-to-rust-audit skill(在可用 skill 列表中按 location 读取它),范围 = difficulty 为 trivial|owned 的模块。
107
+ 你是审计师:对照 plan.json 逐模块逐函数自查 core 层的实现完整性和语义正确性。
108
+ 对照 C 原实现和 function-contracts.md,确认每个函数的 Rust 版本行为等价。
109
+ 发现遗漏或偏差立即修复。不要等到 CHECK 来发现问题。
110
+ input: plan.json + Rust 项目 + C 源码 + function-contracts.md
111
+ output: 所有 core 层函数确认完整且语义等价
112
+ check: |
113
+ 你是独立审计师。审查 core 层(trivial|owned 模块)的 C→Rust 翻译质量。
114
+
115
+ 对照 plan.json,用你自己的方法逐模块逐函数审查。
116
+ 判断标准:给定相同输入,Rust 实现是否产生与 C 相同的输出和副作用。
117
+ 任一函数缺失或语义不等价 → FAIL。
118
+ on_pass: impl-full
119
+ on_fail: impl-core
120
+ max_fail_count: 10
121
+
122
+ - id: impl-full
123
+ desc: 实现全量剩余层(stateful+callback+global)——分批推进,集成全绿
124
+ do: |
125
+ 使用 c-to-rust-implement skill(在可用 skill 列表中按 location 读取它),范围 = 剩余模块(stateful|callback|global)。
126
+ 同样的工程师循环:理解 C 语义 → 写安全 Rust → 测试转绿 → systematic-debugging。
127
+ 若模块函数数较多,分批实现,每批独立 commit。
128
+ 逐函数对照 plan.json,确保每个 public_functions + internal_functions 都有对应实现。
129
+ 全部模块完成后做集成全量构建与全套测试。
130
+ input: plan.json + 已实现 core 的 Rust 项目 + C 源码
131
+ output: 全部模块实现,cargo build/test/clippy 全过,unsafe < 10%
132
+ check: |
133
+ 在 output_dir 自主验证:
134
+ 1. cargo build --release 通过
135
+ 2. cargo test --all 全绿,无 FAILED,无 #[ignore]
136
+ 3. cargo clippy -- -D warnings 无 error
137
+ 4. src/ 与 tests/ 无 todo!()/unimplemented!()/dbg!() 残留
138
+ 5. 每个模块都有 impl-core: 或 impl-full: commit
139
+ 6. cargo geiger Expressions used/total < 10%
140
+ 7. cargo run --release -- --help 正常启动
141
+ on_pass: audit-full
142
+ on_fail: impl-full
143
+ max_fail_count: 25
144
+
145
+ - id: audit-full
146
+ desc: 独立审查全量翻译——逐函数验证完整性、语义等价
147
+ do: |
148
+ 使用 c-to-rust-audit skill(在可用 skill 列表中按 location 读取它),范围 = 全部模块。
149
+ 你是审计师:对照 plan.json 逐模块逐函数自查全量实现。重点关注:
150
+ - 状态转换和多阶段操作是否被完整保留
151
+ - 错误路径和边界条件是否被保留
152
+ - 资源管理是否正确替换
153
+ - 回调/函数指针的控制反转是否正确建模
154
+ - 数据结构布局是否与 C 一致
155
+ 对照 C 原实现和 function-contracts.md,逐函数验证语义等价性。
156
+ 发现遗漏或偏差立即修复。
157
+ input: plan.json + Rust 项目 + C 源码 + function-contracts.md
158
+ output: 全部函数确认完整且语义等价
159
+ check: |
160
+ 你是独立审计师。审查全量翻译质量,重点关注 stateful/callback/global 模块。
161
+
162
+ 对照 plan.json,用你自己的方法逐函数审查。用你的专业判断评估每个函数翻译的语义等价性。
163
+ 不要只检查函数是否存在——深入检查实现是否正确、是否完整。
164
+ 任一函数缺失或语义不等价 → FAIL。
165
+ on_pass: verify
166
+ on_fail: impl-full
167
+ max_fail_count: 15
168
+
169
+ - id: verify
170
+ desc: 最终验收——对照验收标准逐条取证,产出 report.md
171
+ do: |
172
+ 使用 c-to-rust-validate skill(在可用 skill 列表中按 location 读取它)。
173
+ 以独立 QA 视角做最终验收:跑全量构建/测试/lint/geiger/覆盖率,逐条收集证据,产出 report.md。
174
+ 发现不达标项立即修复。
175
+ input: 完成的 Rust 项目 + plan.json + C 项目路径
176
+ output: report.md(每条验收标准附证据)
177
+ check: |
178
+ 你是独立验收审计师。逐条验证以下标准是否满足。
179
+ 不要信任 report.md 的结论——自主探索项目,独立做出判断。
180
+
181
+ ## 验收标准
182
+
183
+ 1. **可执行文件**:cargo build --release 产出二进制文件,cargo run --release -- --help 正常启动不 panic。
184
+
185
+ 2. **测试框架**:所有测试使用 Rust 主流测试框架(#[test]、rstest、proptest 等),不依赖外部 C 测试框架或脚本。
186
+
187
+ 3. **源码全量翻译**:src/ 下全部 .rs 文件为完整 Rust 实现。无 todo!()、unimplemented!()、空函数体、仅返回默认值的占位实现。
188
+
189
+ 4. **编译与测试通过**:cargo build --release 零 error。cargo test --all 全部通过,无 FAILED,无 #[ignore]。
190
+
191
+ 5. **Unsafe 比例 < 10%**:cargo geiger 度量,本项目 crate 的 Expressions used/total < 10%。每处 unsafe 须有 // SAFETY: 注释。
192
+
193
+ 6. **业务逻辑 100% 不受破坏**:对照 plan.json 中每个函数,判断 C 原实现与 Rust 实现的语义等价性。给定相同输入,产生相同输出和相同副作用。任一函数语义不等价 → FAIL。
194
+
195
+ 7. **单元测试覆盖主干路径**:核心函数有针对性测试。happy path 和 error path 均有覆盖。边界条件有测试。有 property-based 测试。
196
+
197
+ ## 输出
198
+
199
+ 逐条标准报告 PASS/FAIL,附独立验证证据。全部 PASS → 工作流通过。
200
+ on_pass: done
201
+ on_fail: impl-core
202
+ max_fail_count: 10
@@ -0,0 +1,259 @@
1
+ description: |
2
+ 任意软件 → 惯用安全 Rust:语言无关、领域无关(CLI/库/服务/游戏/GUI 等)。
3
+ 以能力(capability)+ 行为契约 + 预言(oracle)为等价单位,不做函数一比一复刻。
4
+ grill 式方案设计(ADR)+ TDD 增量实现 + 独立审计。
5
+ design 步骤为手动步骤:DO 完成后暂停,供人工审查技术选型与架构;运行 /ralphflow-continue
6
+ 确认后才进入独立验证,通过后自动继续。如需全自动运行,删除下方 manual_step 配置即可。
7
+
8
+ adversarial_check:
9
+ timeout_ms: 3600000
10
+ model: "anthropic/claude-opus-4-5"
11
+ manual_step:
12
+ - design
13
+
14
+ steps:
15
+
16
+ - id: setup-env
17
+ desc: 环境配置——安装并校验 Rust 侧工具链,fail-fast
18
+ do: |
19
+ 你是搭建 CI 环境的工程师。安装并校验本工作流依赖的 Rust 侧工具,确保后续步骤不会因缺工具而中途退化。直接执行安装命令,不要只列清单。先探测再决定:已就绪的工具直接复用、只补缺失的(保持幂等)。
20
+
21
+ 必须就绪(缺则安装):
22
+ - Rust 工具链:rustc / cargo(rustup 安装),组件 clippy、rustfmt
23
+ - cargo-geiger:cargo install cargo-geiger --locked。若编译失败,尝试较早版本
24
+ - cargo-audit:cargo install cargo-audit --locked
25
+ - cargo-llvm-cov:cargo install cargo-llvm-cov --locked,并 rustup component add llvm-tools-preview
26
+ - 文本/算术辅助:jq、bc
27
+
28
+ 源语言工具链(Node/Python/JVM/Go/编译器等)这一步不装——survey 步骤探测出源语言后按需安装。
29
+
30
+ 安装后把每个工具的版本写入 env.md。
31
+ 任一必须工具无法安装时,如实说明卡点,不要输出 done。
32
+ input: 无
33
+ output: env.md(工具版本快照);全部必须工具可调用
34
+ check: |
35
+ 自主验证:
36
+ 1. env.md 存在,列出各工具版本(无占位符)
37
+ 2. cargo geiger --version、cargo clippy --version、cargo audit --version、cargo llvm-cov --version 均正常输出
38
+ 3. jq --version、bc --version 均正常输出
39
+ on_pass: survey
40
+ on_fail: setup-env
41
+ max_fail_count: 5
42
+
43
+ - id: survey
44
+ desc: 系统勘察——探测语言/领域/构建/运行,让原系统真实跑起来,产出能力清单
45
+ do: |
46
+ 使用 everything2rust-survey skill(在可用 skill 列表中按 location 读取它)。
47
+ 你是接手陌生代码库的工程师。先探测源项目的真实形态:语言、领域(CLI/库/服务/游戏/GUI/…)、
48
+ 构建系统、测试框架、外部接口、依赖。然后安装源语言运行时,**让原系统真实构建、运行、跑测试**——
49
+ 它是后续行为等价验证的预言(oracle),跑不起来的系统无法做高质量重构。
50
+ 产出 system-map.md(系统全貌)、capabilities.md(能力清单)、oracle-evidence.md(原系统可运行的实证)。
51
+ input: 源项目路径(来自用户任务描述)
52
+ output: system-map.md + capabilities.md + oracle-evidence.md
53
+ check: |
54
+ 自主验证:
55
+ 1. system-map.md 存在,含:源语言、领域判定、构建/测试/运行命令、外部接口清单、依赖清单(均来自真实探测,无占位符)
56
+ 2. oracle-evidence.md 含原系统构建/运行/测试的**真实命令输出片段**;若原系统确实无法运行,如实记录了原因和替代预言来源(已有测试套件/文档/样例数据)
57
+ 3. capabilities.md 列出能力清单,每条能力有:一句话描述、源码位置引用、外部可观察的行为
58
+ 4. 能力清单覆盖 system-map.md 外部接口清单中的每一项(无遗漏的接口)
59
+ 5. 能力粒度合理:不是逐函数罗列,也不是一条"实现整个系统"
60
+ on_pass: spec
61
+ on_fail: survey
62
+ max_fail_count: 5
63
+
64
+ - id: spec
65
+ desc: 行为契约——逐能力定义必须保留的可观察行为,选定预言策略,采集 golden 语料
66
+ do: |
67
+ 使用 everything2rust-spec skill(在可用 skill 列表中按 location 读取它)。
68
+ 你是规格工程师。对 capabilities.md 中每个能力写行为契约:输入/输出/副作用/不变量/错误路径。
69
+ 为每个能力选定预言策略(ported-tests / golden / differential / property / checklist),
70
+ 并**实际运行原系统采集 golden 语料**到 golden/——这些语料是后续验收测试的判据。
71
+ 契约描述"外部可观察什么",不描述"内部怎么实现"——这是允许 Rust 重新设计架构的前提。
72
+ input: capabilities.md + system-map.md + 源项目
73
+ output: behavior-spec.md + golden/(语料目录)
74
+ check: |
75
+ 自主验证:
76
+ 1. behavior-spec.md 覆盖 capabilities.md 中每个能力,无 TBD/待补占位
77
+ 2. 每个能力标注预言策略,取值 ∈ {ported-tests, golden, differential, property, checklist}
78
+ 3. 预言为 golden/differential 的能力,golden/ 下有对应语料文件;抽查语料内容与原系统行为一致(语料含采集命令元数据,可复现)
79
+ 4. 预言为 checklist(无法自动判定)的能力占比合理,且每个都写明了为何无法自动判定
80
+ 5. 契约只描述可观察行为(输入/输出/副作用/不变量/错误路径),不锁定内部实现细节
81
+ 6. 抽查 2-3 个契约:对照源码验证描述准确(错误路径、边界行为没有想当然)
82
+ on_pass: design
83
+ on_fail: spec
84
+ max_fail_count: 5
85
+
86
+ - id: design
87
+ desc: 方案设计——grill 式拷问设计树每个分支,技术选型 ADR,产出 design.md + decisions.md + plan.json
88
+ do: |
89
+ 使用 everything2rust-design skill(在可用 skill 列表中按 location 读取它)。
90
+ 你是架构师。对设计树的每个分支做 grill 式自我拷问:目标形态、总体架构、每个子系统的
91
+ 技术选型、迁移顺序、测试策略、性能目标、unsafe 政策、范围取舍。每个问题:给出选项、
92
+ 查证据(源码/领域 playbook/crate 生态)、下结论、记 ADR。能查证据回答的不留给拍脑袋。
93
+ 这不是函数级翻译计划——是为 Rust 重新设计的架构,以行为契约为约束。
94
+ 产出 design.md(架构方案)、decisions.md(ADR 集)、plan.json(机器可读增量计划)。
95
+ input: behavior-spec.md + system-map.md + capabilities.md + 源项目
96
+ output: design.md + decisions.md + plan.json
97
+ check: |
98
+ 自主验证:
99
+ 1. plan.json 是合法 JSON,含 source、target、stack、capabilities、increments、parity_exceptions 字段
100
+ 2. behavior-spec.md 中每个能力在 plan.json capabilities 中恰好归入一个 increment
101
+ 3. increments 第一项是 walking-skeleton(端到端可运行的最小闭环),每个 increment 有 phase(core|full) 和 exit_criteria
102
+ 4. stack 每项选型在 decisions.md 有对应 ADR(问题/选项/选择/理由/推翻条件)
103
+ 5. decisions.md 覆盖关键分支:目标形态、总体架构、每个子系统选型、迁移顺序、测试策略、unsafe 政策;每个 ADR 的理由引用了证据(源码事实/契约要求/crate 现状),不是空断言
104
+ 6. parity_exceptions 每条有理由和 ADR 引用;design.md 中没有 parity_exceptions 之外的行为改变计划
105
+ 7. design.md 的架构覆盖全部能力,无过度设计(没有契约不要求的层和抽象)
106
+ 8. target.output_dir 是工作区内绝对路径;target.smoke_cmd 已定义且与领域匹配
107
+ on_pass: baseline
108
+ on_fail: design
109
+ max_fail_count: 5
110
+
111
+ - id: baseline
112
+ desc: TDD 红阶段——Rust 项目骨架、验收测试(golden harness + 属性测试)、全桩
113
+ do: |
114
+ 使用 everything2rust-test-gen skill(在可用 skill 列表中按 location 读取它)。
115
+ 严格 RED:按 plan.json target 建 Rust 项目骨架(类型/错误/模块结构),
116
+ 为每个能力写验收测试——golden 语料驱动的 harness、从原测试套件移植的断言、属性测试。
117
+ 测试断言忠实于 behavior-spec,不弱化。所有实现用 todo!() 占位。
118
+ 产出 test-map.json 记录能力→测试的映射。
119
+ 目标状态:cargo build 通过,cargo test 因 todo!() 而 FAILED。
120
+ input: plan.json + behavior-spec.md + golden/ 语料 + 源项目测试套件
121
+ output: |
122
+ target.output_dir 下的 Cargo 项目(骨架 + 全桩 + tests/);
123
+ test-map.json(能力 id → 测试名列表)
124
+ check: |
125
+ 在 plan.json 的 target.output_dir 自主验证:
126
+ 1. Cargo 项目形态与 plan.json target 一致(bin/lib/workspace),依赖与 stack 选型一致
127
+ 2. test-map.json 把每个能力映射到至少 1 个测试;映射的测试在 tests/ 或 src/ 中真实存在
128
+ 3. golden 语料被 harness 实际读取(测试代码引用 golden/ 或已复制的语料路径),不是硬编码期望值
129
+ 4. 抽查 2-3 个测试:断言忠实于 behavior-spec 的契约(精确断言,没有降级为"不 panic 即可")
130
+ 5. cargo build 通过;cargo test 出现 FAILED 且失败源自 todo!() panic(不是编译错误)
131
+ 6. 每个 increment 的能力都有对应桩(todo!("...")),模块结构与 design.md 一致
132
+ on_pass: impl-core
133
+ on_fail: baseline
134
+ max_fail_count: 5
135
+
136
+ - id: impl-core
137
+ desc: 实现 core 增量(walking-skeleton + 核心域)——逐增量 TDD 转绿 + commit
138
+ do: |
139
+ 使用 everything2rust-implement skill(在可用 skill 列表中按 location 读取它),范围 = plan.json 中 phase 为 core 的增量。
140
+ 你是工程师:读原实现理解行为语义,写惯用安全 Rust,按 increments 顺序逐增量转绿。
141
+ 第一个增量是 walking-skeleton——先让系统端到端跑起来(哪怕功能最少),再填充核心域。
142
+ 编译器/测试报错就是自愈信号——用 systematic-debugging 定位根因后修复。
143
+ 每增量达到 exit_criteria 后 git commit(e2r-core: <increment>),更新 plan.json 能力 status。
144
+ input: plan.json + baseline Rust 项目 + 源项目 + behavior-spec.md
145
+ output: core 增量全部实现,对应测试转绿,smoke_cmd 可运行,每增量一个 commit
146
+ check: |
147
+ 在 plan.json 的 target.output_dir 自主验证:
148
+ 1. cargo build 通过
149
+ 2. 对照 test-map.json:phase=core 增量所辖能力的全部测试通过
150
+ 3. 已完成能力在 plan.json 中 status=done,对应实现非桩(无 todo!()/unimplemented!()、非空函数体)
151
+ 4. 每个 core 增量有 e2r-core: commit
152
+ 5. cargo geiger 本 crate Expressions used/total < plan.json target.unsafe_budget_pct(默认 10%)
153
+ 6. 执行 plan.json target.smoke_cmd 正常启动不 panic
154
+ on_pass: audit-core
155
+ on_fail: impl-core
156
+ max_fail_count: 15
157
+
158
+ - id: audit-core
159
+ desc: 独立审计 core——逐能力对照行为契约验证等价性
160
+ do: |
161
+ 使用 everything2rust-audit skill(在可用 skill 列表中按 location 读取它),范围 = phase 为 core 的增量。
162
+ 你是审计师:对照 behavior-spec.md 逐能力自查 core 实现。判据是行为契约,不是代码形状——
163
+ 给定契约中的输入,Rust 实现是否产生契约要求的输出和副作用?错误路径和边界是否保留?
164
+ golden 语料是否全部通过?发现偏差立即修复。不要等 CHECK 来发现问题。
165
+ input: plan.json + behavior-spec.md + golden/ + Rust 项目 + 源项目
166
+ output: core 增量所有能力确认与行为契约等价
167
+ check: |
168
+ 你是独立审计师。审查 core 增量(plan.json 中 phase=core)的重构质量。
169
+
170
+ 对照 behavior-spec.md,用你自己的方法逐能力审查。
171
+ 判断标准:给定契约中描述的输入,Rust 实现是否产生契约要求的可观察行为
172
+ (输出、副作用、错误路径、不变量)。允许的偏差仅限 plan.json parity_exceptions 中列出的。
173
+ 必要时运行原系统与 Rust 版本做差分对比。
174
+ 任一能力缺失或行为不等价 → FAIL。
175
+ on_pass: impl-full
176
+ on_fail: impl-core
177
+ max_fail_count: 10
178
+
179
+ - id: impl-full
180
+ desc: 实现全量剩余增量——分批推进,集成全绿
181
+ do: |
182
+ 使用 everything2rust-implement skill(在可用 skill 列表中按 location 读取它),范围 = plan.json 中 phase 为 full 的增量。
183
+ 同样的工程师循环:理解原行为 → 写安全 Rust → 测试转绿 → systematic-debugging。
184
+ 增量大时分批实现,每批独立 commit(e2r-full: <increment> batch n/m)。
185
+ 全部增量完成后做集成全量构建与全套测试,clippy 清零。
186
+ input: plan.json + 已完成 core 的 Rust 项目 + 源项目 + behavior-spec.md
187
+ output: 全部增量实现,cargo build/test/clippy 全过,unsafe < 预算
188
+ check: |
189
+ 在 plan.json 的 target.output_dir 自主验证:
190
+ 1. cargo build --release 通过
191
+ 2. cargo test --all 全绿,无 FAILED,无 #[ignore]
192
+ 3. cargo clippy -- -D warnings 无 error
193
+ 4. src/ 与 tests/ 无 todo!()/unimplemented!()/dbg!() 残留
194
+ 5. plan.json 全部能力 status=done;每个增量都有 e2r-core: 或 e2r-full: commit
195
+ 6. cargo geiger 本 crate Expressions used/total < plan.json target.unsafe_budget_pct
196
+ 7. 执行 plan.json target.smoke_cmd 正常启动不 panic
197
+ on_pass: audit-full
198
+ on_fail: impl-full
199
+ max_fail_count: 25
200
+
201
+ - id: audit-full
202
+ desc: 独立审计全量——逐能力验证行为等价,重点状态/并发/交互类能力
203
+ do: |
204
+ 使用 everything2rust-audit skill(在可用 skill 列表中按 location 读取它),范围 = 全部增量。
205
+ 你是审计师:对照 behavior-spec.md 逐能力自查全量实现。重点关注:
206
+ - 有状态能力的状态转换和多阶段操作是否完整保留
207
+ - 错误路径和边界条件是否保留
208
+ - 并发/异步行为的语义是否等价(顺序保证、超时、取消)
209
+ - 交互类能力(UI/游戏循环)的 checklist 项是否逐条核对
210
+ - 数据格式(文件/协议/存档)是否与原系统互通
211
+ 发现偏差立即修复。偏差仅允许出现在 parity_exceptions 中。
212
+ input: plan.json + behavior-spec.md + golden/ + Rust 项目 + 源项目
213
+ output: 全部能力确认与行为契约等价
214
+ check: |
215
+ 你是独立审计师。审查全量重构质量,重点关注有状态、并发、交互类能力。
216
+
217
+ 对照 behavior-spec.md,用你自己的方法逐能力审查。不要只检查测试是否通过——
218
+ 深入检查实现的行为是否与契约一致、是否完整。必要时运行原系统与 Rust 版本做差分对比。
219
+ checklist 类能力逐条人工核对证据。
220
+ 允许的偏差仅限 plan.json parity_exceptions。任一能力缺失或行为不等价 → FAIL。
221
+ on_pass: verify
222
+ on_fail: impl-full
223
+ max_fail_count: 15
224
+
225
+ - id: verify
226
+ desc: 最终验收——对照验收标准逐条取证,产出 report.md
227
+ do: |
228
+ 使用 everything2rust-validate skill(在可用 skill 列表中按 location 读取它)。
229
+ 以独立 QA 视角做最终验收:跑全量构建/测试/lint/geiger/覆盖率/smoke,
230
+ 逐能力核对行为契约,逐条收集证据,产出 report.md。
231
+ 发现不达标项立即修复。
232
+ input: 完成的 Rust 项目 + plan.json + behavior-spec.md + 源项目路径
233
+ output: report.md(每条验收标准附证据)
234
+ check: |
235
+ 你是独立验收审计师。逐条验证以下标准是否满足。
236
+ 不要信任 report.md 的结论——自主探索项目,独立做出判断。
237
+
238
+ ## 验收标准
239
+
240
+ 1. **可构建可运行**:cargo build --release 零 error;执行 plan.json target.smoke_cmd 正常启动不 panic。
241
+
242
+ 2. **测试框架**:所有测试使用 Rust 原生测试设施(#[test]、rstest、proptest、insta 等),不依赖源语言运行时(差分测试 harness 除外,且差分 harness 不阻塞 cargo test)。
243
+
244
+ 3. **全量实现**:src/ 下全部 .rs 为完整实现。无 todo!()、unimplemented!()、空函数体、仅返回默认值的占位实现。
245
+
246
+ 4. **测试全绿**:cargo test --all 全部通过,无 FAILED,无 #[ignore]。cargo clippy -- -D warnings 无 error。
247
+
248
+ 5. **Unsafe 在预算内**:cargo geiger 度量,本 crate Expressions used/total < plan.json target.unsafe_budget_pct(默认 10%)。每处 unsafe 有 // SAFETY: 注释。
249
+
250
+ 6. **行为等价**:对照 behavior-spec.md 逐能力判断可观察行为等价性——输出、副作用、错误路径、不变量、数据格式互通。golden 语料测试全部通过。偏差仅限 plan.json parity_exceptions 中声明并有 ADR 依据的项。任一未声明的行为偏差 → FAIL。
251
+
252
+ 7. **主干路径覆盖**:核心能力有针对性测试。happy path 和 error path 均有覆盖。边界条件有测试。确定性核心有 property-based 测试。
253
+
254
+ ## 输出
255
+
256
+ 逐条标准报告 PASS/FAIL,附独立验证证据。全部 PASS → 工作流通过。
257
+ on_pass: done
258
+ on_fail: impl-core
259
+ max_fail_count: 10
@@ -0,0 +1,68 @@
1
+ description: 检查点驱动的循环执行:先把需求拆解为检查点清单,再循环执行直到全部通过
2
+
3
+ manual_step:
4
+
5
+ adversarial_check:
6
+ # model: anthropic/claude-sonnet-4-5 # 可选:验证模型("provider/model" 或 {providerID, modelID});不填则用 ralph-check agent 默认模型
7
+ timeout_ms: 3600000 # 60 分钟(上限)
8
+
9
+ steps:
10
+ - id: checkpoints
11
+ desc: 拆解用户需求为检查点清单
12
+ do: |
13
+ 仔细分析用户需求,产出检查点清单。只做分析和拆解,**不要开始实现任务本身**。
14
+
15
+ 输出 `checkpoints.md`:
16
+ 1. 逐句阅读用户需求,把每个要求拆成独立的检查点,绝对细致,不遗漏任何要点
17
+ 2. 补充隐含要求的检查点(如:构建通过、现有测试不回归、无残留 TODO/调试代码)
18
+ 3. 每个检查点必须是可独立验证的客观事实(如"函数 X 对输入 Y 返回 Z"、"文件 W 存在且包含 V"),
19
+ 禁止模糊表述(如"代码质量好"、"功能正常")
20
+ 4. 每个检查点标注**验证方式**:跑哪条命令、看哪个文件、运行哪个测试
21
+ 5. 格式:`- [ ] CP-<编号>: <检查点描述> | 验证方式: <具体命令或方法>`
22
+ input: 用户输入的任务描述
23
+ output: "checkpoints.md"
24
+ check: |
25
+ 对照用户需求逐句核对 checkpoints.md:
26
+ 1. 用户需求中每一个明确要求都有对应检查点,无遗漏
27
+ 2. 隐含要求已覆盖(构建通过、测试不回归等)
28
+ 3. 每个检查点是可验证的客观事实,无模糊表述
29
+ 4. 每个检查点都标注了具体可执行的验证方式
30
+ 任何一条不满足即不通过,并指出缺失或含糊的具体条目。
31
+ on_pass: loop
32
+ on_fail: checkpoints
33
+ max_fail_count: 5
34
+
35
+ - id: loop
36
+ desc: 循环执行任务直到所有检查点通过
37
+ do: |
38
+ 按 `checkpoints.md` 执行任务。
39
+
40
+ 你需要:
41
+ 1. 逐项完成检查点,每完成一项按其标注的验证方式自验,
42
+ 然后把 `- [ ]` 改为 `- [x]` 并在该行追加验证证据(命令输出摘要或文件位置)
43
+ 2. 实现过程中发现清单遗漏的要求,先在 checkpoints.md 中追加新检查点,再实现它
44
+ 3. 遇到问题主动解决,不要跳过或放弃
45
+ input: "checkpoints.md + 用户任务描述"
46
+ output: 所有检查点完成的实现 + 全部打勾的 checkpoints.md
47
+ check: |
48
+ 你是一个挑剔的测试工程师:你的目标不是确认任务完成,而是想办法证明它没完成。
49
+
50
+ 第一步:逐条验证检查点
51
+ - 对每个检查点,执行其标注的验证方式,亲自确认事实成立
52
+ - 不要相信打勾状态和记录的证据,必须自己重新验证
53
+ - 存在未打勾的检查点直接不通过
54
+
55
+ 第二步:抽查清单完整性
56
+ - 对照用户需求快速核对 checkpoints.md 是否有遗漏的要求
57
+ - 发现遗漏即不通过,并指出遗漏的具体要求
58
+
59
+ 第三步:挑剔地审查本轮变更
60
+ - 用 git diff 查看本次变更涉及的文件,以挑剔测试工程师的视角自由发挥,
61
+ 设法找出能让它出问题的场景
62
+ - 只审查变更涉及的文件,不要扩大到整个项目
63
+
64
+ 通过条件:所有检查点验证通过 + 清单无遗漏 + 挑剔审查未发现实在的问题。
65
+ 不通过条件:任一检查点失败、清单有遗漏、或发现实在的 bug(说明触发场景)。
66
+ on_pass: done
67
+ on_fail: loop
68
+ max_fail_count: 100