diff --git a/CodexBarMobile/Research/048-v054-upstream-sync/00-overview.md b/CodexBarMobile/Research/048-v054-upstream-sync/00-overview.md index 484ad19a5..d9bad524f 100644 --- a/CodexBarMobile/Research/048-v054-upstream-sync/00-overview.md +++ b/CodexBarMobile/Research/048-v054-upstream-sync/00-overview.md @@ -2,6 +2,7 @@ Status: `done` Date: 2026-08-22 +Released: 2026-08-23 Branch: `upstream-sync/v0.54.0-mobile.1.22.0` ## 结论 @@ -24,10 +25,12 @@ open upstream-sync issue [#95](https://github.com/o1xhack/CodexBar-Mobile/issues sync/CloudKit/CWL回归、lint、Release build与循环review均通过。随后PR [#99](https://github.com/o1xhack/CodexBar-Mobile/pull/99)在exact current head取得clean Codex review、 zero review threads与green Fast Checks,并合入`mobile-dev`;merge-triggered Final CI -[32614686853](https://github.com/o1xhack/CodexBar-Mobile/actions/runs/32614686853)全部通过。Mac phase 1已生成 -signed/notarized [draft release](https://github.com/o1xhack/CodexBar-Mobile/releases/tag/untagged-b32586f17d599231dee5), -但没有发布live release或appcast。Production schema审计结论为`NO_DEPLOY`。16种old/new组合均如实记录为 -`substituted`,未伪报四台实体设备验证;iOS 1.22.0 (195)也尚未上传TestFlight。 +[32614686853](https://github.com/o1xhack/CodexBar-Mobile/actions/runs/32614686853)全部通过。Mac phase 1生成的 +signed/notarized draft随后通过`./Scripts/release.sh --finalize`公开为 +[v0.54.0.1-mobile.1.22.0](https://github.com/o1xhack/CodexBar-Mobile/releases/tag/v0.54.0.1-mobile.1.22.0), +appcast由commit`f7b86b7ab`发布,公网下载与Sparkle签名/长度均通过回读。Production schema审计结论为 +`NO_DEPLOY`。16种old/new组合仍如实记录为`substituted`,未伪报四台实体设备验证;iOS +`1.22.0 (195)`已Archive、上传并在App Store Connect处理为`VALID`。 ## 分支证据 @@ -37,15 +40,16 @@ signed/notarized [draft release](https://github.com/o1xhack/CodexBar-Mobile/rele `upstream-sync/v0.54.0-mobile.1.22.0`。分支初始 HEAD 与 `origin/mobile-dev` 相同,worktree clean; 后续 Research、merge、实现、版本和测试始终只在该任务分支进行,没有回到 `mobile-dev` 实现。 -后续用户分别授权了PR合入与Mac draft phase 1;因此分支已push、PR已merge、draft tag与draft release已创建。 -仍未授权或执行live Mac release、appcast publication、TestFlight upload或CloudKit Production deploy。 +后续用户分别授权了PR合入、Mac draft phase 1,以及2026-08-23的Mac public release与iOS上传;因此PR已merge, +Mac release/appcast已公开,iOS `1.22.0 (195)`已进入TestFlight且为`VALID`。本轮schema审计为`NO_DEPLOY`, +所以没有执行CloudKit Production deploy;也没有创建或提交iOS 1.22 App Store version。 ## Issue 范围 | Issue | Release / defect | 本轮处置 | |---|---|---| -| [#95](https://github.com/o1xhack/CodexBar-Mobile/issues/95) | upstream `v0.53.0` | 纳入 v0.54.0 train;PR 只关联,不提前关闭;Mac public release 公开后回复 release 链接并手动 `Close as completed` | -| [#97](https://github.com/o1xhack/CodexBar-Mobile/issues/97) | macOS 27 Settings 无法打开 | 由 upstream #3029 修复,并纳入完整 sync 与 Settings 回归 | +| [#95](https://github.com/o1xhack/CodexBar-Mobile/issues/95) | upstream `v0.53.0` | 纳入 v0.54.0 train;public release 后已[回复证据](https://github.com/o1xhack/CodexBar-Mobile/issues/95#issuecomment-5388042853)并手动 `Close as completed` | +| [#97](https://github.com/o1xhack/CodexBar-Mobile/issues/97) | macOS 27 Settings 无法打开 | 由 upstream #3029 修复并纳入完整回归;public release 后已[回复证据与目标系统限制](https://github.com/o1xhack/CodexBar-Mobile/issues/97#issuecomment-5388042982)并手动 `Close as completed` | | monitor 尚未生成 | upstream `v0.54.0` | Releases 权威事实补入同一 train | 历史 closed issues #82–#88 与 Research 047 证明前一 train 已发布至 `v0.52.0`,本轮不重复 diff --git a/CodexBarMobile/Research/048-v054-upstream-sync/02-development.md b/CodexBarMobile/Research/048-v054-upstream-sync/02-development.md index 611717c35..f3b326a85 100644 --- a/CodexBarMobile/Research/048-v054-upstream-sync/02-development.md +++ b/CodexBarMobile/Research/048-v054-upstream-sync/02-development.md @@ -393,7 +393,7 @@ GitHub review,也无需额外发布architecture audit comment;上述四字 整数溢出。对应SwiftData 21/21与CostProvenance 11/11通过,最终Mac Release build在当前HEAD以265.87秒完成。 这部分没有新增CloudKit record/schema字段,`providerPayloadVersion`保持1。 -## GitHub 合入与 Mac draft(2026-08-22) +## GitHub 合入、Mac public release 与 iOS TestFlight(2026-08-22–23) - upstream-sync分支推送后创建PR [#99](https://github.com/o1xhack/CodexBar-Mobile/pull/99); `PR Fast Checks`通过,exact-current head `4535e55bf47c291f22cc9f883fa2f2b6ffb17272`的Codex review @@ -404,10 +404,18 @@ GitHub review,也无需额外发布architecture audit comment;上述四字 - 从clean且与`origin/mobile-dev`一致的merge commit运行`./Scripts/release.sh` phase 1;Apple notarization `d9e78000-ad1b-4133-bb57-7e47d53b42a8`=`Accepted`,签名、staple、Gatekeeper与launch checks通过; - tag `v0.54.0.1-mobile.1.22.0`指向merge commit;GitHub - [draft release](https://github.com/o1xhack/CodexBar-Mobile/releases/tag/untagged-b32586f17d599231dee5) - 已创建并含ZIP/dSYM,远端digest与本地SHA-256一致;未运行`--finalize`,未发布appcast/live release; + draft已通过`./Scripts/release.sh --finalize`公开为 + [public release](https://github.com/o1xhack/CodexBar-Mobile/releases/tag/v0.54.0.1-mobile.1.22.0), + ZIP/dSYM远端digest与本地SHA-256一致;appcast commit为`f7b86b7ab`,Sparkle version为 + `127.1.1.22.0`,公网下载`302 -> 200`; - notarized draft在macOS 26.5.2用exact PID验证issue #97:`Command-,`与状态栏`设置…`均打开同一个 retained Settings window,重复打开稳定态仍为1,目标runtime fault日志为0。macOS 27 beta及 active Space/Stage Manager仍为substituted,未伪报physical pass; -- #95/#97均保持open,等待Mac public release公开后逐项回复正式URL并手动`Close as completed`; -- draft后的证据只在`release/v0.54.0.1-draft-evidence` docs-only分支回写,没有直接修改`mobile-dev`产品代码。 +- #95/#97已分别回复public release、实现与测试证据,并手动`Close as completed`; +- iOS执行`xcodegen generate`后Archive成功,archive回读`1.22.0 (195)`、bundle ID + `com.o1xhack.codexbar.mobile`与CloudKit `Production` entitlement;Xcode cloud-signing upload返回 + `Upload succeeded`,ASC build `f2597f02-7056-4e70-b740-6e8b1eda6ffd`最终为`VALID`; +- 1024源图与archive内`AppIcon60x60@2x.png`均无alpha且视觉正确;ASC `iconAssetToken`存在,Apple CDN + 152x152图标也已人工回看正确; +- draft后的证据只在`release/v0.54.0.1-draft-evidence` docs-only分支回写,没有直接修改`mobile-dev`产品代码; + public/TestFlight终态则在`release/v0.54.0.1-live-closeout`继续以docs-only PR回写。 diff --git a/CodexBarMobile/Research/048-v054-upstream-sync/03-testing.md b/CodexBarMobile/Research/048-v054-upstream-sync/03-testing.md index 5cf000b3e..e0b840093 100644 --- a/CodexBarMobile/Research/048-v054-upstream-sync/03-testing.md +++ b/CodexBarMobile/Research/048-v054-upstream-sync/03-testing.md @@ -1,7 +1,7 @@ # v0.54.0 Upstream Sync 测试证据 Status: `done` -Date: 2026-08-22 +Date: 2026-08-23 ## 版本与范围 @@ -23,14 +23,16 @@ Date: 2026-08-22 | Widget/cost/provider display parity | pass | full iOS unit target覆盖widget/render;最终CloudKit merge + share + widget + CWL等价 + CostTab刷新时钟聚焦156/156;此前CloudKit重建 + incremental cache + merge + share + widget组合185/185 test cases(189 runs);覆盖独立provider envelope发布时间、乱序delta metadata、modern sum、old/new conservative merge、history window comparability、producer bucket time zone、stale daily-only writer、source-window限制、producer-day scan anchor、publication uncertainty extension、跨日session隔离、Today session fallback并入daily、跨producer calendar的reader-relative day聚合、固定reference instant、producer最早午夜主动刷新、metadata-only与empty-section gate | | iOS ledger/blob一致性 | pass | final数据库/时钟专项47/47;此前CloudKit merge + `CWLWriterTests` + `CWLAggregateTests` + `CWLEquivalenceTests`为126/126;覆盖写入去重、equal-time原子刷新、equal-timestamp旧ledger内容会由authoritative blob修复、older payload拒绝、跨设备聚合、producer day/time-zone/source freshness、stored-row/live-summary freshness与显式false优先、producer领先/落后reader、UTC+14/UTC-11极端边界,以及双Mac异时区时按原始device/provider在rollup前映射reader-relative day并精确裁剪;owner tombstone精确删除旧ledger row且clear优先;seed/backfill按cost source time与payload内容判定,不会由新quota envelope复活旧cost,也不会漏掉真正较新的或等时漂移的cost;blob/CWL等价且不会重复映射已归一化ledger日轴;reader day key固定Gregorian并保留timezone | | iOS cost consumer一致性 | pass | full unit 731/731;mixed known/unavailable日的share total/bar/model与diagnostics availability/incomplete状态使用同一保守语义;modern unresolved、stale source、unfinished scan、legacy summary-only unknown cost与aggregate pricing gap均不泄漏Today subtotal;任一明确false会传播到主Cost aggregate,stale source同时限定Today/7天/30天并隐藏compact history;legacy无dated rows的30天汇总不会认证7天分配;不同Mac cost bucket time zone会fail closed并隐藏不可比较的metered/coverage/token mix;窗口不可比较会保守限定7天/30天派生值但不污染可信Today;dashboard model fallback不复活不可用provider breakdown;blob/CWL均保留权威`$0`;legacy sparse-day语义保持兼容;非零partial日保留Active Days证据但不显示为完整金额或Avg/Day;跨时区freshness比较使用producer calendar中的当前instant,并把producer logical day映射为reader相对日轴再跨provider聚合;CWL也按每个原始device/provider在provider/model/service rollup前使用各自producer窗口;历史完整性与Today使用同一固定reference instant,不使用reader-local midnight重切来源窗口;per-provider publication timestamp变化会进入refresh signature并触发重算;reader timezone变化会重启root/Cost/Diagnostics日期时钟;同source day下的旧session day仍会使多Mac Today fail closed,CWL explicit-false按reader-normalized Today key优先于live fallback;missing-provider fallback按cost source timestamp遵守本地clear boundary;OpenRouter provider-level cost envelope在cache中保留、在widget金额汇总中消费,但不生成额外provider row/count或重复identity;较新的provider-level clear tombstone与旧account summary原子选胜,不重复计费 | -| ASC version-state audit | pass | live readback:`1.21.0 (194)` = `PENDING_DEVELOPER_RELEASE` / `MANUAL`,build `194`=`VALID`;因此新candidate为独立`1.22.0 (195)`,未上传TestFlight | +| ASC version-state / TestFlight | pass | `1.21.0 (194)`仍为`PENDING_DEVELOPER_RELEASE` / `MANUAL`;独立train `1.22.0 (195)`已Archive并上传,ASC build `f2597f02-7056-4e70-b740-6e8b1eda6ffd`=`VALID`、`expired=false`、min iOS 17.0;未创建或提交1.22 App Store version | | Four-language localization | pass | 1.22.0独立Latest notes block;1.21.0恢复已审核内容;新增summary含en / zh-Hans / zh-Hant / ja | | iOS 1.22 relabel gate | pass | `xcodegen generate`;4个targets均为`MARKETING_VERSION=1.22.0` / build`195`;i18n source-key、README、CI policy、parser-version与changelog extraction通过;版本/说明diff后未重复full test suites | | CloudKit Production schema audit | `NO_DEPLOY` | production schema成功导出并只读核对;见下节 | | Local review blockers | pass | 累计94项产品finding均已修复;product-source commit `e52a659e0`定向review为`Blockers: 0`;随后1.22版本/说明diff本地自查为0 blocker,full lint与Release build通过 | | GitHub PR / exact-current review | pass | PR [#99](https://github.com/o1xhack/CodexBar-Mobile/pull/99) head `4535e55bf47c291f22cc9f883fa2f2b6ffb17272` 收到 exact-current `Didn't find any major issues`;review threads `0`;`Scripts/check_pr_review_gate.sh 99`通过;merge commit `d7eddbc70d133f34e52d903dbdb4e2e9a1af7581` | | Merge-triggered Final CI | pass | run [32614686853](https://github.com/o1xhack/CodexBar-Mobile/actions/runs/32614686853) `completed/success`:6/6 macOS shards、2/2 Linux CLI build/test/smoke、lint与provenance/path gate全绿;未重复触发第二次full run | -| Mac signed/notarized draft | pass | `./Scripts/release.sh` phase 1完成;Apple notarization submission `d9e78000-ad1b-4133-bb57-7e47d53b42a8`=`Accepted`;最终ZIP stapled/Gatekeeper/Developer ID/launch验证通过;GitHub [draft release](https://github.com/o1xhack/CodexBar-Mobile/releases/tag/untagged-b32586f17d599231dee5)保持`draft=true` | +| Mac signed/notarized public release | pass | phase 1 notarization submission `d9e78000-ad1b-4133-bb57-7e47d53b42a8`=`Accepted`;最终ZIP stapled/Gatekeeper/Developer ID/launch通过;`--finalize`公开[release](https://github.com/o1xhack/CodexBar-Mobile/releases/tag/v0.54.0.1-mobile.1.22.0),appcast commit `f7b86b7ab`,公网ZIP `302 -> 200`,Mac Release Verify [32661301239](https://github.com/o1xhack/CodexBar-Mobile/actions/runs/32661301239)成功 | +| Release CLI assets | pass | release-triggered run [32661301225](https://github.com/o1xhack/CodexBar-Mobile/actions/runs/32661301225) `completed/success`;6/6平台build/smoke/package/upload成功,release共14个assets;fork按workflow契约跳过upstream-only Homebrew dispatch | +| Release issue closeout | pass | #95与#97均在public release后回复正式release/测试证据,并手动`Close as completed`;draft阶段未提前关闭 | | issue #97 packaged Settings QA | substituted | notarized draft在本机macOS 26.5.2实际验证`Command-,`与状态栏`设置…`均打开同一个retained Settings window,重复打开稳定态仍为1个,目标runtime fault日志为0;报告环境macOS 27 beta与active Space/Stage Manager仍未直接实测 | ## 关键命令与结果 @@ -370,7 +372,7 @@ on-disk WAL、busy timeout、foreign keys、incremental vacuum、锁竞争、级 `swift test --no-parallel` 后,权威serial run仅剩3个真实suite/4 issues:pricing provenance、Grok catalog sentinel与architecture fingerprint;均已修复并focused复测,最终serial run另行记录。 -## GitHub handoff、draft release 与 issue #97 QA +## GitHub handoff、public release、TestFlight 与 issue closeout - product PR:[#99](https://github.com/o1xhack/CodexBar-Mobile/pull/99),base `mobile-dev`,head `4535e55bf47c291f22cc9f883fa2f2b6ffb17272`;PR Fast Checks通过,exact-current Codex review明确返回 @@ -383,9 +385,13 @@ sentinel与architecture fingerprint;均已修复并focused复测,最终seria CI-authoritative策略未重复执行,phase 1自身的full lint、release guards与production universal build通过; - notarization:submission `d9e78000-ad1b-4133-bb57-7e47d53b42a8`返回`Accepted`;staple/validate、 pre-distribution checks、stapled bundle direct-launch verification均通过; -- tag:`v0.54.0.1-mobile.1.22.0` peel到上述merge commit;只创建tag和draft,没有执行`--finalize`; -- draft:[`untagged-b32586f17d599231dee5`](https://github.com/o1xhack/CodexBar-Mobile/releases/tag/untagged-b32586f17d599231dee5), - `draft=true`、`prerelease=false`,title为`CodexBar 0.54.0.1 Mobile 1.22.0`; +- tag:`v0.54.0.1-mobile.1.22.0` peel到上述product merge commit;2026-08-23运行 + `./Scripts/release.sh --finalize`,公开 + [release](https://github.com/o1xhack/CodexBar-Mobile/releases/tag/v0.54.0.1-mobile.1.22.0), + `draft=false`、`prerelease=false`、published at `2026-08-23T19:27:35Z`; +- appcast:commit `f7b86b7ab5a743b657d34e0a298f3f0e070b2385`已push到`mobile-dev`;remote feed + 回读title/short version `0.54.0.1`、Sparkle version `127.1.1.22.0`、length `71,847,424`, + EdDSA signature存在且phase 2已验证;ZIP公网链路为`302 -> 200`; - ZIP:`CodexBar-0.54.0.1-mobile.1.22.0.zip`,71,847,424 bytes,SHA-256 `2fe6db8643dc012e090d1b4355986924f603c533eaf8fa936e4cda2e678e6113`; - dSYM:`CodexBar-0.54.0.1-mobile.1.22.0.dSYM.zip`,55,609,020 bytes,SHA-256 @@ -403,14 +409,24 @@ sentinel与architecture fingerprint;均已修复并focused复测,最终seria `showPreferencesWindow`fault。截图:`/tmp/codexbar-v054-draft-settings-reuse.png`; - 限制:本机不是macOS 27 beta,且未做active Space / Stage Manager跨stage直接验证,因此issue #97的 macOS 27环境证据仍标`substituted`,不能写成macOS 27 physical pass; +- iOS archive:`/tmp/CodexBarMobile-20260823-123024.xcarchive`,回读 + `CFBundleShortVersionString=1.22.0`、`CFBundleVersion=195`、bundle ID + `com.o1xhack.codexbar.mobile`;app entitlement为CloudKit `Production`; +- iOS upload:`xcodebuild -exportArchive`返回`Upload succeeded` / `EXPORT SUCCEEDED`;ASC build + `f2597f02-7056-4e70-b740-6e8b1eda6ffd`于`2026-08-23T19:35:00Z`回读为`VALID`、 + `expired=false`、min iOS 17.0、pre-release train `1.22.0`; +- App icon三层验收:1024x1024源图无alpha且视觉正确;archive内`AppIcon60x60@2x.png`为120x120、 + 无alpha且视觉正确;ASC `iconAssetToken`存在,Apple CDN返回152x152正确图标; - issue [#95](https://github.com/o1xhack/CodexBar-Mobile/issues/95)与 - [#97](https://github.com/o1xhack/CodexBar-Mobile/issues/97)在draft阶段均保持`OPEN`;只有Mac public release - 公开后才回复正式release URL并手动`Close as completed`。 + [#97](https://github.com/o1xhack/CodexBar-Mobile/issues/97)在draft阶段均保持`OPEN`;public release后分别 + [回复#95 release证据](https://github.com/o1xhack/CodexBar-Mobile/issues/95#issuecomment-5388042853)与 + [回复#97修复/限制证据](https://github.com/o1xhack/CodexBar-Mobile/issues/97#issuecomment-5388042982), + 并手动`Close as completed`。 ## CloudKit Production schema audit -- 最后published fork tag:`v0.52.0.1-mobile.1.21.0`;candidate tag: - `v0.54.0.1-mobile.1.22.0`(当前仅draft,未公开); +- 审计基线published fork tag:`v0.52.0.1-mobile.1.21.0`;candidate tag: + `v0.54.0.1-mobile.1.22.0`(审计后已公开); - schema keyword grep无新增record type/field/index/query/zone/subscription; - `Shared/iCloud/CloudConstants.swift` 相对published baseline无schema diff; - `providerPayloadVersion` 保持`1`;包括最终新增的optional `sourceUpdatedAt` / `sessionCostIsKnown` / diff --git a/CodexBarMobile/Research/README.md b/CodexBarMobile/Research/README.md index 8981b32a3..9d945b7ab 100644 --- a/CodexBarMobile/Research/README.md +++ b/CodexBarMobile/Research/README.md @@ -46,4 +46,4 @@ This directory contains research documents for features being considered for Cod | 045 | v0.47.0 Upstream Sync + iOS 1.20.0 (issue #66 plus authoritative Releases v0.46.0-v0.47.0 as one train; upstream Mac fleet sync isolated from the existing Mobile sync contract) | `done` | Draft complete; CloudKit Production schema deploy and live publication remain separate authorization gates | [045-v047-upstream-sync/00-overview.md](045-v047-upstream-sync/00-overview.md) | 2026-08-03 | | 046 | v0.49.2 Upstream Sync + iOS 1.21.0 (issues #77-#80 plus authoritative v0.49.2; provider plugins/instance identity, generic details, Fireworks/IBM Bob, fleet dedupe) | `done` | Mac `0.49.2.1` live + signed appcast/CLI assets; iOS `1.21.0 (193)` TestFlight `VALID`; CloudKit `NO_DEPLOY`; substituted 16-mask matrix pass | [046-v049-upstream-sync/00-overview.md](046-v049-upstream-sync/00-overview.md) | 2026-08-17 | | 047 | v0.52.0 Upstream Sync + iOS 1.21.0 build 194 (issues #82-#88 plus authoritative v0.52.0; same iOS marketing version, provider display/sync and project-cost audit) | `done` | Signed/notarized Mac draft ready; CloudKit `NO_DEPLOY`; substituted 16-case matrix pass; push/merge/tag/live release/TestFlight/appcast publish intentionally unperformed | [047-v052-upstream-sync/00-overview.md](047-v052-upstream-sync/00-overview.md) | 2026-08-17 | -| 048 | v0.54.0 Upstream Sync + iOS 1.22.0 build 195 (issue #95 + Settings defect #97; v0.53.0-v0.54.0 as one train; cost provenance/coverage and provider sync audit) | `done` | PR #99 merged + Final CI green; signed/notarized Mac draft ready; CloudKit `NO_DEPLOY`; 16-case fleet matrix and macOS 27 Settings QA remain substituted; live release/appcast/TestFlight unperformed | [048-v054-upstream-sync/00-overview.md](048-v054-upstream-sync/00-overview.md) | 2026-08-22 | +| 048 | v0.54.0 Upstream Sync + iOS 1.22.0 build 195 (issue #95 + Settings defect #97; v0.53.0-v0.54.0 as one train; cost provenance/coverage and provider sync audit) | `done` | Mac `0.54.0.1` public + signed appcast; iOS `1.22.0 (195)` TestFlight `VALID`; #95/#97 completed; CloudKit `NO_DEPLOY`; 16-case fleet matrix and macOS 27 Settings QA remain substituted | [048-v054-upstream-sync/00-overview.md](048-v054-upstream-sync/00-overview.md) | 2026-08-23 |