From 747e99e56bf9241934172a46b9445e4b5df9bc5b Mon Sep 17 00:00:00 2001 From: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> Date: Fri, 16 Oct 2026 15:25:36 +0800 Subject: [PATCH 1/2] fix(recovery): retain captured authority checkpoints Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --- .../state-recovery-settings.tsx | 8 +++++++- .../configuration-backup.mjs | 18 +++++++++++++----- loopx/control_plane/state_recovery.ts | 1 + .../control_plane/state_recovery_contract.ts | 8 ++++++++ loopx/control_plane/state_recovery_io.py | 5 +++++ tests/control_plane_ts/state_recovery.test.ts | 19 +++++++++++++++++++ tests/test_state_recovery.py | 18 ++++++++++++++++++ 7 files changed, 71 insertions(+), 6 deletions(-) diff --git a/apps/presentation/dashboard/src/features/personal-workspace/state-recovery-settings.tsx b/apps/presentation/dashboard/src/features/personal-workspace/state-recovery-settings.tsx index 6e3b0c6412..ab3541b923 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/state-recovery-settings.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/state-recovery-settings.tsx @@ -112,7 +112,13 @@ export function StateRecoverySettings() { {audit.measurements ?
{zh ? "归档字节" : "Archive bytes"}: {audit.measurements.archive_bytes.toLocaleString(locale)} · {zh ? "普通文件字节" : "Regular file bytes"}: {audit.measurements.regular_file_bytes.toLocaleString(locale)}
{zh ? "归档检查与复制" : "Archive checks and copy"}: {audit.measurements.archive_processing_ms.toLocaleString(locale)} ms · {zh ? "记录读取" : "Owner reads"}: {audit.measurements.owner_read_ms.toLocaleString(locale)} ms
{zh ? "此历史报告未记录数据量和阶段耗时。" : "This historical report has no recorded size or phase durations."}
} -{row.component_id}: {row.reason_code}{row.component_id}: {row.reason_code}
+ {row.owner_kind === "coordination_authority" && row.state === "readable" ?
+ {typeof row.facts.provider_revision === "string"
+ ? <>{zh ? "备份中的存储检查点" : "Checkpoint in backup"}: {row.facts.provider_revision} · {zh ? "游标" : "Cursor"}: {String(row.facts.cursor)}>
+ : (zh ? "这份历史报告未记录存储检查点。" : "This historical report did not record a storage checkpoint.")}
+
Vh2A}DD`M&B8XpW)K tCtZ#+AGqxoyt1k}%=f|q2~wPdrDGK#kh>9*!75a=
z&;a$_ik4hkF0wS>Wo6IxYU{@ijmY9s5ylBpmTq2oJ5Ak$ZK%f%Zdj!~f%u%^%ER~q
zrP%n7=+qSMGtXoE#InKI5TFyEc>Ip#QEKGwi5UN&O}x)RXfNt%T;@P4lmzoR9C4^a
zu4#oc&9E62E9tMbTS?oT&JT2@U?iZ;V_JkImaucX*qoX%KjdTBmJ$1u<#SK;b9|m=
z`qmx7rI^)D#zQG}GK-A8#`iZmbh5BW*uZ2KRg|I3uaWCwj9;e|iAOPu^wvozU1zU!
z(|>>J5~?Uq`3$qx!Ci`$Kq2AT3et)-xDm2Wh{^8I=|yFu!D=*|de;4!lU2jpQv;=o
zkJv(ZeH@=gNVX?y9<1*t?E+SpPj1mjlWen+Peaw>aTb+Zu9Iz#)2z?qXaZ}36S?D#
zXmNCrh!_9X0;GXt?Jx|do&0urTzQbqO@d2e>8`Dpc?>>^-YXMAE-i>r%Pqr`&_t5}
zjD7njipX3@5JwUvo({6B6g?@oq$fWsTb_@rjLd3ll9f8}+SB>k+Pa62GunnUVfDKj
z>5x!VYaO$?JJ~UcuYX(_M-kt7NnFgZ;!CMeI7y@(%R28p?WdqbNXgQ!pT%&mSZXVy
zi?{E*Q?lf4^s4#=5!cj*{uA#z{=qNCMwjmx+0L#~yUxZKu$eK+(3+LTj^4PH<_d^y
zrmiC>4%c-UsdY`*$!|>;FJ>D%-k(%ede{~G9MjhX@?aru*Bmz?7w3ht;7-;qhn`>0
z4pTI0dMe~92z1T2&plbJ$|qZuZ$xuIxh#ldZaxSvTGJ16|
z(1%=#aWxC%w+r(-Nw!(<
uTETrRujf>BGgWz0vetL45N~Q@jo65BD*Ix<_k9&H;
z@Fv0%_yDr>z^)>2JUoG$gAen0g&znF{*9H4;v7^peTK{)h}de!nZJo6fM6|8gg4?l
zl
_m3+>unn8gd2!s%6=K3Ap66ymjXXL$1D&UNE^a)b{YBmrN
zN*)(J;RwOd+3{XH%fzj#D{vz#sKUgV#gKS()8LC8n$$SXaD+fluFW-HK+hm6dF@*z
z6qX4Ki*jmQ1R)6v$g$`hWB)xJ`f6YfP%QULG&`cHSq8l}&iwYHWg~BrE8en1gqpey
zYzTU>860~(-cXHr?xyv+o$AK9#}^U>`dTv1FllFf1q^F7Yo6*ExK^<9iDKA*ZvYQS
zhv*qJG+2;oy#(Fhb4LVvVRZ9!TeXNn_&N^Z+TxLvxfn