Skip to content

[#4535·A3] contracts 手写 interface 与域内 zod 推导类型收敛(3 簇 9 条) #4538

Description

@os-zhuang

#4535 A3 项。系统性成因相同:packages/spec/src/contracts/ 手写了参数/返回类型 interface,而对应域里已有同名 zod schema 推导类型 —— 同名不同形状,基线 9 条:

  • ./contracts ≠ ./system:MetadataExportOptions、MetadataImportOptions、JobExecution、JobSchedule、NotificationChannel
  • ./contracts ≠ ./kernel:HealthStatus、PluginStartupResult、StartupOptions、ValidationResult
  • ./contracts ≠ ./data:AnalyticsQuery、DriverCapabilities

两侧都有消费方,不能一删了之。 逐名判定真源(哪一侧的形状是运行时实际流动的),然后收敛:contracts 引用 zod 推导类型并 re-export,或域侧 schema 对齐 contracts 语义后 contracts 改引 —— 每个名字单独判,不搞批量假设。MetadataExportOptions/MetadataImportOptions 有 #4411 的旁证:IMetadataService.exportMetadata/importMetadata 用的是 contracts 自有形状(types/namespaces/format),与 system 版(output/format/…)语义就不同 —— 这类可能是改名而非收敛(两个概念:服务参数 vs 持久化选项)。

建议分 3 个 PR(按入口对),每个 PR 删对应基线行作为验收。适合与 #4535·B/C 项并行排期,但注意所有 PR 都动 dual-source-exports.baseline.json,串行入队。

关联:#4535(主单)、#4506(基线)

Activity

  1. self-assigned this
    on Aug 2, 2026
  2. os-zhuang commented on Aug 2, 2026

    @os-zhuang
    ContributorAuthor

    已由 PM 循环派发给开发 agent(第 2 轮,#4535 流水线 A3 项)。前序 A2(#4557)已合并,基线现为 49 条。


    Generated by Claude Code

  3. os-zhuang commented on Aug 2, 2026

    @os-zhuang
    ContributorAuthor

    PM 审查:ACCEPT → PR #4568(转 ready 入队)。

    实际收敛 11 个名字(issue 标题的 9 系笔误,正文/基线枚举 11,agent 按实际清单执行):5 个纯 re-export 收敛、2 个 rename(DriverCapabilities → contracts 侧改 AnalyticsDriverCapabilities;JobSchedule 双 tier 划界)、2 个 system 死侧删除(Metadata*Options,import 级扫描证实零消费方 —— issue 里的 rename 猜想被证据修正)、2 个域侧对齐(job duration→durationMs、AnalyticsQuery.timezone 去默认值)。基线 49 → 38。

    PM 独立抽查通过:三个 job adapter 全部产出 durationMs(DB 列 duration_ms);timezone 默认值移除与 runtime 侧既有注释(#1982/#2018「parse 注入默认值会覆盖 org-timezone 解析」)完全互证 —— declared ≠ enforced 修在声明侧。测试证据完整(spec 7268、全仓 122/122 typecheck,dogfood 超时截杀后单独复跑 443 绿、如实申报)。

    顺带产出:运行时 bug #4567(声明式 cron job 静默不调度)已按 PD #10 单独建档。
    遗留一件 PM 跟进:v17 升级 checklist 的 #4411 条目对 MetadataExportOptions/MetadataImportOptions 的指向将过期(system → contracts),合并后按 releases-freeze 规则出 docs-only 修正。


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions