Repository navigation
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
狀態 / Status
此 PR 保持草稿。原開發分支
feat/ios-media-date-filter的實際 head 是f1e6d938c8704ee2b5098981ea0bd17272285122;該 head 的 CI 終態為 failure,不能稱 PR ready。先前描述頂端的「latest」指歷史批次,現已更正。This PR remains a draft. The actual head of
feat/ios-media-date-filterisf1e6d938c8704ee2b5098981ea0bd17272285122. Its exact-head CI failed, so this PR is not ready. Earlier “latest” headings described historical batches and are superseded by this status.後續整合正在共同
dev,目前e9881e174954ae7f74584c2ed0bac7cfb9e5745a。這不是本 PR 的 head,也沒有把本 PR 改指 dev 或合併 main。最新 Apple-only 驗證:Core、安全檢查、普通 App build/資源、隔離測試 plist 驗證通過;App 825/825 通過,UI 43 案例中仍有 5 個失敗。日期旅程已過;metadata 子選單、錄影模式選擇、後續 shooting-setting 操作及兩個 OS picker 旅程仍待修。Apple-only 不等於完整ci-complete。Subsequent integration is on shared
dev, currentlye9881e174954ae7f74584c2ed0bac7cfb9e5745a. This is not this PR’s head; the PR has not been retargeted and nothing has been merged into main. Latest Apple-only validation: Core, security checks, ordinary app build/resources and test-plist isolation passed; App tests passed 825/825, while 5 of 43 UI cases failed. The date journey passed. Metadata menus, recording-mode selection, a subsequent shooting-setting interaction and two OS picker journeys still need work. Apple-only validation does not satisfy the fullci-completegate.範圍 / Scope
驗證與歷史證據 / Validation and historical evidence
所有結果只屬其 exact SHA,舊綠燈不移轉到目前 head。原失敗、診斷限制與修正過程保留在以下驗收文件和原 CI,沒有將 timeout 延長或刪除業務斷言以換取通過。來源審查/Linux parse 不等同 Xcode、UIKit 或實機執行。
Every result belongs only to its exact SHA; earlier green runs do not validate the current head. Original failures, diagnostic limits and fixes remain in the records and original CI below. Timeouts and business assertions were not relaxed to obtain a pass. Source review/Linux parsing is not Xcode, UIKit or physical-device execution.
裝置狀態與非目標 / Device status and non-goals
目前是合成相機/協定 fixture 與 iOS Simulator 證據,沒有真相機、真 iPhone、USB 或外部 Files/Photos provider 完整驗收。分享入口只表示 App 能交出 ready 副本,不證明外部已保存、hardware fsync、來源 hash 或永久可用。前景發現新檔不保證與本次曝光有因果關係。
Evidence is from synthetic camera/protocol fixtures and iOS Simulator. Physical cameras, iPhones, USB and external Files/Photos providers have not completed acceptance. A share entry means the app can hand off a ready copy, not that an external destination saved it or that hardware fsync, source hashing or permanent availability is established. A newly observed file is not proof of causality with a particular exposure.
不含背景傳輸、自動重連/重試、相機工作隊列續傳、批次相機寫入或 stable 發布。必要 checks、原 PR workflow 與安全設定保留;不以 Apple-only 綠燈取代三端驗收。
Non-goals include background transfer, automatic reconnect/retry, camera-queue resumption, batch camera mutation or a stable release. Required checks, the original PR workflow and security settings remain; Apple-only success cannot replace three-platform acceptance.
發布評估 / Release Assessment
語言對照補全 / Language completion
以下為原描述的翻譯;驗證結果、待辦與「目前」均保留原描述的歷史時點,不代表此次重新執行或更新驗收。
The following translation preserves the original description's historical context, including validation results, pending work and references to “current” status; this edit does not rerun or update acceptance.
Historical preservation and complete English translation / 歷史原文保留與全文英文對照
整理前歷史全文(原文逐字保留) / Complete pre-rewrite historical description (preserved verbatim)
以下歷史全文的「最新」、執行中、成功與失敗都屬各自記錄時點;目前PR狀態以本文頂端的「狀態 / Status」為準,不得把舊head或dev當作本PR現在的head。
All references to “latest,” running, success and failure in this historical record belong to their original recorded times. The current PR status is the Status section at the top; neither an older head nor dev is this PR's present head.
最新 cache rounding 候選
head
f2f6b9a7ad75e0223e6623a1d10076b8c5b75c42,treec27a58d12d12e40857304bd4167f3406ef2aa1f0,真parent502c354。兩檔已經兩次獨立來源review、normal commit/pre-push secret scan通過;Swift/runtime本地NOT_RUN,新exact-head正常CI38124430249 執行中。保留502c354的實際失敗:兩次seek把folder y由-1672.333移到-811再40,尚需152.667pt校正。舊trace未記exact cached/current frame或cache rejection reason,所以浮點cache失效只是來源支持的假說。僅兩處cache gate採1e-6pt finite geometry比較,保留owner/hittable/real-movement拒絕;新增純控制並記錄最後4次既有frame/reuse決策,不額外AX查詢。cameraActions、手勢、timeout與全部業務斷言不變。
既有8秒是新動作准入截止,不是wall completion保證。實測兩seek6.40秒+AX/容器到8.04秒;相鄰151pt校正+確認另約1.51秒。cache候選可能省0.4–0.5秒准入最後校正,但wall估計仍約9.05–9.15秒,不宣稱8秒內完成或根因已修。失敗附件到assert另有約23秒未歸因區間。完整App人工/真機集中驗收仍後置;維持draft,不main/release/KVM。
本輪完整首次連線/恢復群組(2026-10-11)
歷史 head
502c35436de671120461ad21ffa88bec713def14,tree7eeee9541546305fbdf2915434539a64ba127c3b。正常 CI38121823412 已 FAILURE:App344/344、UI33/34。Recovery及batch journey通過;date/folder返回控制line838失敗。下方df3f243綠燈只驗證舊head。本批英/繁中首次 CCAPI/電腦 Bridge 設定、型別化 HTTP/auth/TLS/DNS/timeout 原因、空掃描/取消/失敗/明確重試。成功 fallback 優先;Bridge實際HTTP401與相機錯誤分開,不從訊息字串猜測。URL/token/mode及session歸屬阻止過期回覆。獨立來源審查找到並修正scan/connect可互相覆蓋較新引導的入口競爭,兩方向受控測試驗沒有額外請求、取消與後續明確重試。
新增23個Core/App測試方法(11 Core、10 recovery App、2 async App);Swift編譯/XCTest/UI本地 NOT_RUN,須由本次 exact-head CI 判定。正常 commit/pre-push secret scan、diff及字串來源檢查通過。大字級日期旅程初始 Offline Preview 改用既有8秒connection-scroll helper,保留時間及全部業務斷言;這是來源可達性預防,不宣稱已證實舊runtime根因。
前一 d6e744d/CI38119070005 的原始 FAILURE:Core312/312、App344/344通過,UI28/31通過。Bridge journey line613失敗已由xcresult AX確證為父group identifier覆蓋message/action IDs,實際文字存在;另batch/date旅程line237/729為既有generic known-target長距離scroll未在固定8秒內可達,來源與舊綠head相同,不能聲稱新產品回歸。artifact11695585246完整258379516bytes/SHA2567734eb44c8d5eae3fe83bea8db2b042f10fa9e98084b39247f1adca4a5e90fa5,已核原AX與兩張失敗PNG。本次3檔修正已來源review、normal hooks通過:明確accessibility child containment;generic helper僅快取sole/matched ancestor、遠距seek/近距停止校正與一次有界反向重找,模糊fallback不快取;新增純policy負例與既有frame讀值診斷。Swift/runtime結果待本次新CI;所有原timeout/business assertions及cameraActions保留,不重跑舊head。詳見
docs/ios-connection-recovery.md。完整App人工驗收依使用者指示後置,仍草稿、不合併/發版。以下保留此前媒體群組及失敗證據。最新 head df3f243,tree4a54e5612eb3981f7aa8e4af419a544a3d58c008,完整等於已審本地b7f84c31618e5a10d0273231aa932b07fa3f6ede。真parent0f73af1、原branch nonforce lease/readback已確認。exact-head 正常CI38114883255全部適用gates SUCCESS:Core301/301、App332/332、UI31/31、JVM/APK、secret與aggregate。原始App/UI log確認日期/資料夾長旅程在05:48:46實際PASS、05:54:32 TEST SUCCEEDED;原固定timeout與所有業務斷言保留。這是本head必要軟體CI,舊失敗/因果未知仍保留,完整App/真provider/真機集中驗收尚未完成。
完整離線工作清單本批
本批附帶既有UI failure收斂
先前功能與歷史證據
變更
iOS 已載入素材整合日期區間、評分、相機資料夾與類型挑片、多選、循序準備原檔、部分結果及原生分享入口。保留 recent/all、部分載入與未知 metadata 提示,評分0與unknown分開;資料夾只消費既有公開配對欄位,不新增endpoint或metadata fan-out。
多選採opaque ID的UTF-8身分,保留被篩選或部分清單省略的快照,與單項預覽獨立。批次固定session與選取,逐項準備原檔;首個失敗/取消停止後項,ready-only分享payload保留自身暫存lease,disconnect/新批次不提前刪除正在分享的來源。每檔以原子mkdir建立UUID目錄,安全檔名與有界清理。metadata/評分/保護/刪除回覆保持Unicode等價拼寫ID的載入列及選取互不污染。
原檔完整性沿用已驗修正:HTTP200、無Content-Range、非空regular file、可比較Content-Length一致;gzip/Transfer-Encoding原語意保留、listing size只是進度提示,CCAPI prefix有界FileHandle讀取,取消與partial/framing不另試variant,既存目的檔不刪除。
歷史 head 80eb0b3,tree c0cacc6f8997eed3d691b5e49e389dbce9cf5a7a,與本地 294b41753e44478fb30f56a742b522b5a788987c 完整 tree 相同。
新增原P2重啟恢復:最多100筆已開始準備紀錄與512MiB App自有副本,離線重開可查看真實結果並明確重新分享。保留原download temp,額外copy/manifest失敗只警告,不把有效ready變failed;不保存相機ID/URL/token/原始error、不重連或自動retry。冷started顯示unknown,歷史prepared與現在檔案可用分開;以本機檔案身分、長度與descriptor guards拒絕替換/symlink/FIFO,未知資料保留。clear先世代退休,分享lease保護來源,副本滿額不默默淘汰。
驗證與保留的失敗
accepted base089e71a。日期only d6bc46c CI38084521728 App209/UI21通過,只屬舊head。
rating864038e CI38086464531 App222通過/UI21有1失敗,清日期後返回rating控制的單向scroll;原失敗保留。
folder db70e59 CI38088778129 Core265/App234通過/UI23有1失敗;唯一失敗是既有刪除確認test:484初次actions只wait不scroll。改用既有scrollToInteraction,同5秒及所有刪除assertions不變。
原檔完整性39c01b6 CI38091155128全適用成功:Core277、App234、UI23全過,日期/評分/資料夾雙語與刪除確認實際通過;TEST SUCCEEDED於2026-10-10 22:40:01 UTC。此證據只屬39c01b6。
最新多選批次新增14個App受控測試方法、2個UI旅程來源,涵蓋production CCAPI/Bridge逐項失敗、取消、舊owner/progress、精確ID mutation、60/61載入邊界、原子目錄碰撞與export lease。兩個UI來源驗英繁中大字體離線選取不冒充下載、synthetic Canon兩原檔ready且沒有拍攝。
獨立來源review發現的disabled-control測試假設與String等價ID mutation問題已修正,最終無來源阻擋。10檔1180新增/8刪除,正常commit與pre-push scan通過(14commits672451bytes,0leaks)。
exact head4538b988 的正常CI38092470290終態FAILURE:App248/248通過,UI25中23通過/2失敗;iOS build、Core、JVM及secret成功。新canonical兩原檔旅程通過。失敗為offline batch selection在UITests.swift:28初始offline-preview-button不可互動,以及既有日期/評分/資料夾旅程在:480套用known folder後media-actions-preview-001不可互動。保留失敗並調查,未盲目重跑或放寬斷言。本地仍無Swift/Xcode。
本次失敗artifact11684659715(205762516bytes,SHA2565e70911a376a0c19fc382c00268a9ebdcf5f00c47223a3214166241d3119c3da)可追溯。
前版失敗artifact11683054559(148439908bytes,SHA256ea36856daa2834496f012bc22d122c7c72cd1b9c55a143578a86da248a38f0c6)保留。
後續2檔測試/文件修正已送同分支:離線入口用既有connection scroll/full-hit-frame驗證,共用helper採有界重疊drag與clipped target短修正,全部既有assertions/timeout保留,新增幾何control(UI25→26)。第二失敗仍屬待驗navigation候選,沒有宣稱已證明fixture根因。正常commit/pre-push scan 15commits678119bytes/0leaks;該head正常CI38094370449終態FAILURE:App248/248、UI25/26通過;前輪兩失敗本次通過,唯一失敗為橫向camera workflow的debug-menu導航。
新2檔fixture修正只對camera actions選取含已知row的collection/table/scroll容器,drag限制在固定Disconnect footer上方;保留8秒及全部assertions、一般media scroll不變。新增footer幾何控制(UI26→27)與失敗AX/screenshot。來源與trace支持surface-selection回歸候選,實際footer攔截未取得視覺證明。原artifact11685473556(137850254bytes,SHA256a02a9ae005c6e84b76e0885056d1e2c0e906f5b4237d87795144bb1d726c6967)保留。
正常hook/pre-push16commits685271bytes/0leaks;本地Swift/XCTest NOT_RUN。最新exact-head正常CI38101232791全部適用gates成功:App248/248、UI27/27,原橫向Debug旅程01:29:00通過、TEST SUCCEEDED01:37:59;Core/JVM/APK/secret與ci-complete成功。此結果只驗058d7af,不代表實機或外部分享provider驗收。
最新恢復批次16檔2309新增/10刪除;27個store測試來源、6個production CCAPI/Bridge與不合作取消reply-owner控制,原canonical UI旅程加英/繁中terminate→relaunch→離線兩副本。獨立review的同長度替換/錯誤cleanup、FIFO blocking open、deferred cleanup manifest guard三項均已補負例與修正,重審無剩餘blocking。38個locale key/format parity與diff檢查通過;正常pre-push17commits813407bytes/0leaks。
本地無 Swift/Xcode。2118942 正常 CI38103181314 已終態 FAILURE:production App build、Core、JVM/APK、secret 成功;新增 MediaDeliveryStoreTests.swift:396 的 setAttributes 參數標籤誤寫 atPath,App tests 編譯失敗(job114363199964),App/UI runtime 未開始。保留原失敗。
4檔修正將參數改為 Foundation 的 ofItemAtPath,不放寬任何 assertions;另補 factory 無法建立 store(nil)時的持久副本不可用警告,failure-isolation 控制同時覆蓋 nil/unwritable,原有效下載仍 ready。正常 hook/pre-push18commits815574bytes/0leaks。9f0202b 正常 CI38104167802 終態 FAILURE:Core277/277、App281/281、JVM/APK/secret成功;UI26/27,唯一失敗為日期/評分/資料夾旅程line546套用known folder後8秒內actions未互動。新增store27與owner6已執行,canonical英繁中冷重啟兩副本旅程也通過,並不抵消剩餘failure。
原artifact11690075418(207767217bytes,SHA2561ee278456a5e328e0481ce8570a9bdc8155f014f43db63d0b4f05cbcbf0253a6)已核。其真實synthesized event證明drag在viewport內,沒有missing-origin bug;4次lazy search耗盡原期限,缺最終targetframe,根因未確證。
2檔fixture/證據候選改generic導航為官方.fast,維持原8秒、80%重疊、停止hold及全部27既有test bodies,camera-actions仍.default。新增1純端點幾何control,失敗時保存有界frame/current-resolved screenPoint及截圖;未改production版面。owner/parent來源review無blocking,正常pre-push19commits824344bytes/0leaks。本地Swift/runtime NOT_RUN;39d2de7正常CI38106141493已FAILURE:App281/281,UI27/28;五星rating Form不可互動。新增圖像與trace確認helper未涵蓋Form的collection/table且全App fallback未扣固定header。原artifact11690083759/167194881bytes/SHAdfff2b4c7cd767fa039e35eb12789170b554c22a544daa1e0da8d947955aa56f保留。
範圍與 Release Assessment
原生分享入口只交付App內ready暫存副本,不將activity完成回覆當作外部已保存。新UI來源尚未呈現/關閉/再次開啟UIKit分享sheet(包括iPad),真Files/Photos provider與實機仍未驗。同名檔在本機隔離,外部provider如何處理同名不保證。只有有界已開始項目紀錄與自有副本恢復,無相機工作隊列續傳/自動重連/背景傳輸/批次相機寫入。完整App人工與真機驗收依使用者指示開發後集中,不宣稱P2或完整產品已驗收。
Latest release v0.12.0 Development Preview;整批挑片/多選能力屬minor。維持draft,不合併main、不發版、不改KVM;release HOLD保留。詳見 docs/validation/ios-media-batch-delivery-2026-10-10.zh-TW.md、ios-original-download-integrity-2026-10-10.zh-TW.md及既有挑片文件。
恢復細節:docs/validation/ios-prepared-media-recovery-2026-10-11.zh-TW.md。檔案身分改變(包含backup restore)保守停用分享;metadata核對不是來源hash/可解碼/fsync。512MiB不含既有transport暫存;未知孤兒不自動收養或刪除。
本輪完整 P2 前景 JPEG 準備
使用者明確Start後,直接CCAPI取得兩份完整baseline(至少1秒)、只觀察新JPEG ID、兩次新鮮正整數size穩定後單次canonical GET,保留App副本,再由使用者自行Share到外部。Bridge/USB/preview與舊transport明確unsupported。inventory上限1000、512請求/容器、JSON2MiB/30秒;known4096/pending20/results100、新項30秒,首個不確定停止,不自動retry/背景恢復/重連,不觸發快門。
新strict transport不跟redirect、串流decoded上限與exact bytes;原manual API bodies不變。store先容量admission、finish仍核實際bytes;保留失敗保留有效temporary export。Stop等不合作I/Osettle,disconnect token退休,舊結果/defer不改新UI;manual/media/latest read與live-view restart admission有雙向受控控制,安全快門釋放保留。暫存重新Start/disconnect會退休,UI明示先分享;payload強lease仍保護已啟分享。
同批收斂generic navigation:辨識collection/table/scroll、target祖先、扣navigation/tab/toolbar,不再全App拖曳;lazy target先exists再讀identifier。原28UI方法與timeout/assertions全保留,新1真實frame幾何control。這是待runtime候選,不宣稱此前原因全確證。
26檔完整批次經Core/App獨立source review,admission findings與負例已修;新Core24方法,App plan8/controller11/integration11/store1,預期全套Core301/App312/UI29,實際以新exact-head CI為準。本地無Swift/Xcode,新編譯/測試NOT_RUN;607雙語keys、37新keys格式與whitespace/版本檢查通過,正常pre-push20commits1028083bytes/0leaks。無新KVM動作,原classifier/必需gates不變。
詳見docs/validation/ios-foreground-original-preparation-2026-10-11.zh-TW.md。完整App/真機/真provider集中驗收仍待完成,不main/release;releaseHOLD不變。
80eb 首次前景批次失敗與本次修正
80eb CI38110150085 FAILURE:App312/312成功,Core300/301、UI28/29。Core chunked overflow fixture等待未受保證的55-byte callback,三連鎖assert失敗;改完整chunked body無Content-Length且cap+1,精確byte-limit錯誤與獨占temp目錄清理/正例保留,request timeout2不變。此負例不宣稱必已寫partial body,其他ownership/destination/cancel controls保留。
UI同長挑片旅程known-folder Apply後line619 target在y904..952,viewport底874;3drag共9.79秒(容器查詢0.79、gesture3.78、idle5.22),原8秒不得加長。已核真PNG artifact11692015945 SHAaa14f07d40f87179480c24ff78f1e4cc72649ef633a0e06d13934cd57f0342f3。候選只在generic未知/無效target frame讓同clipped端點fast drag terminal hold=0作discovery;known frame與cameraActions保留0.1和既有速度/座標,所有29舊test bodies/7helpers不變,新增1純策略控制。慣性效果尚待新runtime,不能由puretest推定。
本地Swift/Xcode NOT_RUN;owner獨立完整source review及parent review無blocking,normal hook/prepush21commits1038530bytes0leaks。四檔同批正常nonforce,真parent80eb,未main/release/KVM。上文舊head成功僅對原head有效;完整App/OS provider/真機集中驗收仍後置。
整理前歷史全文英文對照 / Full English translation of the pre-rewrite history
Latest cache-rounding candidate
Head
f2f6b9a7ad75e0223e6623a1d10076b8c5b75c42, treec27a58d12d12e40857304bd4167f3406ef2aa1f0, actual parent 502c354. The two files passed two independent source reviews and normal commit/pre-push secret scans. Local Swift/runtime: NOT_RUN. New normal exact-head CI38124430249 is running at this historical point.Preserve the actual 502c354 failure: two seeks moved folder y from -1672.333 to -811 and then 40, leaving a 152.667 pt correction. The old trace did not record exact cached/current frames or cache-rejection reasons, so floating-point cache invalidation remains only a source-supported hypothesis. Only two cache gates adopt finite geometry comparison with a 1e-6 pt tolerance; owner, hittability and real-movement rejection remain. New pure controls record the last four existing frame/reuse decisions without additional AX queries. cameraActions, gestures, timeouts and all business assertions are unchanged.
The existing eight seconds is an admission deadline for new actions, not a wall-clock completion guarantee. The measured two seeks took 6.40 seconds, reaching 8.04 seconds with AX/container work; the neighboring 151 pt correction plus confirmation took another approximately 1.51 seconds. The cache candidate might save 0.4–0.5 seconds to admit the final correction, but estimated wall time remains approximately 9.05–9.15 seconds. There is no claim of completion within eight seconds or of a fixed root cause. Approximately 23 seconds between the failure attachment and assertion remain unattributed. Complete manual app/physical-device acceptance is still deferred; retain draft status, with no main/release/KVM action.
Complete first-connection/recovery group for this batch (2026-10-11)
Historical head
502c35436de671120461ad21ffa88bec713def14, tree7eeee9541546305fbdf2915434539a64ba127c3b. Normal CI38121823412 ended in FAILURE: App 344/344, UI 33/34. Recovery and batch journeys passed; the date/folder return control failed at line 838. The df3f243 green result below validates only that older head.This batch includes English/Traditional Chinese first-time CCAPI/computer Bridge setup; typed HTTP/auth/TLS/DNS/timeout reasons; empty discovery, cancellation, failure and explicit retry. Successful fallback takes priority. Actual Bridge HTTP401 is separated from camera errors rather than guessed from message text. URL/token/mode and session ownership reject stale replies. Independent source review found and corrected an admission race in which discovery and connection could overwrite newer guidance. Controlled tests in both directions verify no additional requests, cancellation and subsequent explicit retry.
There are 23 new Core/App test methods: 11 Core, 10 recovery App and two async App. Local Swift compilation/XCTest/UI: NOT_RUN; this batch's exact-head CI must determine results. Normal commit/pre-push secret scans, diff and string-source checks passed. The large-text date journey's initial Offline Preview uses the existing eight-second connection-scroll helper, preserving the time budget and every business assertion. This is a source-level reachability precaution, not a claim that the old runtime root cause was proven.
The preceding d6e744d/CI38119070005 original FAILURE is retained: Core 312/312 and App 344/344 passed; UI 28/31 passed. xcresult AX confirmed that the Bridge journey failure at line 613 was caused by the parent group identifier overriding message/action IDs; the actual text existed. The batch/date journeys at lines 237/729 involved the existing generic known-target long-distance scroll failing to reach the target within the fixed eight seconds. That source was the same as the older green head, so it cannot be called a new product regression. Artifact 11695585246 was fully verified: 258379516 bytes, SHA256 7734eb44c8d5eae3fe83bea8db2b042f10fa9e98084b39247f1adca4a5e90fa5; the original AX and two failure PNGs were inspected. The three-file correction passed source review and normal hooks: explicit accessibility child containment; generic-helper caching only for a sole/matched ancestor, long-distance seeks, near-target stopping correction and one bounded reverse search, with no caching of ambiguous fallback; new pure-policy negative cases and diagnostics using existing frame reads. Swift/runtime results await the new CI. All original timeouts/business assertions and cameraActions are retained, without rerunning the old head. See
docs/ios-connection-recovery.md. Complete manual app acceptance remains deferred as instructed by the user; the PR remains draft, with no merge/release. Earlier media groups and failure evidence are preserved below.Latest head at this historical point: df3f243, tree 4a54e5612eb3981f7aa8e4af419a544a3d58c008, fully identical to the reviewed local b7f84c31618e5a10d0273231aa932b07fa3f6ede. Actual parent 0f73af1 and the original branch's non-force lease/readback were confirmed. Normal exact-head CI38114883255 reported SUCCESS for all applicable gates: Core 301/301, App 332/332, UI 31/31, JVM/APK, secret and aggregate. Original App/UI logs confirm the long date/folder journey actually passed at 05:48:46 and TEST SUCCEEDED at 05:54:32, retaining original fixed timeouts and all business assertions. This is required software CI for this head only. Older failures and unknown causality remain recorded; complete app/real-provider/physical-device acceptance has not been completed.
Complete offline worklist in this batch
Containing the existing UI failure in this batch
Earlier features and historical evidence
Changes
For loaded iOS media, integrate date-range, rating, camera-folder and type selection, multiselection, sequential original preparation, partial results and a native share entry. Preserve recent/all, partially loaded lists and unknown-metadata notices, distinguishing rating 0 from unknown. Folder filtering consumes only existing public paired fields, without new endpoints or metadata fan-out.
Multiselection uses opaque IDs with UTF-8 identity, retains snapshots omitted by filters or partial lists and remains independent from single-item preview. A batch freezes its session and selection and prepares originals one by one. The first failure/cancellation stops subsequent items. Ready-only share payloads keep their own temporary leases, so disconnect/new batches do not prematurely delete active share sources. Each file gets an atomic mkdir-created UUID directory, a safe filename and bounded cleanup. Metadata/rating/protection/deletion replies keep loaded rows and selections with Unicode-equivalent ID spellings from contaminating one another.
Original integrity retains previously verified corrections: HTTP200, no Content-Range, a nonempty regular file and matching comparable Content-Length. Original gzip/Transfer-Encoding semantics remain; listing size is only a progress hint. CCAPI prefix reads use bounded FileHandle access. Cancellation and partial/framing errors do not try another variant, and existing destination files are not deleted.
Historical head 80eb0b3, tree c0cacc6f8997eed3d691b5e49e389dbce9cf5a7a, has a complete tree identical to local 294b41753e44478fb30f56a742b522b5a788987c.
Add the original P2 restart recovery: up to 100 records of started preparation and 512 MiB of app-owned copies. Offline reopening shows actual results and allows explicit resharing. Retain original download temporary files; additional copy/manifest failures only warn and do not change valid ready results to failed. Do not save camera IDs/URLs/tokens/raw errors, reconnect or automatically retry. Cold started records display unknown; historical prepared status is separate from present file availability. Local file identity, length and descriptor guards reject replacements/symlinks/FIFOs, while unknown data is retained. Clear first retires the generation. Share leases protect source files; full copy capacity does not silently evict data.
Validation and retained failures
Accepted base: 089e71a. Date-only d6bc46c CI38084521728 passed App 209/UI 21; this applies only to that older head.
Rating 864038e CI38086464531 passed App 222, with one of 21 UI cases failing on the one-direction scroll back to the rating control after clearing the date. Preserve the original failure.
Folder db70e59 CI38088778129 passed Core 265/App 234, with one of 23 UI cases failing. The only failure was the existing deletion-confirmation test at line 484, initially waiting for actions without scrolling. Use the existing scrollToInteraction while preserving the same five seconds and all deletion assertions.
Original integrity 39c01b6 CI38091155128 succeeded for every applicable gate: Core 277, App 234 and UI 23 all passed. Bilingual date/rating/folder journeys and deletion confirmation actually passed; TEST SUCCEEDED at 2026-10-10 22:40:01 UTC. This evidence belongs only to 39c01b6.
The latest multiselection batch at this historical point adds 14 controlled App test methods and two UI journey sources, covering production CCAPI/Bridge per-item failure, cancellation, old owners/progress, exact-ID mutation, the 60/61 loaded-item boundary, atomic-directory collisions and export leases. The two UI sources verify English/Traditional Chinese large-text offline selection without pretending it downloaded anything, and a synthetic Canon journey with two originals ready and no capture.
Disabled-control test assumptions and String-equivalent ID mutation issues found by independent source review were corrected, leaving no source-review blockers. Ten files, 1180 insertions/eight deletions. Normal commit/pre-push scans passed: 14 commits, 672451 bytes, zero leaks.
Normal exact-head CI38092470290 for 4538b98 ended in FAILURE: App 248/248 passed, UI 23/25 passed with two failures; iOS build, Core, JVM and secret checks succeeded. The new canonical two-original journey passed. Failures were the initial offline-preview-button being noninteractive in offline batch selection at UITests.swift:28, and media-actions-preview-001 being noninteractive after applying a known folder in the existing date/rating/folder journey at line 480. Retain and investigate failures without blind reruns or relaxed assertions. Swift/Xcode remains unavailable locally.
This failure's artifact 11684659715 is traceable: 205762516 bytes, SHA256 5e70911a376a0c19fc382c00268a9ebdcf5f00c47223a3214166241d3119c3da.
Retain the preceding failure artifact 11683054559: 148439908 bytes, SHA256 ea36856daa2834496f012bc22d122c7c72cd1b9c55a143578a86da248a38f0c6.
A subsequent two-file test/documentation correction was sent to the same branch. The offline entry uses existing connection-scroll/full-hit-frame validation; the shared helper uses bounded overlapping drags and short clipped-target corrections. Preserve all existing assertions/timeouts and add a geometry control, changing the UI count from 25 to 26. The second failure remains an unverified navigation candidate, not a proven fixture root cause. Normal commit/pre-push scans: 15 commits, 678119 bytes, zero leaks. Normal CI38094370449 for that head ended in FAILURE: App 248/248 and UI 25/26 passed. Both previous failures passed this time; the sole remaining failure was debug-menu navigation in the landscape camera workflow.
A new two-file fixture correction changes only camera actions: choose the collection/table/scroll container containing the known row, and constrain drags above the fixed Disconnect footer. Preserve eight seconds and all assertions, with ordinary media scrolling unchanged. Add a footer geometry control, increasing UI cases from 26 to 27, plus failure AX/screenshot evidence. Source and trace support a surface-selection regression candidate; actual footer interception was not visually proven. Retain artifact 11685473556: 137850254 bytes, SHA256 a02a9ae005c6e84b76e0885056d1e2c0e906f5b4237d87795144bb1d726c6967.
Normal hook/pre-push scans: 16 commits, 685271 bytes, zero leaks. Local Swift/XCTest: NOT_RUN. The latest normal exact-head CI38101232791 at this historical point passed all applicable gates: App 248/248, UI 27/27; the original landscape Debug journey passed at 01:29:00, with TEST SUCCEEDED at 01:37:59. Core/JVM/APK/secret and ci-complete succeeded. This result validates only 058d7af, not physical devices or external share-provider acceptance.
The latest recovery batch at this historical point has 16 files, 2309 insertions/ten deletions; 27 Store test sources and six production CCAPI/Bridge and uncooperative-cancellation reply-owner controls. The original canonical UI journey adds English/Traditional Chinese terminate→relaunch→two offline copies. Independent review's three issues—same-length replacement/error cleanup, FIFO blocking open and deferred-cleanup manifest guards—were all corrected with negative cases; rereview found no remaining blockers. Thirty-eight locale-key/format-parity checks and diff checks passed. Normal pre-push scans: 17 commits, 813407 bytes, zero leaks.
No local Swift/Xcode. Normal CI38103181314 for 2118942 ended in FAILURE: production App build, Core, JVM/APK and secret checks succeeded. The new MediaDeliveryStoreTests.swift:396 incorrectly labeled a setAttributes parameter atPath, so App tests failed to compile in job114363199964; App/UI runtime never began. Preserve the original failure.
A four-file correction uses Foundation's ofItemAtPath parameter without relaxing assertions. It also adds a persistent-copy-unavailable warning when the factory cannot create a store (nil), with failure-isolation controls covering both nil and unwritable stores while the valid original download remains ready. Normal hook/pre-push scans: 18 commits, 815574 bytes, zero leaks. Normal CI38104167802 for 9f0202b ended in FAILURE: Core 277/277, App 281/281 and JVM/APK/secret checks succeeded; UI 26/27 passed. The sole failure was actions not becoming interactive within eight seconds after applying a known folder at line 546 of the date/rating/folder journey. The 27 new Store tests and six owner controls ran, and the canonical English/Traditional Chinese cold-restart journey with two copies passed; these do not cancel the remaining failure.
Original artifact 11690075418 was verified: 207767217 bytes, SHA256 1ee278456a5e328e0481ce8570a9bdc8155f014f43db63d0b4f05cbcbf0253a6. Its real synthesized event proves the drag was within the viewport, with no missing-origin bug. Four lazy searches exhausted the original deadline; the final target frame was missing, so the root cause was not confirmed.
A two-file fixture/evidence candidate switches generic navigation to the official .fast speed, preserving the original eight seconds, 80% overlap, stopping hold and all 27 existing test bodies; camera-actions stays .default. Add one pure endpoint-geometry control and save bounded frame/current-resolved screenPoint data plus a screenshot on failure, without changing production layout. Owner/parent source review found no blockers. Normal pre-push scans: 19 commits, 824344 bytes, zero leaks. Local Swift/runtime: NOT_RUN. Normal CI38106141493 for 39d2de7 ended in FAILURE: App 281/281, UI 27/28; the five-star rating Form was noninteractive. New images and traces confirmed that the helper omitted the Form's collection/table, and full-app fallback did not subtract the fixed header. Retain artifact 11690083759, 167194881 bytes, SHA dfff2b4c7cd767fa039e35eb12789170b554c22a544daa1e0da8d947955aa56f.
Scope and Release Assessment
The native share entry delivers only ready temporary app copies; an activity-completion callback is not treated as proof of external saving. The new UI sources have not yet presented/dismissed/reopened the UIKit share sheet, including on iPad. Real Files/Photos providers and physical devices remain unverified. Same-name files are isolated locally, without guarantees about how external providers handle duplicate names. Recovery covers only bounded started-item records and app-owned copies; there is no camera-work-queue resumption, automatic reconnection, background transfer or batch camera mutation. Complete manual app/physical-device acceptance is consolidated after development as instructed by the user; do not claim P2 or the full product has passed acceptance.
Latest release at this historical point: v0.12.0 Development Preview. The complete filtering/multiselection batch is minor-level product scope. Retain draft status, with no main merge, release or KVM change; release HOLD remains. See docs/validation/ios-media-batch-delivery-2026-10-10.zh-TW.md, ios-original-download-integrity-2026-10-10.zh-TW.md and the existing selection documents.
Recovery details: docs/validation/ios-prepared-media-recovery-2026-10-11.zh-TW.md. File-identity changes, including backup restoration, conservatively disable sharing. Metadata checks are not source hashing, decodability or fsync guarantees. The 512 MiB limit excludes existing transport temporary files; unknown orphans are neither automatically adopted nor deleted.
Complete P2 foreground JPEG preparation in this batch
After an explicit user Start, direct CCAPI obtains two complete baselines at least one second apart, observes only new JPEG IDs and performs one canonical GET after two fresh stable positive-integer size observations. Retain an app copy, then let the user explicitly Share externally. Bridge/USB/preview and old transports are explicitly unsupported. Limits: inventory 1000, 512 requests/container, JSON 2 MiB/30 seconds; known 4096, pending 20, results 100, new item 30 seconds. Stop at the first uncertainty without automatic retry/background recovery/reconnection or shutter activation.
The new strict transport does not follow redirects, caps streamed decoded bytes and checks exact bytes; original manual API bodies are unchanged. The store admits capacity first and still verifies actual bytes at finish. A retention failure preserves the valid temporary export. Stop waits for uncooperative I/O to settle. Disconnect retires the token; old results/defer blocks do not change the new UI. Manual/media/latest reads and live-view-restart admission have bidirectional controlled tests, preserving safety shutter release. Restarting or disconnecting retires temporary files, and the UI explicitly says to share first; a strong payload lease still protects an already-started share.
The same batch refines generic navigation: recognize collection/table/scroll containers and target ancestors, subtract navigation/tab/toolbar regions and stop dragging the whole app. For lazy targets, check exists before reading identifier. Preserve all original 28 UI methods, timeouts and assertions, adding one real-frame geometry control. This is a candidate awaiting runtime validation, not a claim that all prior causes were confirmed.
The complete 26-file batch received independent Core/App source reviews; admission findings were corrected with negative cases. New methods: 24 Core; App plan eight, controller 11, integration 11, Store one. Expected full suite: Core 301/App 312/UI 29; actual results must come from the new exact-head CI. No local Swift/Xcode; new compilation/tests: NOT_RUN. Checks passed for 607 bilingual keys, 37 new-key formats, whitespace and versions. Normal pre-push scans: 20 commits, 1028083 bytes, zero leaks. No new KVM action; original classifier/required gates are unchanged.
See docs/validation/ios-foreground-original-preparation-2026-10-11.zh-TW.md. Complete app/physical-device/real-provider consolidated acceptance remains pending, with no main/release action; release HOLD is unchanged.
First foreground-batch failure at 80eb and this correction
80eb CI38110150085 ended in FAILURE: App 312/312 succeeded, Core 300/301 and UI 28/29. The Core chunked-overflow fixture waited for an unguaranteed 55-byte callback, causing three cascading assertion failures. Change it to a complete chunked body with no Content-Length and cap+1; preserve the exact byte-limit error, exclusive temporary-directory cleanup and positive controls, with request timeout 2 unchanged. This negative case does not claim that a partial body must already have been written. Other ownership/destination/cancellation controls remain.
In the UI long-selection journey after known-folder Apply, the target at line 619 was at y904..952, below the viewport bottom of 874. Three drags took 9.79 seconds total: 0.79 container queries, 3.78 gestures, 5.22 idle. The original eight seconds must not be extended. The real PNG was verified: artifact 11692015945, SHA aa14f07d40f87179480c24ff78f1e4cc72649ef633a0e06d13934cd57f0342f3. Only generic unknown/invalid target frames use the same clipped endpoints with fast drag and terminal hold=0 for discovery. Known frames and cameraActions retain 0.1 and the existing speed/coordinates. All 29 old test bodies/seven helpers remain unchanged, with one new pure-policy control. Inertia effects await new runtime evidence and cannot be inferred from pure tests.
Local Swift/Xcode: NOT_RUN. Independent complete owner source review and parent review found no blockers. Normal hook/pre-push scans: 21 commits, 1038530 bytes, zero leaks. The four-file batch uses a normal non-force update with actual parent 80eb, with no main/release/KVM action. Older head successes above apply only to their original heads. Complete app/OS-provider/physical-device consolidated acceptance remains deferred.
歷史提交主旨對照 / Historical commit subject translations
僅補譯,不改commit或SHA。Translation only; commits and SHAs are unchanged.
864038e440d86e63fde4ca86c67f66ceae4ba138db70e5986d3256fb030211fd07bd5da0499273a34538b9880bcfc4dddd6b35c36379b040b0c34520d231d07a4a550a684926eb95615cb888006ff33d058d7af97c66ce926076d6d646fbdbea159f2840d6e744ddcece5f4fb05426ecadb86ec303732533502c35436de671120461ad21ffa88bec713def14f2f6b9a7ad75e0223e6623a1d10076b8c5b75c423a80fadbb21ded1be9056b7a3c1a67d2615ef5243cfa1b59fd74e39f2b1ee2710bf7aa3d3f6be4e9260b14e7d76876b1ab152c69d2814bea118c4f84810291892e390906c4bf66d5804b6be22e37c923f1a05db192e61c574bfd7eb64ed5c2a168fc580a45251eb00f496fa510160159c8a0f4486d7df76a0023ad0994ad30c3717b235fbff0bda38bd26e5c