Agent Skills › EvanBacon/serve-sim › serve-sim-duo-verification

serve-sim-duo-verification

GitHub

用于验证 Duo 折叠、朝向及模型旋转在本地 iOS 模拟器中的表现,适用于功能变更或回归排查。

.agents/skills/serve-sim-duo-verification/SKILL.md EvanBacon/serve-sim

Trigger Scenarios

修改 Duo 姿势、朝向或显示选择行为后 调查相关功能回归问题时

Install

npx skills add EvanBacon/serve-sim --skill serve-sim-duo-verification -g -y
More Options

Non-standard path

npx skills add https://github.com/EvanBacon/serve-sim/tree/main/.agents/skills/serve-sim-duo-verification -g -y

Use without installing

npx skills use EvanBacon/serve-sim@serve-sim-duo-verification

指定 Agent (Claude Code)

npx skills add EvanBacon/serve-sim --skill serve-sim-duo-verification -a claude-code -g -y

安装 repo 全部 skill

npx skills add EvanBacon/serve-sim --all -g -y

预览 repo 内 skill

npx skills add EvanBacon/serve-sim --list

SKILL.md

Frontmatter
{
    "name": "serve-sim-duo-verification",
    "description": "Verify serve-sim Duo folding, guest orientation, and model rotation against a local iOS Simulator. Use after changing Duo pose, orientation, or display-selection behavior, or when investigating regressions in those features."
}

Duo verification

Run commands from the repository root. Read the relevant checks in expected behavior before choosing a test. Historical results live in verification. Keep reusable agent verification helpers in this skill's scripts/ directory.

Local setup

Use a booted iPhone Duo and the rebuilt local server. After native changes, rebuild and restart the server so it loads the new addon:

bun run packages/serve-sim/build.ts
node packages/serve-sim/dist/serve-sim.js --port 3399

Use the actual server port and Duo UDID in subsequent commands. An existing local server can be reused when its native build is current.

Rotation matrix

Bring Safari to the foreground on the Duo before running:

xcrun simctl openurl <udid> https://example.com
bun .agents/skills/serve-sim-duo-verification/scripts/verify-duo-rotation.ts <udid> 3399

The script changes hinge angles to 0°, 130°, and 180° and cycles all four orientations. It checks physical orientation using devicectl, active-panel UI orientation using simctl, and model/configuration orientation over the server. It restores the original hinge angle and model orientation in finally. Safari remains foreground; this check does not restore the prior app.

Safari's cover UI excludes upside-down portrait; its inner UI supports all four orientations. Settings can lock the cover to portrait, so it is unsuitable for this matrix. Protocol landscape names are opposite CoreDevice physical names; the inner panel also has a rotated natural axis. Preserve these distinctions when diagnosing failures. Stop on a failed assertion and inspect the reported physical, UI, and model orientations before retrying.

Fold and panel selection

node packages/serve-sim/dist/serve-sim.js fold 180 -d <udid>
node packages/serve-sim/dist/serve-sim.js fold 130 -d <udid>
xcrun devicectl device motion hinge-angle --device <udid> --timeout 5
xcrun simctl io <udid> enumerate

Compare the preview's selected display with the latest SpringBoard DisplayContentMode event containing .cover:pri or .inner:pri. Repeat after fold 0 to check the opposite direction. Follow guest panel readback; do not infer primary-panel selection solely from hinge angle.

If Device Hub shadows input, consult the explicit repair-input procedure in the package README. Repair can restart SpringBoard; do not run it as routine verification setup. Numeric rotation checks do not establish visual smoothness, color fidelity, or control alignment; check those in the in-app Codex browser when available and report any unverified behavior.

Rendered projection checks

With the local renderer built and Python Pillow available, run:

python3 .agents/skills/serve-sim-duo-verification/scripts/verify-duo-projection.py

This uses the selected Xcode's V68 model and the local renderer without changing simulator state. It checks screen marker projection and physical button anchors across 20 fold/rotation combinations. Use --renderer <path> to override the local renderer binary. Marker centers must land within two output pixels of their rendered centers; hardware anchors must land on opaque model pixels.

Version History

  • 1930e6c Current 2026-09-27 15:45

Same Skill Collection

.agents/skills/thermo-nuclear-code-quality-review/SKILL.md
.codex/skills/serve-sim-placeholder-assets/SKILL.md
skills/serve-sim/SKILL.md

Metadata

Files
0
Version
1930e6c
Hash
4e08ee58
Indexed
2026-09-27 15:45

ホーム - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-09-29 11:39
浙ICP备14020137号-1