Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions CHANGELOG.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,26 @@ All notable PocketRoot changes are recorded here. Semantic Versioning begins wit

### Changed

- Host App Files UI smoke now waits for the expected rename, delete, or share
action to enter the accessibility tree after pressing a file or directory.
If the first synthesized press does not open the menu, it retries once with
newly validated App and entry frames, then fails closed with frame evidence
instead of tapping a context-menu button that does not yet exist. File and
folder creation also dismisses system keyboard onboarding before submitting
a freshly validated Create frame at most twice, then stops the test if the
expected entry never appears instead of cascading into missing-disclosure
failures. Integrated-workspace verification now writes per-run unique guest
contents and treats their exact file preview as authoritative when terminal
accessibility text lags, and the document-picker flow rechecks whether
Browse already restored the Host destination before interacting with a
disappearing local-location cell. Host and Quick Start keyboard cleanup now
taps validated snapshot frames and gives onboarding UI a bounded dismissal
window instead of targeting elements that disappear during XCTest
interruption handling. The shared UI runner also recognizes an XCTest
Accessibility-load timeout before any test method runs as Simulator
infrastructure failure, restarting only its own temporary Simulator for one
bounded retry; caller-owned devices, ordinary assertions, and a second
failure still fail closed immediately.
- Tightened the untagged `v0.2.0` source-candidate audit:
`--allow-source-blocked` accepts only final source-release authorization as
unsatisfied, and fails on any pinned-gate-set, NOTICE, license, public API
Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,19 @@ PocketRoot 的重要变化记录在这里,并从首个公开版本开始遵循

### Changed

