Skip to content

[REQ-139] 产品在用户可见面显示为 Code Puppy(名称与图标) #1160

Description

@jinjunnn

本票的 AC 与方案来自 2026-08-28 的勘破 + 计划 + 一轮计划审计(审计 7 条 finding 全部接受并已改)。
每条 AC 都带「判据自检」——今天有没有已知路径 / 证据长什么样 / 一个错误实现能不能满足它。
owner 裁决:①只保 en/zh/zht 三语;②公开露出的 alpha-code(仓名 / URL scheme / CLIENT_ID)不清;
③无租户,不考虑向后兼容;④Office 走「提取视图」,明写排版不保真。

复杂度:M(跨多文件、三条转写机制、图标工具链,但零新模块、零契约变更)。

背景

owner 决定产品对用户露出的名字改为 Code Puppy。勘破(recon-rename.md)把名字出现面分成三类:
A1 纯展示可改、A2 身份面(改了破坏存量)、A3 不该改。
身份面一律不动——这是本计划的最小实现选择,不是 owner 裁决:改显示名不需要动它们
(recon A2 机制实测:菜单栏/Finder 显示名走 Info.plist productName,
electron-builder.config.ts:209/217/229,与运行时 setName/APP_IDS 是不同旋钮);
与裁决 2(公开露出三项不清)精神一致;owner 裁决 3 已明示兼容不是拦路理由;
以 AC5 守卫固化 —— owner 2026-08-28 裁决「留」。不动的五组:运行时 APP_IDS(index.ts:165-169)、
app.setName 值(index.ts:493,钥匙串项 "alpha-code Safe Storage" 实测存在)、
bundle id(electron-builder.config.ts:56-58)、更新源 owner/repo/channel
(alpha-environment.ts:30-31,50-54)、URL scheme + CLIENT_ID
(route-manifest.ts:61-64 / alpha-auth.ts:106)。语言只保 en/zh/zht(owner 裁决 1),15 个 locale 缺口整个移出范围。
图标:真源 packages/ui-mac/icons/(162 文件,三 channel 的 Electron 消费件逐字节相同),
新源图 /tmp/claude-501/codepuppy-brand/code-puppy-icon-1024.png(1024² RGB 无 alpha,像素风)。

AC

AC1 packaged app(prod channel)在 en/zh/zht 三语下,以下用户可见面显示 "Code Puppy"
(wordmark 面显示 "CODE PUPPY"):菜单栏应用名与 About 面板、窗口标题(主窗 + Recovery)、
应用内 wordmark 四处消费点、i18n 品牌键(en.ts:947/949 与 zh 对应键)、OAuth 浏览器落地页
(core/src/oauth/page.ts)。判定以票面附的坐标清单(recon A1 全表)逐点核对,不用
「不再出现旧名」这种无界判据。
判据自检:①已知路径——A1 坐标全在 alpha 自由区(ui-mac/ext/core-exclude),直接编辑 +
productName 三处;②证据——清单逐坐标 grep 断言(可落成一条源码断言测试)+ L2 截图
(首页 wordmark / 菜单栏 / About)对照;③错误实现(漏改某坐标)会被逐点核对抓住——清单是
有限证据集,漏一格红一格。

AC2 上游 renderer 面(en/zh/zht 三 locale 的 i18n、崩溃屏、composer placeholder)经
brand-i18n.ts 构建期转写后显示 "Code Puppy";REPLACEMENTS 覆盖面保持现状三 locale 不扩
(owner 裁决 1)。
判据自检:①路径——改 scripts/brand-i18n.ts:28-96 的 to 串,机制现成;②证据——brand-i18n
的 drift 判据(from 串仍在上游文件,失配 warn/strict)+ 构建产物 grep 三 locale 品牌串;
③错误实现(只改 en 漏 zh/zht)被逐 locale grep 抓住。

AC3 身份注入与提示词/技能文案面的品牌串统一为 Code Puppy:alpha-identity.ts:30-35 身份注入、
alpha-behavior.ts:19、alpha-config-injection.ts:178,245、ext/src/alpha-prompts.ts 四处、
factory-skills 六份 SKILL.md 文案、拒答模板两处、prompt-rebrand.ts 的 REBRAND_TO 与各
to 串;prompt-rebrand.test.ts 的 from-串 drift 断言保持绿(上游 txt 盘面不动)。
模型运行期实际自称不入判据——模型策略层对同句行为不确定(CLAUDE.md 2026-08-27 实测:
同模型同句 5 次拒 3 次),写进判据 = 给每轮 review 合法重开口;可留作 VERIFY 观察项,
不作 PASS/FAIL。
判据自检:①路径——全部 alpha-owned,prompt-rebrand 机制现成(16 条规则只换 to 侧);
②证据——现有 prompt-rebrand 测试 + 坐标清单 grep;③错误实现(改了上游 txt 或漏改
REBRAND_TO)分别被 north-star guard / residual 审计与 grep 抓住。

