补充发布账本损坏错误验证

验证损坏幂等账本不会静默生成新键
This commit is contained in:
kdletters
2026-10-06 10:56:50 +08:00
parent deb89e038e
commit 153988b3df
2 changed files with 18 additions and 0 deletions
@@ -469,6 +469,23 @@ mod tests {
let _ = fs::remove_dir_all(&dir);
}
#[test]
fn corrupt_attempt_ledger_returns_detail_instead_of_starting_a_new_attempt() {
let dir = fixture_dir("corrupt");
fs::write(
game_publish_attempt_path(&dir),
br#"{"schemaVersion":"agc-game-publish-attempts.v1","attempts":["bad"]}"#,
)
.expect("write corrupt ledger");
let error = resolve_game_publish_root_key(
&dir,
intent("user-1", "https://dev.test", "proj-1", &"a".repeat(64)),
)
.unwrap_err();
assert!(error.contains("解析发布尝试账本失败"), "{error}");
let _ = fs::remove_dir_all(&dir);
}
#[test]
fn ledger_only_holds_identifiers_and_summaries() {
let dir = fixture_dir("shape");
@@ -101,4 +101,5 @@ DirectProject 回合失败在确认不是客户端内部不可归类故障时,
- 发布尝试账本和工作区偏好文件原先把损坏、权限、类型和 JSON 解析失败当成空账本/默认偏好;现只有文件不存在才使用默认,其他读取错误沿发布幂等和建项目录命令返回具体正文。
- 插件主机扫描工作区、读取进程状态、停止插件和禁用插件时原先吞掉目录项/`try_wait`/kill/wait 错误;现保留插件状态错误并阻止“停止失败却显示已禁用”,正常主动 kill 的非零退出码不再误报。
- 插件进程 stderr 原先使用 `Stdio::null()`,即使进程退出也只能显示退出码;现以有界脱敏 sidecar 保留插件 stderr,并在退出状态中附带正文。
- 新增发布尝试账本损坏回归:损坏记录现在阻止生成新的根幂等键,并返回账本 JSON 解析正文,避免静默重复发布。
- 首页建项/打开项目读取本地 revision 失败原先吞成 `null` 并继续进入项目;现保留降级进入行为,同时把 IPC/文件读取正文写入首页状态。