Skip to content

维护者确认: 跨端协议包本地化重构 #2375

Closed

Description

@MagicLizi

触发

此 PR 触发多项维护者确认门:

  • product: 命中 UI 路径 (apps/mobile/metro.config.js, apps/mobile/src/notifications/pushRegistrationModel.ts)
  • security: 安全边界内容变更 (.github/workflows/ci.yml);危险写法 install-hook;新增第三方依赖 typescript / vitest / @types/node
  • rules: 改到规则文档 (AGENTS.md, docs/dev-rules/* 等多份)
  • pluginBase: 改到插件基座 (apps/desktop/src/shared/ghost.ts)
  • arch: 核心路径改动 15009 行 + refactor 类型 + 超大型 diff (16260 行)

PR 概要

确认方式

维护者请直接在 PR 上 Approve(认可改动方向)或 Request Changes(需要修改后重新 Approve)。鉴于改动范围大且涉及安全/插件基座/规则文档,建议多维护者交叉 review。


关联 PR:#2373(作者 @xd-bobo);本 issue 由 review-pr 流程自动创建,用于先讨论该 PR 涉及的产品 / UI 变更,维护者确认后 PR 会恢复推进。

Activity

  1. dash-s-cindy commented on Aug 10, 2026

    @dash-s-cindy

    判断

    让客户端无需初始化 submodule 即可独立 clone、install、build 和 test,开发体验价值明确。当前改动同时把跨端协议从“客户端与服务端共享同一权威源码”改为“两仓分别维护实现”,因此属于协议治理与发布架构变更,而不只是源码本地化;建议暂不 Approve,先 Request Changes 补齐架构决策和跨仓兼容证据。

    进一步检查发现,本 Issue 中的 product/UI 与部分 security 命中主要来自路径和关键词规则,并不对应实际产品行为变化:

    • apps/mobile/metro.config.js 只是把 @cindy/device-link-protocol 的解析目标从 cindy-protocol/packages/... 改到本仓 packages/...;
    • apps/mobile/src/notifications/pushRegistrationModel.ts 只把契约注释指向本仓协议包,没有修改推送注册、深链解析或 UI;
    • apps/desktop/src/shared/ghost.ts 主要改为从本地 @cindy/plugin-protocol 取常量,未看到插件批准状态、指纹、安装布局、权限或包格式的既定语义调整;
    • dco:install-hook 及其安装脚本在当前 main 已存在,本 PR 没有新增自动执行 hook 的安装路径;
    • typescript、vitest、@types/node 用于新增本地协议 workspace 的类型检查和测试,属于开发依赖。现有证据没有显示它们进入产品运行时或获得新的权限。

    真正需要维护者决策的是:是否正式放弃当前“共享协议仓是权威源”的架构,以及改成双份实现后如何持续阻止 wire、parser 和 validator 漂移。

    行动

    1. 先做明确的架构裁决,再决定是否 Approve。 当前 main 的 docs/dev-rules/protocol-and-submodules.md 明确规定:

      • cindy-protocol 是存量 wire protocol 的权威来源;
      • 当前保留的正是 device-link、plugin、slack-hook、model-access 四个双端 package;
      • 单仓 typecheck/单测无法发现单端 wire 语义漂移。

      refactor(protocol): 本地化跨端协议包 #2373 删除 .gitmodules,将上述规则替换为“两仓本地协议实现”,这是对现行权威规则的反转。需要协议、服务端和插件基座维护者明确认可该方向,不能仅凭机械迁移和单仓测试推定已获得产品/架构意图。

    2. 补充可复核的迁移等价证据。 建议在 PR 中提供:

      • 四个迁移目标与当前 main 所锁定 submodule 内容的逐文件或规范化 hash/diff 对照;
      • wire 字段、枚举、默认值、严格/宽松校验、未知字段处理、长度上限和错误行为的对照表;
      • 客户端与关联服务端 PR 使用同一组有效/无效 fixtures 对拍 parser/validator;
      • 插件 manifest、批准状态、权限 diff、指纹、安装布局和 .cindy 包格式的回归结果;
      • device-link 新旧端组合,以及 Slack Hook / Model Access 客户端与旧服务端组合的兼容验证。

      PR 作者报告 pnpm install --frozen-lockfile、全量单测、Desktop/Mobile typecheck 和三个协议包构建通过,这能证明当前客户端单仓闭包,但不足以单独证明双仓实现长期等价。

    3. 补齐干净环境和发布闭包验证。 至少应覆盖:

      • 不初始化任何 submodule 的全新 clone;
      • pnpm install --frozen-lockfile;
      • Desktop 与 Mobile typecheck;
      • 三个本地协议 package build 和全部协议测试;
      • pnpm test:unit;
      • Mobile production export 或等价的 Metro/EAS workspace closure 检查,确认 packages/device-link-protocol 确实被上传并可解析;
      • Desktop 打包或最小发布构建 smoke,确认源码导出 package 在归档环境中可用。
    4. 给出在途工作的迁移与合并顺序。 仓库中仍有工作直接以 cindy-protocol PR、gitlink 或发布门禁为前置。合并本 PR 前,应列出受影响 PR,说明它们是先迁移、重基,还是继续沿用旧协议仓;否则新规则落地后会出现两套开发流程并存。

    5. 降低评审耦合。 当前 PR 最新元数据显示为 89 个文件、15,115 additions / 1,145 deletions。建议至少按以下边界拆分或提供可独立审阅的 commit:

      • 协议源码与测试的机械搬迁;
      • 消费方 import/workspace/Metro/EAS 接线;
      • submodule、CI 和安装流程删除;
      • 权威规则、CODEOWNERS、法律/仓库文档切换。

      这样维护者可以先核对“内容是否等价”,再单独审查“是否接受新的治理模型”,避免超大 diff 掩盖架构裁决。

    风险边界

    • 已确认的风险:本 PR删除了 .github/workflows/ci.yml 中对 submodule 来源、回退/分叉和已发布状态的校验,同时删除 check-submodule-forward。在彻底移除 submodule 后,这些具体检查确实不再适用;但新方案尚未提供同等强度的跨仓漂移门禁。
    • 需要决策的风险:两仓分别维护 Bean、validator、parser 后,是否接受“靠流程、双仓 PR 和兼容 fixture”替代共享源码。这是治理取舍,不应被当成已经确认的实现细节。
    • 目前没有证据支持的风险:没有发现此次路径命中造成 UI 变化、推送行为变化、自动安装 Git hook,或新增生产运行时第三方依赖;不建议据此要求额外产品改动。

    建议的验收条件

    满足以下条件后再考虑 Approve:

    • 维护者明确接受两仓本地协议实现作为新的权威模型;
    • 关联服务端 PR 的范围、状态和发布顺序可核验;
    • 四个协议面的迁移等价性有可重复验证的 fixture/hash 证据;
    • 新旧客户端/服务端兼容矩阵通过,尤其是 device-link 与插件 manifest;
    • clean clone、Desktop/Mobile、Metro/EAS 或等价发布闭包通过;
    • 仍依赖旧协议仓的在途 PR 有明确迁移安排;
    • 规则文档说明未来发生跨端变更时,如何强制两仓同步 fixture 和 review,而不只是建议人工注意。

    相关记录

  2. MagicLizi commented on Aug 11, 2026

    @MagicLizi
    ContributorAuthor

    关联 PR #2373 已合并(https://github.com/makecindy/cindy/pull/2373),这次产品讨论的结论已随 PR 落地,自动关闭本 issue。后续还有想继续聊的,直接 reopen 或另开 issue 都行。

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