- Host App 文件 UI smoke 现在会在长按文件或目录后,有界等待预期的重命名、删除或
分享菜单动作进入 accessibility tree;若首次合成长按未打开菜单,会使用重新校验的
App/条目 frame 再试一次,仍失败则带 frame 证据 fail-closed,避免直接点击尚不存在
的上下文菜单按钮造成间歇性 XCTest 失败。创建文件/目录前也会关闭系统键盘 onboarding,
并在重新校验的 Create frame 上最多提交两次;目标条目未出现时立即停止当前用例,
不再继续查询不存在的 disclosure 并产生级联误报。集成 Workspace 每次写入唯一 guest
内容,在终端 accessibility 文本滞后时改用该内容的精确预览作为权威结果;系统文件
选择器也会在 Browse 后先复核是否已经恢复到 Host 目录,再决定是否操作正在消失的
本地位置条目。Host 与 Quick Start 的键盘清理会点击已校验的快照 frame,并给
onboarding UI 一个有界退场窗口,避免 XCTest interruption handling 期间直接操作
正在消失的元素。通用 UI runner 也会把 XCTest 在测试方法执行前报告的
Accessibility 加载超时识别为模拟器基础设施故障,仅对自己创建的临时 Simulator
重启并有界重试一次;调用方提供的设备、普通测试断言和第二次失败仍立即 fail-closed。
- 收紧 `v0.2.0` 未打 tag 源码候选审计:`--allow-source-blocked` 只接受最终源码发布
授权这一项尚未满足,固定门禁集合、NOTICE、许可证、公开 API 状态或源码边界漂移
都会失败;CI 和受信 tag 工作流只上传带 commit、archive SHA-256、文件统计和精确
Expand Down
6 changes: 3 additions & 3 deletions Compliance/Release/experimental-v0.2.0/COMPOSITION.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"Scripts/inject-demo-rootfs.sh": "3982b5382b0d1e13e0c8e8a5bb5404c5bad1dfc4d6e9cd23a39e3395a83087bb",
"Scripts/scan-release-artifact.rb": "48f27ab280491864228393e1675fe3a2889cbd616f79e3cb16bae7efedf647c0",
"Scripts/run-host-app-ui-smoke.sh": "c8b11b1bf3a467fd10ed2c4124a72396b0a803e98f155d1d709fab46b59eede1",
"Scripts/run-ios-example-ui-smoke.sh": "147fa58dc255e28fd63b0a7c62ed747b2215df652df3a0bdf5585eee4b49d395",
"Scripts/run-ios-example-ui-smoke.sh": "921d7e5cfd5853d6653997e06c7f769d5076c1becd798c6e6a418f0d79538f12",
"Scripts/run-quick-start-ui-smoke.sh": "acf26d68fc37250e24911c2d23791a0d12ff06a624dedcefee0ed7905bc31af2",
"Scripts/run-external-consumer-ui-smoke.sh": "d9544ede3ecbad8d42a114015fa77071d31aa84aafc1cbe0f0f001453b1a4d0d",
"Scripts/run-host-app-device-ui-smoke.sh": "2f934265cb46145b27bb26e0d7e84acebc14290602e23cd1ab8f222aef68ed1f",
Expand Down Expand Up @@ -120,10 +120,10 @@
"Examples/PocketRootDemo/Sources/PocketRootDemo/Shared/UI/PlaceholderViewController.swift": "48e0f6462228a66face2aef51f9bd39ec02923c4d1c01b6b34f920948998f2b8",
"Examples/PocketRootHostApp/Sources/HostApp.swift": "0c36bd3104ddc5bebb9e23675a44a92e3ce4aec2c1461b3e182d86d1a75159c9",
"Examples/PocketRootHostApp/Sources/Info.plist": "711b38923f11fdb4ceb7d28cb90a51674afec0a64786a20f9bd68e3f406f8d26",
"Examples/PocketRootHostApp/UITests/PocketRootHostAppUITests.swift": "cfa59f0489f94b14b242ffa1aa9f75e0eeda99c74ca487318e0ea096bbef8d61",
"Examples/PocketRootHostApp/UITests/PocketRootHostAppUITests.swift": "d925256c6207a0ef676c260fc023a41d86df5e5c8d494957b0102c2266a3a228",
"Examples/PocketRootQuickStartApp/Sources/Info.plist": "b3c0c96e89db99c72c9f020590b1c5cdc0c927fd3af4b6ae7865abfdc81049b8",
"Examples/PocketRootQuickStartApp/Sources/QuickStartApp.swift": "1c77c9229281d0d1f9fbe3678bcc9995fff8c7d2189f4c6152daaa2999683fb6",
"Examples/PocketRootQuickStartApp/UITests/PocketRootQuickStartAppUITests.swift": "828471c84386dc8ddba23ecadc3618ccd559d92084ab762f4ef0832c3e3d5f59",
"Examples/PocketRootQuickStartApp/UITests/PocketRootQuickStartAppUITests.swift": "9d1c2a16adbd6918ea86d36808bfe360047ecb222d38afca2efd8db2d2eaf373",
"Tests/Integration/ExternalConsumerApp/Sources/ExternalConsumerApp.swift": "580fa504ff16695c53d1d40a41f1a8531da21f961906a394394a0649c40ce11b",
"Tests/Integration/ExternalConsumerApp/UITests/ExternalConsumerAppUITests.swift": "0fa46c32d482c20d5bc4cf0aae93c6364060cf7c6b7cdca5ab99fe8400da7ab7",
"Spikes/PocketRootIshRuntimeCompileSpike/PocketRootIshRuntimeCompileSpike.swift": "829a9ef79d67cb93aae5fbea32561c5c5497a7a017922bb1ebb344b4c0c32da8",
Expand Down
2 changes: 1 addition & 1 deletion Compliance/Release/experimental-v0.2.0/SBOM.spdx.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"dataLicense": "CC0-1.0",
"SPDXID": "SPDXRef-DOCUMENT",
"name": "PocketRoot experimental full-graph composition 0.2.0",
"documentNamespace": "https://github.com/jacklv-coder/PocketRoot/sbom/release/experimental-v0.2.0/44f6d771dd3c6d83d7f5ee81ad4ffe83a50ef3efdafa24a26b1e8a70fc5f53d3",
"documentNamespace": "https://github.com/jacklv-coder/PocketRoot/sbom/release/experimental-v0.2.0/a9a4d9f55109789e23abb37c2f0c609173374996e45e8ce7e54c74e621d61b35",
"creationInfo": {
"created": "2026-08-03T00:00:00Z",
"creators": [
Expand Down
4 changes: 2 additions & 2 deletions Compliance/Release/experimental-v0.2.0/SHA256SUMS
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
44f6d771dd3c6d83d7f5ee81ad4ffe83a50ef3efdafa24a26b1e8a70fc5f53d3 COMPOSITION.json
a9a4d9f55109789e23abb37c2f0c609173374996e45e8ce7e54c74e621d61b35 COMPOSITION.json
9fe270ba11160051d13f99cfe4ce6ee03c52882b88339dd6e4c1b4923ae30755 READINESS.json
6d41126608b019b46332a7957889f41e3c3ec6c6e9e2b884dca5ffc6d405e943 README.md
fab07621b5188930bfd2a38117e206815d94f755e667d65fc182ee55d14d2d40 RELEASE-CHECKLIST.md
c56b8eec15f2112bcd38b8f1d8f0c56da52967538284e12cd749422565076b8f SBOM.spdx.json
e1673e7cba02ebe7dc563b01906517d7cd676803b68b199e63bf083ee1b9c0e9 SBOM.spdx.json
11 changes: 6 additions & 5 deletions Docs/Testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -578,11 +578,12 @@ Workspace、系统 document picker 导入、share sheet 保存、guest 删除后
`POCKETROOT_QUICK_START_UI_DEVICE_NAME` 选择 Quick Start Simulator;失败诊断时设置
`POCKETROOT_KEEP_UI_RESULT=1` 可保留临时 DerivedData 与 `.xcresult`。两个 wrapper
复用 `run-ios-example-ui-smoke.sh` 的相同 RootFS、超时、xcresult 和安全清理边界。
当 Xcode 明确报告 Simulator test runner 未注册到 FrontBoard 时,通用 runner 会重启
同一个由 runner 创建的临时 Simulator;当 Xcode 明确报告目标设备已从可用 destination
消失时,会以相同 runtime 与 device type 重建该临时 Simulator。两种基础设施恢复合计
最多重试一次;调用方通过 `POCKETROOT_UI_SMOKE_DEVICE` 提供的共享 Simulator 不会被
自动关闭、重启或重建。断言失败、测试超时和其他构建错误不会重试。
当 Xcode 明确报告 Simulator test runner 未注册到 FrontBoard,或 XCTest 在执行任何
测试方法前等待 Accessibility 加载超时时,通用 runner 会重启同一个由 runner 创建的
临时 Simulator;当 Xcode 明确报告目标设备已从可用 destination 消失时,会以相同
runtime 与 device type 重建该临时 Simulator。这些基础设施恢复合计最多重试一次;
调用方通过 `POCKETROOT_UI_SMOKE_DEVICE` 提供的共享 Simulator 不会被自动关闭、重启或
重建。断言失败、测试方法超时和其他构建错误不会重试。
可设置 `POCKETROOT_UI_INFRASTRUCTURE_RETRY_LIMIT=0` 关闭该恢复路径。若第二次仍失败,
失败 artifact 会同时包含首次/最终测试日志与可用的两次 `.xcresult`;即使重启本身
失败,也保留首次 `xcodebuild` 的诊断结果。
Expand Down
9 changes: 5 additions & 4 deletions Docs/Troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -359,10 +359,11 @@ POCKETROOT_ROOTFS_ARCHIVE=/path/to/fs.tar.gz \

CI 先运行 `./Scripts/check-docs.sh`,再执行测试与构建。`actions/checkout` 自身固定到精确 revision,但它检出的仓库内容是 workflow 事件选定的 SHA(push SHA 或 PR merge SHA)。CI 是干净 checkout,不能访问本地 archive、DerivedData、未提交工程或凭据。

若 Xcode 16 偶发报告 UI test runner `is unknown to FrontBoard`,通用 Simulator UI
runner 会重启由它创建的临时设备并重试一次;调用方指定的共享 Simulator 不会被自动
重启。只有这组精确的基础设施信号会触发重试;不要把普通测试失败加入重试条件。重试
后仍失败时,应同时检查首次与最终 `xcodebuild` 日志。
若 Xcode 16 偶发报告 UI test runner `is unknown to FrontBoard`,或 XCTest 在执行测试
方法前报告 `Timed out waiting for AX loaded notification`,通用 Simulator UI runner
会重启由它创建的临时设备并重试一次;调用方指定的共享 Simulator 不会被自动重启。
只有这些精确的基础设施信号会触发重试;不要把普通测试失败加入重试条件。重试后仍失败
时,应同时检查首次与最终 `xcodebuild` 日志。

## 报告问题时提供

Expand Down
7 changes: 4 additions & 3 deletions Docs/en/Testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -525,13 +525,14 @@ Use `POCKETROOT_QUICK_START_UI_DEVICE_TYPE` and
`run-ios-example-ui-smoke.sh` for the same RootFS, timeouts, xcresult, and safe
cleanup boundaries. For failure diagnosis, `POCKETROOT_KEEP_UI_RESULT=1`
retains temporary DerivedData and the `.xcresult`. When Xcode explicitly
reports that the Simulator test runner was not registered with FrontBoard, the
shared runner restarts the same temporary Simulator. When Xcode explicitly
reports that the Simulator test runner was not registered with FrontBoard, or
XCTest times out waiting for Accessibility to load before any test method runs,
the shared runner restarts the same temporary Simulator. When Xcode explicitly
reports that the destination has disappeared, it recreates that temporary
Simulator with the same runtime and device type. These infrastructure paths
share one total retry. Recovery applies only to a Simulator created by the
runner; a shared Simulator supplied through `POCKETROOT_UI_SMOKE_DEVICE` is
never automatically shut down, restarted, or recreated. Assertions, test
never automatically shut down, restarted, or recreated. Assertions, test-method
timeouts, and other build failures are not retried. Set
`POCKETROOT_UI_INFRASTRUCTURE_RETRY_LIMIT=0` to disable this recovery path. If
the retry or restart also fails, the failure artifact retains the first and
Expand Down
12 changes: 7 additions & 5 deletions Docs/en/Troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -196,11 +196,13 @@ post-report runner-cleanup check. Missing reports and crashes are failures.
Compare toolchains, SDK, destination architecture, resolved dependencies, XcodeGen, artifact digests, generated project source, and uncommitted local dependencies. CI runs `./Scripts/check-docs.sh` before tests and builds. The `actions/checkout` implementation is pinned to an exact revision, while the repository content is the workflow event SHA (push SHA or PR merge SHA). CI has no local archive, DerivedData, generated project, or credentials.

If Xcode 16 intermittently reports that a UI test runner `is unknown to
FrontBoard`, the shared Simulator UI runner restarts the device and retries
once only when the runner created that temporary device. It does not restart a
shared Simulator supplied by the caller. Only that exact infrastructure signature triggers a retry; do not add
ordinary test failures to the retry condition. If the retry also fails, inspect
both the first and final `xcodebuild` logs.
FrontBoard`, or XCTest reports `Timed out waiting for AX loaded notification`
before a test method runs, the shared Simulator UI runner restarts the device
and retries once only when the runner created that temporary device. It does
not restart a shared Simulator supplied by the caller. Only these exact
infrastructure signatures trigger a retry; do not add ordinary test failures
to the retry condition. If the retry also fails, inspect both the first and
final `xcodebuild` logs.

## Issue report

Expand Down
Loading