背景
os dev 转发给 serve 的默认 log-level 是 warn,而种子链路最关键的结果行全是 logger.info:
[Seeder] Seed loading complete {inserted, updated, skipped, errored}(AppPlugin,packages/runtime/src/app-plugin.ts)
[MarketplaceInstallLocal] rehydrated <id>@<version> / inline seed … inserted=… errors=… / healed sample data …(packages/cloud-connection/src/marketplace-install-local-plugin.ts)
后果:默认 dev 环境下,「marketplace 包装了但 0 行」「种子部分失败」这类状态在启动输出里完全不可见。#3421 的排查中两度被拖慢:第一次复现时 boot 日志里连 rehydrate 是否跑过都看不出来;验证 heal 时也只能靠直接查库确认。errors 计数被 info 吞掉的问题同理——行级 seed 失败(如 #3422 修的 lookup 悬空)在默认日志级别下零信号。
提案
仿照 Flows 启动摘要行的先例(#3099,flow 静默不触发的修复就是把绑定审计提为 boot 摘要),在 ✓ Server is ready 的摘要块里加一行种子结果,始终打印、不受 log-level 影响,例如:
Seeds: showcase 162 rows ok · hotcrm(marketplace) 157 ok / 5 errors ⚠
要点:
- config app(AppPlugin)与 marketplace 包(rehydrate/heal)各自的 inserted/updated/skipped/errored 汇总;
- errored > 0 或「装了包但全部对象 0 行」时用显眼标记(⚠ / ERROR 升级),不许静默;
- heal 发生时明确标注(
healed on fresh db),让换库自愈这件事可观察;
- 摘要行在 kernel:ready 后、ready banner 处输出一次,不依赖
--log-level info。
参考
🤖 Generated with Claude Code
背景
os dev转发给 serve 的默认 log-level 是 warn,而种子链路最关键的结果行全是logger.info:[Seeder] Seed loading complete {inserted, updated, skipped, errored}(AppPlugin,packages/runtime/src/app-plugin.ts)[MarketplaceInstallLocal] rehydrated <id>@<version>/inline seed … inserted=… errors=…/healed sample data …(packages/cloud-connection/src/marketplace-install-local-plugin.ts)后果:默认 dev 环境下,「marketplace 包装了但 0 行」「种子部分失败」这类状态在启动输出里完全不可见。#3421 的排查中两度被拖慢:第一次复现时 boot 日志里连 rehydrate 是否跑过都看不出来;验证 heal 时也只能靠直接查库确认。errors 计数被 info 吞掉的问题同理——行级 seed 失败(如 #3422 修的 lookup 悬空)在默认日志级别下零信号。
提案
仿照 Flows 启动摘要行的先例(#3099,flow 静默不触发的修复就是把绑定审计提为 boot 摘要),在
✓ Server is ready的摘要块里加一行种子结果,始终打印、不受 log-level 影响,例如:要点:
healed on fresh db),让换库自愈这件事可观察;--log-level info。参考
🤖 Generated with Claude Code