Skip to content

setup: 配置诊断与 fail-closed 回滚,不新增第二条配置入口 #498

Description

@tt-a1i

结论

/openpi-setupversioned 配置加载 fail-closed、apply-failure 回滚 / preview-then-commit、unknown-field 警告。学习 @narumitw/pi-statuslinedocs/design/PI_CONFIGURATION_ECOSYSTEM_RESEARCH.md 的保存语义。不新增第二条配置入口,不做第二套 Footer,不做成 SuPi 式 Marketplace。

/openpi-setup 仍是唯一用户可见的配置变更入口。doctor / status 留在无参数 /openpi-setup。Pi 继续拥有 install / update / uninstall。本轮未安装、未运行社区包。

事实

冻结身份(last-seen 2026-09-08):

版本 / 日期 来源
@narumitw/pi-statusline npm 0.50.0(2026-08-29) https://www.npmjs.com/package/@narumitw/pi-statusline · https://github.com/narumiruna/pi-extensions

公开 README / 源码声明的保存语义(未在本轮执行):

  • unknown 字段 warning,非法已知字段阻止保存;
  • 临时文件 + rename;
  • live preview 只在确认后落盘;
  • 运行时 apply 失败时恢复旧文件与旧状态。

配置生态研究(2026-07-29)已经写过:当前 loader 对读取 / JSON 错误静默回退默认值,缺 document version、来源诊断、apply-failure 回滚。那份研究建议保持单一自然语言入口,先补生命周期,再考虑 project scope / 专用 TUI。

#39 是「agent 提议、用户按键确认」的闸门,不是本 Issue 的 diagnostics / rollback。SuPi 声明式 settings registry 是所有权未定的 Ideas,不要并进本 Issue。

推断

静默把损坏配置变成 defaults,会把用户意图藏起来,也让 doctor 无法区分「没有文件」和「读失败」。unknown field 若直接丢弃,同样会藏意图。这是运行时不变量,不是模型判断。

建议

  1. versioned config load fail-closed:缺文件才无警告 defaults;malformed / IO error 保留原文件并阻止写入,直到修复或显式 reset。
  2. apply-failure rollback 或 preview-then-commit。
  3. unknown fields 警告并保留;若丢弃会藏用户意图,则禁止静默丢弃。
  4. 不新增 /footer-settings/permission-settings 等扩展专用命令。
  5. 无参数 /openpi-setup 继续承担 status / doctor。

任何新的模型可见配置工具必须是 episode-scoped(现有 configure_my_pi_setup 模式),并写入 child 分类;默认 parent-only。

未知

  • 现有 setup-config.ts 自 2026-07-29 研究以来,哪些 fail-closed / lock 语义已经补上(本 Issue 实现前应对当前源码再核一次)。
  • SuPi registry 是否值得作为后续扩展贡献面:另开 Ideas,不阻塞本 Issue。

验收

  • versioned config load fail-closed
  • apply-failure rollback / preview-then-commit
  • unknown fields warned,不因静默丢弃而藏用户意图
  • 不新增扩展专用 setup 命令
  • doctor / status 仍在无参数 /openpi-setup
  • 不引入第二套 Footer 或 statusline 依赖

关联

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions