Releases have been broken since April. #40 moved the skill into the plugin
layout (ios-simulator-skill/skills/<name>/) the day after v1.4.0 shipped, but
release.yml still validated ios-simulator-skill/SKILL.md and
ios-simulator-skill/scripts. Any tag pushed since would fail at "Validate skill
structure" — which is why v1.4.0 is still the latest release and 1.5.0 has been
sitting unreleased.
- point validation and packaging at the real skill directory, via a single
SKILL_DIR env var so a future restructure breaks one line instead of four
- also assert plugin.json exists, since the plugin layout is now what ships
- keep the zip's shape identical to v1.4.0's: SKILL.md and scripts/ at the root
of the archive, which is what the documented
`unzip skill.zip -d ~/.claude/skills/ios-simulator-skill` expects. Packaging
the plugin root instead would have nested them a level deeper and quietly
broken that install path
- print the archive listing in CI so the shape is visible in the log
- exclude config.json, which is runtime state (last used simulator). It is
untracked so CI was already clean, but a local build would have shipped it
- add a version to plugin.json, which had none, so pyproject.toml, SKILL.md and
plugin.json now all read 1.5.0
Verified by running the validation and packaging steps locally: the archive
installs to the documented path with SKILL.md at its root, and carries no
xcode_compat shim.
Documents the new scripts that landed since the last doc pass: appearance.py,
location.py, model_inspector.py, container.py, localization_audit.py,
sim_list.py, simulator_selector.py.
- CLAUDE.md: script count 21/27 → 29; add Device State (2) and Simulator
Discovery (2) categories; reorganise Testing & Analysis (6 → 9).
- SKILL.md: full 29-script listing with renumbered Lifecycle scripts (23-29).
- marketplace.json, plugin.json: description bumped to 29.
- validate-version.yml: fix SKILL.md path after directory restructure.
- .gitignore: fix local config.json path to match new directory layout.
- Bump Black 24.10.0 → 26.5.1
- Bump Ruff 0.7.4 → 0.15.14
- Pin CI to match pre-commit versions (was unpinned, causing drift)
- Fix pre-commit file glob (was ^skill/scripts/, matched zero files)
- Fix ruff include in pyproject.toml (same stale path)
Black reports no formatting changes needed. Ruff passes clean
on the (now-correctly-matched) script tree.
Single-page landing at /site/ with TE-inspired aesthetic
(navy/yellow palette, Inter + Azeret Mono, numbered sections).
Adds .github/workflows/pages.yml — deploys site/ to GitHub Pages
on push to main using the official actions/configure-pages,
upload-pages-artifact, and deploy-pages actions.
After merge: enable Pages via Settings -> Pages -> Source:
GitHub Actions to trigger first deploy.
* Fix plugin structure: move skills into skills/<name>/ directory
The plugin.json had an invalid "skills": ["./"] field that caused a
"Path escapes plugin directory" error on load. The correct plugin
structure (matching the official plugin spec) requires skills to live
under skills/<skill-name>/ with SKILL.md at that path — no "skills"
field in plugin.json needed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix lint workflow paths after skills/ restructure
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix broken CI workflows and stale documentation
All three GitHub Actions workflows referenced skill/ — a directory that
no longer exists. The actual code lives in ios-simulator-skill/. CI has
been silently non-functional since the directory was renamed.
- Fix lint.yml, release.yml, validate-version.yml paths
- Fix pyproject.toml ruff include paths
- Update CLAUDE.md project structure to reflect actual layout
- Update DEV.md stats (21+ scripts, ~10k lines) and all path refs
- Remove stale SPECIFICATION.md (historical v1.0 planning doc)
- Remove examples/ check from release.yml (dir doesn't exist)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix pre-existing ruff lint error in cache_utils.py
Add maxsplit=1 to str.split() call (PLC0207). This error was hidden
because CI previously pointed at nonexistent skill/ directory.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Removed mypy completely from the project as it's not needed for this
skill-based codebase. Type hints are helpful but strict type checking
adds complexity without significant benefit for CLI scripts.
Changes:
- Remove mypy configuration from pyproject.toml
- Remove mypy references from .pre-commit-config.yaml
- Update lint.yml workflow (remove mypy, update job name)
- Simplify release.yml validation (don't check for CLAUDE.md/README.md in skill/)
- Add installation section to top of README.md
* Links to releases page
* Shows how to download and extract skill
* Clarifies what users get (clean skill package, no dev tooling)
The release workflow correctly packages only the skill/ directory,
which contains SKILL.md, scripts/, and examples/. Development docs
like references/ stay in the repo but aren't distributed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Restructure repository for clean distribution and add professional
development tooling.
Repository Structure:
- Move all skill files into skill/ subdirectory for clean packaging
- Separate development tools (root) from distributable skill (skill/)
- Enable GitHub release workflow to auto-package skill/ directory
Linting & Formatting:
- Add Black formatter (line-length=100, Python 3.12)
- Add Ruff linter with pragmatic exceptions for CLI tools
- Configure mypy (disabled pending type annotations)
- Add .pre-commit-config.yaml for git hooks
- Configure in pyproject.toml with skill-specific rules
GitHub Actions:
- release.yml: Auto-package skill/ on release creation
- lint.yml: Run Black + Ruff on PRs to main
- validate-version.yml: Ensure version consistency
Documentation:
- Add root README.md (development guide)
- Update skill/CLAUDE.md (document new structure)
- Add version field to skill/SKILL.md frontmatter
- Create .gitignore for Python artifacts
Code Quality:
- Format 18 Python files with Black
- Apply Ruff auto-fixes for imports and style
- All scripts remain functional, no breaking changes
Next Steps:
- Install pre-commit hooks: pre-commit install
- Create v1.0.0 release for first distribution
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>