Skip to content

Commit 6f789be

Browse files
authored
release v1.5.12 (#350)
* release v1.5.12 * docs: record v1.5.12 release checkpoint
1 parent 138c4b3 commit 6f789be

11 files changed

Lines changed: 116 additions & 10 deletions

File tree

TASK_PROGRESS.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,76 @@
11
# Task Progress
22

3+
## Client release v1.5.12 (2026-08-08)
4+
5+
- [scope] Reviewed and merged 10 pending community/self PRs that had accumulated
6+
unmerged on `main` since late July (#68, #212, #283, #284, #285, #286, #288,
7+
#289, #106, #342) — each individually verified against current `main` before
8+
merge: git-mergeable both alone and stacked together, no version-fragile
9+
selector/DOM assumptions, and (for #283 specifically) the Safe CSS sandbox
10+
in `runtime/safe-css-policy.json` was cross-checked to confirm no community
11+
theme can trip the stricter visibility check (opacity floored at 0.65,
12+
display/visibility/position not themable at all).
13+
- [diagnosed] Merging #68 exposed that `macos/scripts/image-metadata.mjs` is
14+
generated from `runtime/image-metadata.mjs` via `tools/sync-runtime-assets.mjs`;
15+
#68 edited the generated output directly instead of the source, so
16+
`--check` failed on `main` and `windows/scripts/image-metadata.mjs` never
17+
picked up the new `readRawDimensions` export at all. Fixed at the source
18+
and regenerated both platform outputs (#347).
19+
- [diagnosed] `Static checks` CI was independently red on `main` — 3 tests in
20+
`macos/tests/renderer-verification.test.mjs` failed against `main` HEAD
21+
directly, unrelated to any merge here. Root cause: the test's hand-rolled
22+
DOM mock had drifted from the real runtime contract in three ways (stale
23+
`shell-main` selector literal predating the 26.727 `:is(...)` update,
24+
missing `scope.missingL1` that `assessRendererVerification` requires,
25+
hardcoded `version: "1.5.6"` against the real `SKIN_VERSION` of `"1.5.11"`).
26+
Fixed the fixtures and exported `SKIN_VERSION` so the test imports the real
27+
constant instead of re-hardcoding a value that drifts on every release (#349).
28+
- [implemented] Regrouped the menu bar's ~16 flat top-level items into
29+
`主题`/`链接`/`维护` submenus, and replaced the always-present manual
30+
"检查更新…" item with a background check (24h timer + one-shot ~15s after
31+
launch) that posts a system notification the first time a new version is
32+
seen and shows a conditional "🆕 发现新版本" item only while one is
33+
available; manual check moved into 维护 as "立即检查更新" (#348). Could not
34+
run `swift build`/`swift test` locally — this sandbox's Command Line Tools
35+
(Swift 5.10) don't match the macOS 15.2 SDK (needs 6.0.3) — so an
36+
independent review agent read the full diff for compile-breaking issues
37+
before push, and the PR was only merged after real CI's `macos-latest` job
38+
(`swift test --package-path macos/menubar-app` + DMG build) came back
39+
green. The review agent's two substantive findings (install doc no longer
40+
matched the new background-polling behavior; a manual check during an
41+
in-flight background check could double-spawn `check-update-macos.sh`)
42+
were fixed before merge with a dedicated `updateCheckInFlight` guard
43+
separate from the broader `operationInFlight` busy state, so the 24h timer
44+
no longer disables the primary apply/open actions while it runs.
45+
- [verified] Before cutting the version: `node --test macos/tests/*.test.mjs
46+
windows/tests/*.test.mjs tools/*.test.mjs` (93/93 pass), full
47+
`macos/tests/run-tests.sh` including signed-runtime and Doctor checks, and
48+
both `injector.mjs --check-payload` invocations all pass on `main` post-merge.
49+
- [implemented] Version bump touches all six release version sources
50+
(`macos/VERSION`, `windows/VERSION`, `macos/package.json`,
51+
`macos/scripts/common-macos.sh`, both platforms' `injector.mjs`
52+
`SKIN_VERSION`) plus the two hardcoded `1.5.11` assertions in
53+
`macos/tests/run-tests.sh` (the update-check JSON fixture and the
54+
`common-macos.sh`-sourced `$SKIN_VERSION` check). A grep-only pass across
55+
the repo for the literal `1.5.11` first missed a third real dependency:
56+
`windows/tests/injector-window-readiness.test.mjs` imports `verifySession`
57+
(not `assessRendererVerification` directly), so its mock
58+
`__CODEX_DREAM_SKIN_STATE__.version` is transitively checked against the
59+
real `SKIN_VERSION` even though the test file never names that identifier.
60+
The full portable test run after the version bump caught this immediately
61+
(4 failures) before it reached CI; fixed the same way as the macOS
62+
`renderer-verification.test.mjs` case — export `SKIN_VERSION` from
63+
`windows/scripts/injector.mjs` (as a separate `export { }` statement, same
64+
reason as macOS) and import it into the test instead of re-hardcoding.
65+
`windows/tests/start-verified-skin-preserved.tests.ps1`'s literal
66+
`"version":"1.5.11"` is a fully mocked PowerShell fixture with no path to
67+
`SKIN_VERSION` at all (grepped every `.ps1` script; it's JS-only), so that
68+
one is genuinely safe to leave unchanged.
69+
- [gap] Live click-through of the reorganized macOS menu bar and a real
70+
"update available" notification have not been manually exercised on a
71+
physical Mac — verification here is CI (`swift test`) plus static review,
72+
not an interactive smoke test.
73+
374
## macOS menu reapply/open ChatGPT restart fix (2026-08-05)
475

576
- [scope] Branch `codex/fix-macos-reapply-open-chatgpt` was created from latest

macos/CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,28 @@
22

33
## Unreleased
44

5+
### 新增
6+
7+
- 菜单栏更新检查改为后台自动进行:启动后约 15 秒与此后每 24 小时静默访问一次 GitHub Releases,发现新版本时推送系统通知,并在菜单顶部显示可点击的「🆕 发现新版本」条目;同一版本只通知一次。原「检查更新」菜单项保留为「维护」子菜单里的「立即检查更新」,用于手动触发。
8+
- 菜单栏状态栏菜单由 16 个平铺项收纳进「主题」「链接」「维护」三个子菜单,只保留重新应用皮肤、打开 ChatGPT 与退出在最外层,降低误触和视觉噪音。
9+
510
### 修复
611

12+
- 修复菜单栏「重新应用皮肤」与「打开 ChatGPT」入口语义不一致的问题(#341):重新应用现在会先尝试热重载,失败才回退到完整重启;打开 ChatGPT 复用已安装的 Dream Skin 启动脚本而不是直接原生拉起。
13+
- 渲染器可见性校验加固(#294):从仅检查宽高与 `display` 改为同时校验 `checkVisibility()``opacity``content-visibility` 与视口相交,减少"校验通过但皮肤实际不可见"的假阳性。已核实社区主题的 Safe CSS 沙盒不允许 `opacity` 低于 0.65、且不开放 `display`/`visibility`/`position`,不会被这次加固误伤。
14+
- macOS 自定义主题写入器输出对齐当前运行时 schema(#295)。
15+
- 导入主题背景图前先用轻量方式读取尺寸再决定是否用 `sips` 全量解码(#66),避免超大图片在校验尺寸上限前就把整张图解码进内存造成的内存膨胀风险。
16+
- 主题包 manifest 时间戳校验拒绝不合法的 RFC 3339 值(#297),双平台共享。
17+
18+
### 内部
19+
20+
- 同步 v1.5.12 版本号,发布菜单栏重组、更新通知与上述修复。
21+
- 仓库根目录补充 `LICENSE` 入口(此前只在 `macos/LICENSE`)(#57)。
22+
- README / SECURITY.md 补充说明换肤期间本机回环 CDP 调试口未做身份验证这一既有安全边界(#18)。
23+
- CI 新增对 shared runtime 与 tools 目录的测试覆盖(#300)。
24+
- 修复 `macos/scripts/image-metadata.mjs` 与其生成源 `runtime/image-metadata.mjs` 不同步的问题——后者补上 `readRawDimensions` 拆分后未重新生成,Windows 对应文件因此完全没有这个能力;现已重新生成双端产物并导出 `SKIN_VERSION` 供测试引用,避免下次发版再次手工漂移。
25+
- 修复 `renderer-verification.test.mjs` 的 mock fixture 与运行时契约脱节导致的 CI 常年报红(并非本次改动引入,是历史遗留):选择器字符串、`scope.missingL1` 字段与版本号三处过时。
26+
727
- 修复 Codex Desktop 26.727 设置页改用新版导航标记后,被注入器误判为非 ChatGPT 页面并报 `No page matched the expected ChatGPT shell markers` 的问题。双端共享契约现识别 `data-settings-panel-slug="general-settings"`,同时保留旧版外观设置锚点和严格的 `app:` 来源校验;首页与任务页的 L1 校验边界不变。
828
- 修复 Codex Desktop 26.727 更新后主区域、顶栏和顶部渐隐仍保持原生白底,或注入被错误报告为成功的问题(#320#322#326#330)。共享选择器现同时识别旧结构与新版 app-shell 标记,首页和普通任务页必须达到完整 L1 可见性后才会提交成功。
929
- 同 ID 社区主题再次导入时原地升级,不再生成重复的 `id-2` / `id-3` 目录;仅在身份与完整语义指纹都匹配时清理旧后缀副本,缺失或非法 ID 使用双端一致的稳定映射(#318)。

macos/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.5.11
1+
1.5.12

macos/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codex-dream-skin-studio",
3-
"version": "1.5.11",
3+
"version": "1.5.12",
44
"private": true,
55
"type": "module",
66
"scripts": {

macos/scripts/common-macos.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ CODEX_APP_JOB_LABEL="com.openai.codex-dream-skin-studio.app"
2929
INJECTOR_JOB_LABEL="com.openai.codex-dream-skin-studio.injector"
3030
EXPECTED_CODEX_TEAM_ID="2DC432GLL2"
3131
EXPECTED_CODEX_REQUIREMENT="anchor apple generic and certificate leaf[subject.OU] = \"$EXPECTED_CODEX_TEAM_ID\""
32-
SKIN_VERSION="1.5.11"
32+
SKIN_VERSION="1.5.12"
3333
DREAM_SKIN_VALIDATED_RUNTIME_PID=""
3434
DREAM_SKIN_VALIDATED_RUNTIME_BUNDLE=""
3535
DREAM_SKIN_VALIDATED_RUNTIME_EXE=""

macos/scripts/injector.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const stableTestidLiteral = (testid) => {
4343
}
4444
return JSON.stringify(`[data-testid="${testid}"]`);
4545
};
46-
const SKIN_VERSION = "1.5.11";
46+
const SKIN_VERSION = "1.5.12";
4747
// .github/workflows/ci.yml's version-consistency check greps this file for a
4848
// literal `const SKIN_VERSION = "...";` line, so the export stays a separate
4949
// statement rather than an inline `export const`.

macos/tests/run-tests.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ UPDATE_JSON="$({
8686
})"
8787
"$NODE" -e '
8888
const value = JSON.parse(process.argv[1]);
89-
if (value.currentVersion !== "v1.5.11" || value.latestVersion !== "v9.8.7") process.exit(1);
89+
if (value.currentVersion !== "v1.5.12" || value.latestVersion !== "v9.8.7") process.exit(1);
9090
if (!value.updateAvailable) process.exit(1);
9191
if (value.releaseUrl !== "https://github.com/Fei-Away/Codex-Dream-Skin/releases/latest") process.exit(1);
9292
' "$UPDATE_JSON"
@@ -1138,7 +1138,7 @@ CRLF_BACKUP="$TMP/config-crlf-backup.json"
11381138
"$NODE" "$ROOT/scripts/theme-config.mjs" restore "$CRLF_CONFIG" "$CRLF_BACKUP" >/dev/null
11391139
/usr/bin/cmp -s "$CRLF_CONFIG" "$TMP/original-crlf.toml"
11401140

1141-
/usr/bin/env -u HOME /bin/bash -c '. "$1/scripts/common-macos.sh"; [ -n "$HOME" ] && [ "$SKIN_VERSION" = "1.5.11" ]' _ "$ROOT"
1141+
/usr/bin/env -u HOME /bin/bash -c '. "$1/scripts/common-macos.sh"; [ -n "$HOME" ] && [ "$SKIN_VERSION" = "1.5.12" ]' _ "$ROOT"
11421142
if [ "${CODEX_DREAM_SKIN_SKIP_DOCTOR:-0}" = "1" ]; then
11431143
printf 'SKIP: Doctor requires an installed, signed Codex app.\n'
11441144
DOCTOR_RESULT="skipped"

windows/CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44

55
### 修复
66

7+
- Windows 路径穿越校验此前会把合法的、以 `.` 开头的主题文件名也当作可疑路径拒绝;现在能正确区分它们与真正的 `..` 路径穿越(#296)。
8+
- Windows 运行时加载主题前强制校验 `schemaVersion` 必须是数字 `1`,拒绝缺失或未来版本的 schema(#299)。
9+
- 主题包 manifest 时间戳校验拒绝不合法的 RFC 3339 值(#297),双平台共享。
10+
11+
### 内部
12+
13+
- 同步 v1.5.12 版本号,发布上述修复。
14+
- README / SECURITY.md 补充说明换肤期间本机回环 CDP 调试口未做身份验证这一既有安全边界(#18)。
15+
- CI 新增对 shared runtime 与 tools 目录的测试覆盖(#300)。
16+
- 修复共享的 `image-metadata.mjs` 生成源与 macOS 产物不同步的问题:Windows 一侧此前完全没有拿到 `readRawDimensions` 拆分后的能力,现已随双端产物重新生成补上。
17+
718
- 修复 Codex Desktop 26.727 设置页改用新版导航标记后,被注入器误判为非 ChatGPT 页面并报 `No page matched the expected ChatGPT shell markers` 的问题。双端共享契约现识别 `data-settings-panel-slug="general-settings"`,同时保留旧版外观设置锚点和严格的 `app:` 来源校验;首页与任务页的 L1 校验边界不变。
819
- 修复 Codex Desktop 26.727 更新后主区域、顶栏和顶部渐隐仍保持原生白底,或注入被错误报告为成功的问题(#320#322#326#330)。共享选择器现同时识别旧结构与新版 app-shell 标记,首页和普通任务页必须达到完整 L1 可见性后才会提交成功。
920
- 同 ID 社区主题再次导入时原地升级,不再生成重复的 `id-2` / `id-3` 目录;仅在身份与完整语义指纹都匹配时清理旧后缀副本,缺失或非法 ID 使用双端一致的稳定映射(#318)。

windows/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.5.11
1+
1.5.12

windows/scripts/injector.mjs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@ const stableTestidLiteral = (testid) => {
3939
}
4040
return JSON.stringify(`[data-testid="${testid}"]`);
4141
};
42-
const SKIN_VERSION = "1.5.11";
42+
const SKIN_VERSION = "1.5.12";
43+
// .github/workflows/ci.yml's version-consistency check greps this file for a
44+
// literal `const SKIN_VERSION = "...";` line, so the export stays a separate
45+
// statement rather than an inline `export const`.
46+
export { SKIN_VERSION };
4347
const MAX_ART_BYTES = 10 * 1024 * 1024;
4448
const MAX_SAFE_CSS_BYTES = 256 * 1024;
4549
const STRONG_THEME_AUDIT_MS = 30000;

0 commit comments

Comments
 (0)