Fix repeat ownership and close out capture evidence
Start each repeat after its own manifest entry, refuse packets from a restarted or stopped camera, keep a simulated repeat from reading as recorded evidence, and decide completeness from the writer report. Add the operator summary (four files plus an atomic pointer) and read-only video review of a hold window. Verified with the full Autocal suite (567 passed), the shared recorder/playback files (57 passed), the lint gate and the documentation gate; the two pre-existing panel_check layout failures also fail on a clean HEAD worktree.
This commit is contained in:
@@ -392,7 +392,22 @@
|
||||
"col_levels": "Levels (N)",
|
||||
"col_hold": "Hold (s)",
|
||||
"col_repeats": "Repeats",
|
||||
"col_done": "Done"
|
||||
"col_done": "Done",
|
||||
"capture": "Recording: {status} · {frames} frames · {dropped} dropped · {reason}",
|
||||
"capture_idle": "Not ready",
|
||||
"capture_recording": "Recording",
|
||||
"capture_closing": "Closing",
|
||||
"capture_complete": "Complete",
|
||||
"capture_incomplete": "Evidence incomplete",
|
||||
"capture_reason_restarted": "image source restarted",
|
||||
"capture_reason_zero_frames": "no frame was written",
|
||||
"capture_reason_write_error": "disk write failed",
|
||||
"capture_reason_video_missing": "no video frame was kept",
|
||||
"capture_reason_video_undecodable": "the video cannot be decoded",
|
||||
"capture_reason_dropped": "frames were dropped",
|
||||
"capture_reason_segments": "unexpected number of video segments",
|
||||
"capture_reason_timeout": "closing timed out",
|
||||
"capture_wait": "recording is not ready; the hold cannot be confirmed yet"
|
||||
},
|
||||
"finger": {
|
||||
"title": "Finger calibration-point debug",
|
||||
@@ -589,6 +604,7 @@
|
||||
"overview": {
|
||||
"capture_in_progress": "In progress",
|
||||
"saved": "Analysis saved; hover for its location.",
|
||||
"saved_summary": "Review saved and summary published: {path} → {summary}",
|
||||
"open_session": "Open calibration session…",
|
||||
"empty": "Choose the session folder containing session.json to view collected sites, normal response and sensitivity. You can also open current data from Calibration capture.",
|
||||
"title": "Calibration record overview",
|
||||
@@ -654,7 +670,8 @@
|
||||
"guide_missing": "1 Check identity → 2 Select site / trial → 3 Check stable windows → 4 Save\nNext: this site has no attempt; choose a collected site or acquire it.",
|
||||
"guide_incomplete": "1 Check identity → 2 Select site / trial → 3 Check stable windows → 4 Save\nNext: inspect the stop reason and recorded signal. Incomplete attempts are excluded from fitting.",
|
||||
"guide_check": "1 Check identity → 2 Select site / trial → 3 Check stable windows → 4 Save\nNext: select a trial and Check hold windows; adjust the time interval if needed.",
|
||||
"guide_save": "1 Check identity → 2 Select site / trial → 3 Check stable windows → 4 Save\nNext: inspect remaining holds or save current analysis."
|
||||
"guide_save": "1 Check identity → 2 Select site / trial → 3 Check stable windows → 4 Save\nNext: inspect remaining holds or save current analysis.",
|
||||
"video": "View recording"
|
||||
},
|
||||
"quality": {
|
||||
"open": "Repeatability and validation…",
|
||||
@@ -724,6 +741,7 @@
|
||||
"uv_title": "Site sensitivity: blue→red {low:.4g}→{high:.4g} raw/N; grey has no fit",
|
||||
"issues": "{count} incomplete attempts excluded from fitting. Inspect raw signals for stability.",
|
||||
"saved": "Saved new review: {path}",
|
||||
"saved_summary": "Review saved and summary published: {path} → {summary}",
|
||||
"col_trial": "Trial",
|
||||
"col_branch": "Phase",
|
||||
"col_load": "Reference (N)",
|
||||
@@ -733,5 +751,35 @@
|
||||
"col_duration": "Hold (s)",
|
||||
"col_quality": "Quality",
|
||||
"col_drift": "Drift (raw/s)"
|
||||
},
|
||||
"video": {
|
||||
"title": "Video review",
|
||||
"header": "{trial} · step {step} ({branch} {load} N) · review {status} · {samples} valid samples",
|
||||
"position": "Frame {index}/{total} · id {frame} · segment {segment} frame {segment_frame} · basis {basis}",
|
||||
"play": "Play",
|
||||
"pause": "Pause",
|
||||
"previous": "Previous",
|
||||
"next": "Next",
|
||||
"frame_missing": "This frame was not written to the video (dropped from the queue)",
|
||||
"reason_missing": "Cannot open the video: {detail}",
|
||||
"reason_no_frame_source": "This recording has no usable video evidence (no camera, or no frame was written)",
|
||||
"reason_no_video_frame": "No valid frame of this hold was written to the video",
|
||||
"reason_trial_not_found": "This trial is not in the record",
|
||||
"reason_window_not_found": "This hold window is not in the trial",
|
||||
"reason_video_undecodable": "The video file cannot be decoded",
|
||||
"reason_decode": "Decoding this frame failed",
|
||||
"cursor": "Current frame",
|
||||
"reference": "Actual reference",
|
||||
"curve_title": "Raw force curve for this hold",
|
||||
"basis_unknown": "not recorded",
|
||||
"open": "View recording"
|
||||
},
|
||||
"summary": {
|
||||
"failed": "Summary export failed: {detail}. The recording is unchanged; you can retry.",
|
||||
"published": "Summary published: {path}",
|
||||
"retry": "Publish summary again",
|
||||
"done": "Summary published again: {path}",
|
||||
"reason_hold_not_found": "This hold attempt is not in the record",
|
||||
"reason_hold_not_complete": "This hold attempt was discarded by a remeasure"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,7 +392,22 @@
|
||||
"col_levels": "档位 (N)",
|
||||
"col_hold": "保持 (s)",
|
||||
"col_repeats": "重复",
|
||||
"col_done": "完成"
|
||||
"col_done": "完成",
|
||||
"capture": "录像:{status} · 帧 {frames} · 丢帧 {dropped} · {reason}",
|
||||
"capture_idle": "未就绪",
|
||||
"capture_recording": "录制中",
|
||||
"capture_closing": "收尾中",
|
||||
"capture_complete": "完整",
|
||||
"capture_incomplete": "证据不完整",
|
||||
"capture_reason_restarted": "图像来源已重启",
|
||||
"capture_reason_zero_frames": "没有写入任何帧",
|
||||
"capture_reason_write_error": "写盘失败",
|
||||
"capture_reason_video_missing": "没有录像帧",
|
||||
"capture_reason_video_undecodable": "录像无法解码",
|
||||
"capture_reason_dropped": "队列丢帧",
|
||||
"capture_reason_segments": "录像分段数不符",
|
||||
"capture_reason_timeout": "收尾超时",
|
||||
"capture_wait": "录像未就绪,暂时不能确认保持"
|
||||
},
|
||||
"finger": {
|
||||
"title": "手指标定点调试",
|
||||
@@ -589,6 +604,7 @@
|
||||
"overview": {
|
||||
"capture_in_progress": "采集中",
|
||||
"saved": "分析结果已保存;保存位置见提示。",
|
||||
"saved_summary": "已保存复核并发布汇总:{path} → {summary}",
|
||||
"open_session": "打开标定会话…",
|
||||
"empty": "请选择包含 session.json 的会话文件夹,查看已采集测点、法向响应和灵敏度;也可从标定采集页打开本场数据。",
|
||||
"title": "标定记录总览",
|
||||
@@ -654,7 +670,8 @@
|
||||
"guide_missing": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:此点尚未采集,请选择已采点或安排补采。",
|
||||
"guide_incomplete": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:查看结束原因及已录曲线,决定补采;未完成试验不参与拟合。",
|
||||
"guide_check": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:选择单次试验,点击“检查保持段…”;必要时调整时间区间。",
|
||||
"guide_save": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:继续检查剩余保持段,或保存当前分析结果。"
|
||||
"guide_save": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:继续检查剩余保持段,或保存当前分析结果。",
|
||||
"video": "查看录像"
|
||||
},
|
||||
"quality": {
|
||||
"open": "重复性与验证…",
|
||||
@@ -724,6 +741,7 @@
|
||||
"uv_title": "测点初步灵敏度:蓝→红 {low:.4g}→{high:.4g} raw/N;灰色无拟合",
|
||||
"issues": "{count} 次未完成试验不参与拟合;请按原始曲线检查稳定性。",
|
||||
"saved": "已另存:{path}",
|
||||
"saved_summary": "已保存复核并发布汇总:{path} → {summary}",
|
||||
"col_trial": "试验",
|
||||
"col_branch": "阶段",
|
||||
"col_load": "参考力 (N)",
|
||||
@@ -733,5 +751,35 @@
|
||||
"col_duration": "保持 (s)",
|
||||
"col_quality": "质量说明",
|
||||
"col_drift": "漂移 (raw/s)"
|
||||
},
|
||||
"video": {
|
||||
"title": "录像复核",
|
||||
"header": "{trial} · 第 {step} 步({branch} {load} N)· 复核状态 {status} · 有效样本 {samples}",
|
||||
"position": "第 {index}/{total} 帧 · 帧号 {frame} · 分段 {segment} 第 {segment_frame} 帧 · 时间基准 {basis}",
|
||||
"play": "播放",
|
||||
"pause": "暂停",
|
||||
"previous": "上一帧",
|
||||
"next": "下一帧",
|
||||
"frame_missing": "该帧没有写入录像(队列丢帧)",
|
||||
"reason_missing": "无法打开录像:{detail}",
|
||||
"reason_no_frame_source": "这段录像没有可用的视频证据(未接相机或没有写入帧)",
|
||||
"reason_no_video_frame": "该保持窗口内没有已写入视频的有效帧",
|
||||
"reason_trial_not_found": "记录中找不到这次试验",
|
||||
"reason_window_not_found": "在该试验中找不到这个保持窗口",
|
||||
"reason_video_undecodable": "录像文件无法解码",
|
||||
"reason_decode": "解码这一帧失败",
|
||||
"cursor": "当前帧",
|
||||
"reference": "实际参考",
|
||||
"curve_title": "原始力曲线与该保持窗口",
|
||||
"basis_unknown": "未记录",
|
||||
"open": "查看录像"
|
||||
},
|
||||
"summary": {
|
||||
"failed": "汇总导出失败:{detail}。采集结果没有改变,可以重试。",
|
||||
"published": "汇总已发布:{path}",
|
||||
"retry": "重新导出汇总",
|
||||
"done": "汇总已重新发布:{path}",
|
||||
"reason_hold_not_found": "记录中找不到这个保持尝试",
|
||||
"reason_hold_not_complete": "这个保持尝试已被重测废弃,没有可复核的画面"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user