diff --git a/PROGRESS.md b/PROGRESS.md
index 6b5c8e6..c4a5471 100644
--- a/PROGRESS.md
+++ b/PROGRESS.md
@@ -21,6 +21,9 @@
## 已完成关键能力
+### 2026-07-03 / web 列表 meta 行数字组改靠左跟排——修 active 静默后的左侧"缺口"(bump 0.38.7)
+用户发截图:0.38.6 active 徽章静默后,无 skill 的行(列表主体)meta 行左槽空了,数字组(条/tok)又被 `.num.right-group{margin-left:auto}` 整组挤右,中间留出一块像缺了东西。修:数字组改靠左跟排填上左槽,只有 time-ago 锚行尾(`margin-left:auto` 移到 time-ago);模板删掉已无意义的 `right-group` class。"条/tok"跨行对齐由原有 min-width+右对齐槽位保持。改 `web/static/dev.html` + `web/static/js/chat.js`。
+
### 2026-07-03 / web status 徽章改"默认态静默"——active 不挂徽章,终态行淡化(bump 0.38.6)
运行圆点落地后暴露 status 徽章两问题:「进行中」(生命周期 active)与「运行中」(run_status)语义撞车;列表主体都是 active,每行重复挂蓝徽章是零信息噪音、还占 meta 行首槽。设计原则定为**默认态静默、例外态着色、瞬时态用动效**:active 不再渲染徽章(列表行 + 中栏 chat-meta 同规则,chat-meta 终态徽章保留兼解释"输入框为什么消失");completed/abandoned 徽章保留且整行淡化(`st-*` class,opacity .68,hover 恢复——st- 前缀防撞选中态 .task-row.active);绿脉冲点成为唯一动效信号,与生命周期解耦。筛选下拉「进行中」文案不动(筛选语境无歧义)。顺手删掉不再被渲染的 `.badge.active` CSS。改 `web/static/js/chat.js` + `web/static/dev.html`。
diff --git a/core/__init__.py b/core/__init__.py
index b85c2fa..616c2b0 100644
--- a/core/__init__.py
+++ b/core/__init__.py
@@ -1,3 +1,3 @@
# zcbot 版本号单一事实源:web/app.py 的 FastAPI version、/healthz 返回、前端展示都引这里。
# 改版本只动这一行。
-__version__ = "0.38.6"
+__version__ = "0.38.7"
diff --git a/web/static/dev.html b/web/static/dev.html
index b4760c0..731a1b5 100644
--- a/web/static/dev.html
+++ b/web/static/dev.html
@@ -552,10 +552,10 @@
align-items: baseline; font-variant-numeric: tabular-nums; }
.task-row .meta > * { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.task-row .meta .badge { flex-shrink: 0; }
- /* 数字槽位:固定 min-width + 右对齐;time-ago 也锁宽 → 整个右侧组位置稳定,跨行"条/tok"才能对齐 */
+ /* 数字组靠左跟排(active 徽章静默后左槽常空,整组右挤会留出一块"缺口");
+ 固定 min-width + 右对齐让"条/tok"跨行对齐;只有时间锚在行尾 */
.task-row .meta .num { flex-shrink: 0; text-align: right; min-width: 44px; }
- .task-row .meta .num.right-group { margin-left: auto; } /* 把数字+时间整组挤到右侧 */
- .task-row .meta .time-ago { flex-shrink: 0; text-align: right; min-width: 64px; }
+ .task-row .meta .time-ago { flex-shrink: 0; text-align: right; min-width: 64px; margin-left: auto; }
.task-row .badge {
display: inline-block; padding: 0 6px; border-radius: var(--r-md); font-size: 11px;
background: #eef; color: #336;
diff --git a/web/static/js/chat.js b/web/static/js/chat.js
index ded1a44..80a01d6 100644
--- a/web/static/js/chat.js
+++ b/web/static/js/chat.js
@@ -206,7 +206,7 @@ function renderTaskList(tasks, append = false) {
${statusLabel ? `${statusLabel}` : ""}
${runIndicatorHtml(t)}
${t.skill ? `${escapeHtml(t.skill)}` : ""}
- ${t.n_messages || 0} 条
+ ${t.n_messages || 0} 条
${fmtTokens(t.tokens)} tok
${escapeHtml(fmtTimeAgo(t.updated_at))}