Skip to content

工程与发布契约:消除跨扩展内部依赖、测试发现盲区和版本声明漂移 #73

Description

@tt-a1i

问题

当前 main 的功能测试是绿色的,但仍有几处“现在能工作、后续容易静默漂移”的工程合同缺口。

已确认项

1. 跨扩展直接 import 内部实现

当前仍存在:

  • git-read 直接 import file-search/src/output.tsprocess.ts
  • workflows 直接 import subagents/src/agent-types.ts

这些不是公开 shared seam。任一 extension 内部重构都可能破坏另一个 extension,打包边界也变得不清楚。

2. 测试命令只发现一层目录

package.json 当前使用:

node --test --experimental-strip-types extensions/*/*.test.ts

放在 extensions/<name>/src/*.test.ts 的测试不会自动执行,也不会报错。仓库已经有较多 src 子目录,这属于“看起来有测试、CI 实际没跑”的风险。

3. peerDependencies 与公开最低版本不一致

README 宣称 Pi 0.84.1+,开发依赖固定在 ^0.84.1,但发布包对三项 Pi peer 以及 typebox 全部声明 *。npm 无法表达或检查真实兼容下界。

不能机械改成 ^0.84.1,因为 0.x caret 可能错误排除后续 Pi 版本;应先确定兼容范围语义。

4. Worktree 回收失败被静默吞掉

Subagent spawn 失败后会尝试回收刚创建的 worktree,但 reclaimWorktree(...).catch(() => {}) 丢失回收失败证据。此时磁盘可能残留 worktree,用户只看到原始 spawn 错误。

5. 生产代码仍有一个 as any[]

extensions/sessions/index.ts 的 session preview 投影仍使用 context.messages as any[]。不阻塞发布,但它是当前生产代码里残留的明确类型逃逸。

建议

  • 将复用实现提升到 extensions/shared/,或定义小的公开模块接口;
  • 改为递归、确定性的测试发现,并加一个“嵌套 fixture 确实被发现”的守卫;
  • 记录并测试真实 peer 最低版本,选择 >=0.84.1 或经过验证的上界,不机械使用 0.x caret;
  • worktree 清理失败至少进入 tool error details / warning / recovery receipt;
  • 消除最后一个生产 as any

验收标准

  • extension 不再 import 其他 extension 的 src/ 内部文件;
  • 任意 extensions/**/*.test.ts 都会进入本地与 CI;
  • npm manifest 与 README 的 Pi 兼容声明一致;
  • cleanup 失败可观察、可定位、不会覆盖原始失败;
  • 生产 TypeScript 无 as any

不包含

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

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions