Skip to content

spec 双源清账 C4:Session / SessionSchema(./api ≠ ./identity)—— 2 条 #4641

Description

@os-zhuang

#4535 C 组第四簇(C4)。同一个名字在两个入口解析到不同声明,消费者拿到哪个类型只取决于 import 路径(#4411 陷阱)。合并后 packages/spec/dual-source-exports.baseline.json 恰好 24 → 22(删除下列 2 行,只减不增):

Session — [./api (type)] ≠ [./identity (type)]
SessionSchema — [./api (const)] ≠ [./identity (const)]

处置手册(#4411 先例;#4535 正文有完整版)

  1. 先判真源:import 语句级扫描三仓(本仓 + cloud + objectui),裸名从哪个入口被真实 import、有没有 runtime 读取(接进父 schema / 校验路径 / 会话签发与校验 / REST 响应)。不要用名字出现次数。
    • 提示:会话是跨层概念 —— ./identity 侧大概率是认证域的会话记录(登录态、过期、设备),./api 侧可能是 REST 会话响应体。若两侧都活,优先收敛 + re-export(MetadataManagerConfig 模式);若确属两个概念,按 C1 的 OpenApiWebhookEvent 先例改名一侧,命名可争议时报 needs_decision。
  2. 零消费方一侧 ⇒ 死删(v17 rc 是 major 窗口)。
  3. 收敛 ≠ 无行为变化:存活形状比被删侧窄/宽时,在 changeset 里写清消费方类型如何变。
  4. 导出类型,非可作者化 metadata key,一般不需要 tombstone / ADR-0087。

验收

关联:#4535(主账本)、#4610 → PR #4638(C3 先例)、#4587 → PR #4603(C2)、#4572 → PR #4581(C1)、ADR-0049

Activity

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

    @os-zhuang
    ContributorAuthor

    ACCEPT —— PR #4643。

    PM 独立复核(不依赖 agent 自述):

    • 判源成立:./identity 的 Session / SessionSchema 在 framework + cloud + objectui 三仓 零 import 站点;./api 侧是活合同 —— api/auth.zod.ts:42 声明,:83 接进 SessionResponseSchema(/get-session、/me、/refresh 的响应体)。
    • 「已漂移」的证据核实过:被强制执行的 sys_session 平台对象列名实测为 token / expires_at / active_organization_id,没有 session_token、expires、fingerprint —— 与 ./api 一致,与 ./identity 声称的形状不一致。死删判定站得住,且这正是 ADR-0049 要清的 declared-but-unenforced。
    • 范围干净:12 个文件,spec 源码 + 生成的 reference docs + 三个 surface/manifest + 基线 + 台账 + changeset;content/docs/releases/ 零改动。
    • 基线恰好 −2(24 → 22),两行 Session* 全清。
    • 严格性台账已同步(identity/ 粗粒度行 34 → 33)—— C3 的教训已生效。

    范围外发现 #4642 值得单独说:agent 实测发现手册推荐的「编译期条件类型 pin」在 packages/spec 里不可能失败 —— tsconfig.json 的 exclude 含 **/*.test.ts(实测确认),且 vitest.config.ts 未开 typecheck.enabled,两条路径都不做类型检查;它还用 sabotage 验证了这一点。这意味着 #4581 / #4638 已落地的 pin 是装饰性的。本 PR 没有跟着写一个假门禁,改用运行时模块命名空间断言(sabotage 下确实红)。这个发现比本簇的清账本身更有价值,已按军规立案(unassigned),本 PR 不修。

    已转正并开启 auto-merge(squash),CI 绿后自动进队。


    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