AC4 三 channel(dev/beta/prod)图标目录里 Electron 实际消费的 8 个文件
(icon.icns(10 档)/icon.ico/icon.png 1024/dock.png 512/32x32/64x64/128x128/128x128@2x)
全部换成 Code Puppy 小狗图;packaged app 的 Dock 与 Finder 图标为新图。
判据自检:①路径——make-icons.py 现成产 icns+png 套件并拷三 channel(FILES :67);
已知风险两条,写进子票:脚本不产 icon.ico(现存 ico 是一次性手工产物,需另行生成)、
脚本抠底假设(白底 flood-fill thresh=70)对 RGB 无 alpha 像素风源图是否成立需实跑一遍看结果;
②证据——8 文件 sha256 ≠ 旧值 + iconutil/sips 枚举 icns 档位 + packaged L2 截图(Dock/Finder);
③错误实现(只换 prod 漏 dev/beta、或 icns 缺档)被逐文件哈希与档位枚举抓住。

AC5(owner 已裁决保留 —— 2026-08-28「留」) 身份面逐字未变:上文背景段列的五组坐标
(APP_IDS / setName 值 / bundle id 三值 / feed owner+repo+channel 映射 / URL schemes+CLIENT_ID)
在改名 PR 合并后与改名前逐字相同。
判据自检:①路径——一条守卫测试(源码断言这些字面量)或 VERIFY 一次性 diff 核对,清单有限;
②证据——测试名或 VERIFY 票记录;③错误实现(顺手把 setName 也改了)当场红——这正是它要防的
(钥匙串项换名 ⇒ owner 本机登录态与 BYOK 解不开,recon 风险表 #1)。

子票切分

  • [REQ-139][CODE] 换品牌展示串:ui-mac 自有面 + brand-i18n 转写 + 提示词与技能文案
    负责 AC1/AC2/AC3(+AC5 守卫测试若 owner 保留)。边界:recon A1 与 C(自有)全部坐标、
    electron-builder.config.ts:209/217/229 productName、brand-i18n.ts REPLACEMENTS、
    prompt-rebrand.ts to 串、core/src/oauth/page.ts。out-of-scope:身份面五组、图标、
    artifact 文件名、15 locale、历史冻结文档(docs/ 370 文件)、packages/desktop/metainfo、
    favicon(上游 publicDir,无 alpha 机制)。退出条件:坐标清单逐点断言绿 + brand-i18n/
    prompt-rebrand 测试绿 + typecheck/unit 绿。
    票面需写明(owner 裁决 3 的如实备注):productName 变更后,新 DMG 装出的是
    Code Puppy.app;owner 本机经 electron-updater 原地更新则磁盘目录名保持 alpha-code.app
    只有显示名变(recon ⑤)。
  • [REQ-139][CODE] 产出并接入 Code Puppy 图标(icns/ico/png 套件 × 三 channel)
    负责 AC4。边界:icons/source/ 新源图入库、make-icons.py 实跑(必要时调抠底参数,
    改动限该脚本)、ico 另行生成并记录工具链、三 channel 拷贝;顺带处理
    src/renderer/index.tsx:310 通知图标(现指向 opencode.ai 远端资源——换成本地资产或移除,
    形态实施时定,不引入新网络依赖)。out-of-scope:Square*/StoreLogo/android/ios 遗留件
    (零消费者,不再生)、favicon。已知风险:抠底假设 + ico 工具链(见 AC4)。
    退出条件:8 文件 × 3 channel 就位 + 哈希/档位核对 + packaged 截图。
  • [REQ-139][VERIFY] packaged 三语视觉取证 + 身份面逐字核对
    负责 AC1(packaged 面)/AC4(视觉)/AC5 证据。矩阵:en/zh/zht × {首页 wordmark、菜单栏、
    About、Dock 图标} 截图;身份面五组 diff 核对;prod 打包(注意 resolveChannel 缺省 dev,
    需 OPENCODE_CHANNEL=prod;构建须核对 3 行 ✓ built in,models.dev 网络依赖用
    MODELS_DEV_API_JSON 本地快照,CLAUDE.md 已录方法)。

out-of-scope(REQ 级)

身份面五组(本计划的最小实现选择,见背景;owner 2026-08-28 已裁决以 AC5 守卫固化)、GitHub 仓名与 release artifact 文件名(公开露出不清,owner 裁决 2)、
15 个 locale、历史冻结文档、packages/desktop / Linux metainfo、上游 favicon 面、
npm scope / CLI 名 / 配置文件名等内部标识符(recon A3)。

升 Ready 还缺什么

  1. 图标实跑门:make-icons.py 对新源图跑一遍,产出给 owner 过目(视觉资产批准,
    代替设计稿门;纯文案替换部分不需要设计稿)。
  2. AC5 owner 表态(保留为 AC / 降为建议)。
  3. 无方案基线需求(纯内部 M,三条转写机制全部现成,方案段写父票正文即可)。

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions