Skip to content

feat(skills): interactive-simulator-ux-audit + host-driven-xcuitest-e2e + cloudkit-schema-source-of-truth - #32

Merged
wei18 merged 1 commit into
mainfrom
feat/three-field-tested-skills
Jul 20, 2026
Merged

feat(skills): interactive-simulator-ux-audit + host-driven-xcuitest-e2e + cloudkit-schema-source-of-truth#32
wei18 merged 1 commit into
mainfrom
feat/three-field-tested-skills

Conversation

@wei18

@wei18 wei18 commented Jul 20, 2026

Copy link
Copy Markdown
Owner

Summary

Three new first-party skills, genericized from a real shipping project's battle-tested lessons — no project nouns, no issue numbers.

  • interactive-simulator-ux-audit — drive a booted iOS Simulator with idb (tap / describe-all / screenshot) to catch navigation, modal, back-stack, safe-area/Dynamic-Island, and offline/signed-out bugs that a fixed-size snapshot render structurally can't show. Covers the no-Homebrew idb install path (direct GitHub release download + an exec wrapper that preserves rpath), the describe-all → tap → screenshot drive loop, device-point vs. screenshot-pixel coordinate spaces, and the stale-build / worktree-launch-crash false-negative traps.
  • host-driven-xcuitest-e2e — wire launch-the-app XCUITest E2E via Tuist: a native .uiTests target needs its own dedicated scheme with testAction: .targets([...]), not membership in a .xctestplan (the latter builds but fails with "no test bundles available to test"), and its name must avoid colliding with an SPM <Target>UITests package test target. Also covers driving SwiftUI on macOS, where element.tap() throws point.x != INFINITY and app.coordinate(...) resolves to (-inf, -inf) — worked around by anchoring on the window element and clicking finite element frames — plus hittable not being a valid NSPredicate key and locale-stable accessibility queries.
  • cloudkit-schema-source-of-truth — one committed .ckdb per app as the schema source of truth, xcrun cktool export/validate/deploy scripted against Development only (management token from an env file, passed positionally since cktool rejects piped stdin, purged after use), and Production promotion as an irreversible, user-owned Console-button-only gate cktool cannot reach. Covers Production fields/indexes being add-only and Just-In-Time schema existing only in Development (a silent-missing-field failure mode).

Bookkeeping

  • apple-dev-skills first-party skill count bumped 22 → 25 across plugin.json, marketplace.json, README.md Catalog (+ Install one-liner), and README.zh-Hant.md (manually translated and synced — see below).
  • scripts/check-consistency.py: PLUGINS["apple-dev-skills"] 22 → 25, plus its docstring's 34 → 37 total-skills note.
  • No version field touched anywhere (left for a follow-up release bump).

Deviation from the dispatch

mise run readme-zh shells out to claude -p to translate README.md. Invoked from inside this (already-nested) agent session it hung indefinitely and had to be killed, truncating the output file. Recovered via git checkout -- README.zh-Hant.md and applied the same edits (three new table rows + the two count bumps) by hand in Traditional Chinese, then updated the trailing <!-- src-sha: ... --> comment to git hash-object README.md's current value. check-consistency.py's zh-Hant freshness check (#4) passes against this manual sync.

Test plan

  • python3 scripts/check-consistency.py — all 8 checks pass (OK — 2 plugins (25/12), catalog + counts + zh-Hant consistent.)
  • Repo-wide grep for sudoku|minesweeper|GameShellKit|GameAppKit|SudokuCoreKit|MinesweeperCoreKit and for #<issue-number> patterns inside the 3 new skill dirs — clean (only pre-existing wei18/Sudoku provenance-section references remain, unrelated to this PR)
  • Frontmatter name: matches each skill's directory name; all three descriptions under the 800-char gate

🤖 Generated with Claude Code

…2e + cloudkit-schema-source-of-truth

Three new first-party skills, genericized from a real shipping project's
battle-tested lessons (no project nouns, no issue numbers):

- interactive-simulator-ux-audit: drive a booted iOS Simulator with idb
  (tap/describe-all/screenshot) to catch navigation, modal, back-stack,
  safe-area/Dynamic-Island, and offline/signed-out bugs that a fixed-size
  snapshot render structurally can't show. Covers the no-Homebrew idb
  install path (direct GitHub release + exec wrapper for rpath) and the
  stale-build / worktree-launch-crash false-negative traps.
- host-driven-xcuitest-e2e: wire launch-the-app XCUITest E2E via Tuist —
  a native .uiTests target needs its own dedicated scheme with
  testAction: .targets([...]), not a test plan (else "no test bundles").
  Also covers driving SwiftUI on macOS, where element.tap() and
  app.coordinate(...) both fail, worked around by anchoring on the
  window element and clicking finite element frames.
- cloudkit-schema-source-of-truth: one committed .ckdb per app as the
  schema source of truth, cktool export/validate/deploy against
  Development only, and the Production promotion as an irreversible,
  user-owned Console-button-only gate cktool cannot reach.

Bumps apple-dev-skills' first-party skill count 22 -> 25 across
plugin.json, marketplace.json, README.md/README.zh-Hant.md (manual
translation sync — the claude-CLI-backed readme-zh generator hung when
invoked from a nested agent session, so the zh-Hant edits were applied
by hand and the src-sha updated to match), and the check-consistency.py
gate (including its docstring's 34->37 total-skills note). Does not
touch any version field.

python3 scripts/check-consistency.py passes clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@wei18
wei18 merged commit 5eb0c7e into main Jul 20, 2026
1 check passed
@wei18
wei18 deleted the feat/three-field-tested-skills branch July 20, 2026 08:08
wei18 added a commit that referenced this pull request Jul 20, 2026
…ing (#33)

Wave 2 (PR #32) added 3 new apple-dev-skills skills; this closes the two
follow-ups from its review:

- cloudkit-schema-source-of-truth's "Related skills" gains a line to
  swift-testing-baseline: its "unentitled runner" section is where the
  live-CloudKit-in-tests landmine (constructing a live container/auth
  handler blocks the SwiftPM test runner indefinitely) is documented,
  and a reader of the schema skill needs that pointer before writing
  any test that touches the container this skill manages.
- Minor version bump for the 3-skill addition: apple-dev-skills
  1.1.1 -> 1.2.0, marketplace metadata 1.4.0 -> 1.5.0 (collab untouched).
  Ran via `python3 scripts/bump-version.py --apple 1.2.0 --marketplace
  1.5.0`, which paired plugin.json + marketplace.json entries, rewrote
  both READMEs' `git checkout v<semver>` pins, and re-stamped
  README.zh-Hant.md's src-sha for that one-line pin change (no full
  retranslation needed). check-consistency.py ran automatically at the
  end of the bump script and passed, including the new check 8
  (plugin.json <-> marketplace.json version parity).

python3 scripts/check-consistency.py passes clean.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant