diff --git a/plugins/agent-portability-skills/.codex-plugin/plugin.json b/plugins/agent-portability-skills/.codex-plugin/plugin.json index 9e024cd5..09bb9ce6 100644 --- a/plugins/agent-portability-skills/.codex-plugin/plugin.json +++ b/plugins/agent-portability-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "agent-portability-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Maintainer skills for Socket-owned agent skill portability, Codex plugin surfaces, and host adapter guidance.", "author": { "name": "Gale", diff --git a/plugins/agent-portability-skills/pyproject.toml b/plugins/agent-portability-skills/pyproject.toml index 1387cf9a..1d9f66a3 100644 --- a/plugins/agent-portability-skills/pyproject.toml +++ b/plugins/agent-portability-skills/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "agent-portability-skills-maintenance" -version = "8.5.3" +version = "8.5.4" description = "Maintainer-only Python tooling baseline for Agent Portability Skills." requires-python = ">=3.11" dependencies = [] diff --git a/plugins/agent-portability-skills/uv.lock b/plugins/agent-portability-skills/uv.lock index bee94a5c..79b97159 100644 --- a/plugins/agent-portability-skills/uv.lock +++ b/plugins/agent-portability-skills/uv.lock @@ -8,7 +8,7 @@ resolution-markers = [ [[package]] name = "agent-portability-skills-maintenance" -version = "8.5.3" +version = "8.5.4" source = { virtual = "." } [package.dev-dependencies] diff --git a/plugins/agentdeck/.codex-plugin/plugin.json b/plugins/agentdeck/.codex-plugin/plugin.json index 1ab58b8c..30e6f1e7 100644 --- a/plugins/agentdeck/.codex-plugin/plugin.json +++ b/plugins/agentdeck/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "agentdeck", - "version": "8.5.3", + "version": "8.5.4", "description": "Local Codex runtime utilities for thread, hook, and app-server workflows.", "author": { "name": "Gale", diff --git a/plugins/android-dev-skills/.codex-plugin/plugin.json b/plugins/android-dev-skills/.codex-plugin/plugin.json index fd3b231a..d6ade2b6 100644 --- a/plugins/android-dev-skills/.codex-plugin/plugin.json +++ b/plugins/android-dev-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "android-dev-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Android, Kotlin, Java, Gradle, Android Gradle Plugin, testing, lint, UI implementation, and release-readiness workflow skills.", "author": { "name": "Gale", diff --git a/plugins/apple-dev-skills/.codex-plugin/plugin.json b/plugins/apple-dev-skills/.codex-plugin/plugin.json index 9eb6cf8e..2a0b40cc 100644 --- a/plugins/apple-dev-skills/.codex-plugin/plugin.json +++ b/plugins/apple-dev-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "apple-dev-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Apple development workflows for Codex, including media and audio repair, XcodeGen migration, Xcode coding intelligence, SwiftUI animation and architecture, Core Animation, Apple typography, SF Symbols, AppKit architecture, Icon Composer app icons, Safari extensions, DeviceCheck/App Attest, Swift OpenAPI clients, and DocC authoring guidance.", "author": { "name": "Gale", diff --git a/plugins/apple-dev-skills/pyproject.toml b/plugins/apple-dev-skills/pyproject.toml index 9280066d..afe84a7c 100644 --- a/plugins/apple-dev-skills/pyproject.toml +++ b/plugins/apple-dev-skills/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "apple-dev-skills-maintainer" -version = "8.5.3" +version = "8.5.4" description = "Maintainer tooling for the apple-dev-skills repository" requires-python = ">=3.10" dependencies = [] diff --git a/plugins/apple-dev-skills/shared/agents-snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/shared/agents-snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/shared/agents-snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/shared/agents-snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/appkit-app-architecture-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/appkit-app-architecture-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/appkit-app-architecture-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/appkit-app-architecture-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/apple-typography-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/apple-typography-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/apple-typography-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/apple-typography-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/apple-ui-accessibility-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/apple-ui-accessibility-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/apple-ui-accessibility-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/apple-ui-accessibility-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/avaudio-engine-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/avaudio-engine-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/avaudio-engine-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/avaudio-engine-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/avfaudio-session-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/avfaudio-session-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/avfaudio-session-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/avfaudio-session-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/avfoundation-media-pipeline-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/avfoundation-media-pipeline-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/avfoundation-media-pipeline-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/avfoundation-media-pipeline-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/bootstrap-swift-package/assets/AGENTS.md b/plugins/apple-dev-skills/skills/bootstrap-swift-package/assets/AGENTS.md index 11a5c889..9c1a570b 100644 --- a/plugins/apple-dev-skills/skills/bootstrap-swift-package/assets/AGENTS.md +++ b/plugins/apple-dev-skills/skills/bootstrap-swift-package/assets/AGENTS.md @@ -98,6 +98,8 @@ ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/bootstrap-xcode-app-project/assets/AGENTS.md b/plugins/apple-dev-skills/skills/bootstrap-xcode-app-project/assets/AGENTS.md index cd1dc59c..f0b4964a 100644 --- a/plugins/apple-dev-skills/skills/bootstrap-xcode-app-project/assets/AGENTS.md +++ b/plugins/apple-dev-skills/skills/bootstrap-xcode-app-project/assets/AGENTS.md @@ -19,6 +19,8 @@ - Keep data flow straight and dependency direction unidirectional. - Treat the `.xcworkspace` or `.xcodeproj` as the source of truth for app integration, schemes, and build settings. - Prefer Xcode-aware tooling or `xcodebuild` over ad hoc filesystem assumptions when project structure or target membership is involved. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Use the standard top-level Xcode app repository layout: `Sources/`, `Tests/`, `Shared/`, `Extensions/`, `Configurations/`, `Scripts/`, and `Packages/`. - `Sources/` owns the main app target implementation and app-owned resources/support files. `Tests/` owns all test targets. `Shared/` owns reusable source intended to be compiled into the app and extension targets. `Extensions/` owns extension target roots, one folder per extension. `Configurations/` owns `.xcconfig` layers. `Scripts/` owns project-local automation and build helper scripts. `Packages/` owns local Swift packages only when a real package boundary is justified. - Keep those top-level roots stable; do not invent parallel names such as `AppSources`, `TestSources`, `Config`, `BuildScripts`, or `LocalPackages` for ordinary Xcode app repos. diff --git a/plugins/apple-dev-skills/skills/bootstrap-xcode-app-project/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/bootstrap-xcode-app-project/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/bootstrap-xcode-app-project/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/bootstrap-xcode-app-project/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/core-animation-layer-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/core-animation-layer-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/core-animation-layer-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/core-animation-layer-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/coreaudio-modernization-repair-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/coreaudio-modernization-repair-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/coreaudio-modernization-repair-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/coreaudio-modernization-repair-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/coremedia-timing-samplebuffer-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/coremedia-timing-samplebuffer-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/coremedia-timing-samplebuffer-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/coremedia-timing-samplebuffer-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/devicecheck-app-attest-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/devicecheck-app-attest-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/devicecheck-app-attest-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/devicecheck-app-attest-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/explore-apple-swift-docs/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/explore-apple-swift-docs/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/explore-apple-swift-docs/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/explore-apple-swift-docs/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/format-swift-sources/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/format-swift-sources/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/format-swift-sources/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/format-swift-sources/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/migrate-xcode-project-to-xcodegen/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/migrate-xcode-project-to-xcodegen/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/migrate-xcode-project-to-xcodegen/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/migrate-xcode-project-to-xcodegen/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/safari-extension-control-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/safari-extension-control-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/safari-extension-control-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/safari-extension-control-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/sf-symbols-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/sf-symbols-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/sf-symbols-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/sf-symbols-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/structure-swift-sources/SKILL.md b/plugins/apple-dev-skills/skills/structure-swift-sources/SKILL.md index 3da02702..fac43885 100644 --- a/plugins/apple-dev-skills/skills/structure-swift-sources/SKILL.md +++ b/plugins/apple-dev-skills/skills/structure-swift-sources/SKILL.md @@ -70,7 +70,8 @@ Use this skill as the top-level workflow for structural cleanup inside existing 6. Apply repo-shape rules: - for Swift packages, prefer directories grouped by layer and feature, such as `API//.swift` and `Features//.swift` - for Xcode app projects, ensure important app-facing source directories such as `Views/`, `Controllers/`, and `Models/` - - for SwiftUI views, keep view files in `Views/` and pair them with `+Model.swift` and `+Modifier.swift` files when those concerns exist + - for SwiftUI views, keep view files in `Views/`, require exactly one SwiftUI `View` component per file, and keep that component's Xcode SwiftUI preview in the same file + - when splitting grouped SwiftUI views, create one `.swift` file per view component and pair it with `+Model.swift` and `+Modifier.swift` files when those concerns exist 7. Finish with `format-swift-sources` again so the moved or split files end in a normalized state. ## Inputs diff --git a/plugins/apple-dev-skills/skills/structure-swift-sources/references/layout-rules.md b/plugins/apple-dev-skills/skills/structure-swift-sources/references/layout-rules.md index 60b4f3c4..99e0425c 100644 --- a/plugins/apple-dev-skills/skills/structure-swift-sources/references/layout-rules.md +++ b/plugins/apple-dev-skills/skills/structure-swift-sources/references/layout-rules.md @@ -13,6 +13,8 @@ - Ensure app-facing source directories such as `Views/`, `Controllers/`, and `Models/`. - Keep SwiftUI views in `Views/`. +- Require one SwiftUI `View` component per file, named `.swift`, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one file; split related child views into their own files instead. - When a view has a paired model type, use `+Model.swift`. - When a view needs extracted modifiers, use `+Modifier.swift`. - Move files into their proper layer directory rather than leaving them flat at the project root. diff --git a/plugins/apple-dev-skills/skills/structure-swift-sources/references/source-organization-rules.md b/plugins/apple-dev-skills/skills/structure-swift-sources/references/source-organization-rules.md index b2837c3c..ac6c9d62 100644 --- a/plugins/apple-dev-skills/skills/structure-swift-sources/references/source-organization-rules.md +++ b/plugins/apple-dev-skills/skills/structure-swift-sources/references/source-organization-rules.md @@ -34,6 +34,9 @@ ## SwiftUI Rule +- Require exactly one SwiftUI `View` component per file. Do not group multiple `View` component types in one Swift file, even when the views are small, private, nested, or part of the same feature. +- Name each view file after its component, such as `.swift`, and keep that component's Xcode SwiftUI preview in the same file. +- When an existing file contains multiple SwiftUI view components, split it into one file per view before adding more behavior. - Once any one view has more than `3` chained modifiers, strongly consider extracting a custom `ViewModifier`. - Place that modifier in `+Modifier.swift` when the modifier belongs to one view family. diff --git a/plugins/apple-dev-skills/skills/swiftui-animation-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/swiftui-animation-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/swiftui-animation-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/swiftui-animation-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/SKILL.md b/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/SKILL.md index 139b387d..ef5a2655 100644 --- a/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/SKILL.md +++ b/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/SKILL.md @@ -15,6 +15,12 @@ Provide a docs-first workflow for SwiftUI app-structure decisions in Apple apps. It is not the Apple-docs router, not the accessibility workflow, and not the Xcode execution workflow. +## SwiftUI View File Rule + +Each SwiftUI `View` component must live in its own Swift file named for that view, and that file must carry the view's own Xcode SwiftUI preview. Do not group multiple `View` component types in one file, even when the views are small, related, nested, or currently used only by one parent. Split them into separate files so Xcode previews remain discoverable, isolated, and reliable. + +Keep supporting code in explicit paired files instead of bundling extra view types together: use `+Model.swift` for view-local models, `+Modifier.swift` for view-specific modifiers, and other narrowly named support files when needed. A file may contain private helper values or small non-`View` helpers for that one component, but it must not contain another SwiftUI `View` component. + ## When To Use - Use this skill when the user wants help structuring a SwiftUI app across `App`, `Scene`, `WindowGroup`, `Window`, `Settings`, or `DocumentGroup`. @@ -78,6 +84,7 @@ It is not the Apple-docs router, not the accessibility workflow, and not the Xco - giant root views with unrelated lifecycle, command, and rendering concerns mixed together - wrapper-heavy layers added only to look architectural - control flow hidden in modifiers that obscure who owns the action + - multiple SwiftUI `View` component types grouped into one file, especially when that prevents one file-local Xcode preview per component 6. Return one recommendation path with: - the ownership boundary - the chosen transport diff --git a/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/references/anti-patterns-and-corrections.md b/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/references/anti-patterns-and-corrections.md index 15a7c6e3..31924631 100644 --- a/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/references/anti-patterns-and-corrections.md +++ b/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/references/anti-patterns-and-corrections.md @@ -23,6 +23,18 @@ Correction: - keep app and scene boundaries explicit - keep leaf rendering concerns local to smaller composable views +## Grouped SwiftUI View Files + +Bad shape: + +- multiple SwiftUI `View` component types are grouped into one Swift file because they are small, related, private, or currently used by one parent + +Correction: + +- split each SwiftUI `View` component into its own `.swift` file +- keep that component's Xcode SwiftUI preview in the same file as the component +- move view-local models, modifiers, and support code into explicit paired files such as `+Model.swift` and `+Modifier.swift` + ## Wrapper-Heavy Architecture Bad shape: diff --git a/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/swiftui-app-architecture-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/assets/AGENTS.md b/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/assets/AGENTS.md index b454d18f..a16e27c2 100644 --- a/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/assets/AGENTS.md +++ b/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/assets/AGENTS.md @@ -21,6 +21,8 @@ - Keep data flow straight and dependency direction unidirectional. - Treat the `.xcworkspace` or `.xcodeproj` as the source of truth for app integration, schemes, and build settings. - Prefer Xcode-aware tooling or `xcodebuild` over ad hoc filesystem assumptions when project structure or target membership is involved. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Use the standard top-level Xcode app repository layout: `Sources/`, `Tests/`, `Shared/`, `Extensions/`, `Configurations/`, `Scripts/`, and `Packages/`. - `Sources/` owns the main app target implementation and app-owned resources/support files. `Tests/` owns all test targets. `Shared/` owns reusable source intended to be compiled into the app and extension targets. `Extensions/` owns extension target roots, one folder per extension. `Configurations/` owns `.xcconfig` layers. `Scripts/` owns project-local automation and build helper scripts. `Packages/` owns local Swift packages only when a real package boundary is justified. - Keep those top-level roots stable; do not invent parallel names such as `AppSources`, `TestSources`, `Config`, `BuildScripts`, or `LocalPackages` for ordinary Xcode app repos. diff --git a/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/assets/append-section.md b/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/assets/append-section.md index 4ffb6f17..31b5bd7b 100644 --- a/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/assets/append-section.md +++ b/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/assets/append-section.md @@ -19,6 +19,8 @@ - Keep data flow straight and dependency direction unidirectional. - Treat the `.xcworkspace` or `.xcodeproj` as the source of truth for app integration, schemes, and build settings. - Prefer Xcode-aware tooling or `xcodebuild` over ad hoc filesystem assumptions when project structure or target membership is involved. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Use the standard top-level Xcode app repository layout: `Sources/`, `Tests/`, `Shared/`, `Extensions/`, `Configurations/`, `Scripts/`, and `Packages/`. - `Sources/` owns the main app target implementation and app-owned resources/support files. `Tests/` owns all test targets. `Shared/` owns reusable source intended to be compiled into the app and extension targets. `Extensions/` owns extension target roots, one folder per extension. `Configurations/` owns `.xcconfig` layers. `Scripts/` owns project-local automation and build helper scripts. `Packages/` owns local Swift packages only when a real package boundary is justified. - Keep those top-level roots stable; do not invent parallel names such as `AppSources`, `TestSources`, `Config`, `BuildScripts`, or `LocalPackages` for ordinary Xcode app repos. diff --git a/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/sync-xcode-project-guidance/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/xcode-app-project-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/xcode-app-project-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/xcode-app-project-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/xcode-app-project-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/xcode-build-run-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/xcode-build-run-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/xcode-build-run-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/xcode-build-run-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/xcode-coding-intelligence-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/xcode-coding-intelligence-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/xcode-coding-intelligence-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/xcode-coding-intelligence-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/skills/xcode-testing-workflow/references/snippets/apple-xcode-project-core.md b/plugins/apple-dev-skills/skills/xcode-testing-workflow/references/snippets/apple-xcode-project-core.md index 1f2e66a2..0a18bc34 100644 --- a/plugins/apple-dev-skills/skills/xcode-testing-workflow/references/snippets/apple-xcode-project-core.md +++ b/plugins/apple-dev-skills/skills/xcode-testing-workflow/references/snippets/apple-xcode-project-core.md @@ -59,6 +59,8 @@ Use this snippet in repository `AGENTS.md` files when you want baseline standard ## SwiftUI and State Architecture - Treat SwiftUI views as component UI: keep them small, composable, reusable, and easy to scan from top to bottom. +- Require one SwiftUI `View` component per file, named for that component, with that component's Xcode SwiftUI preview in the same file. +- Do not group multiple SwiftUI view components into one Swift file, even when the views are small, private, related, nested, or currently used only by one parent. - Prefer straight, top-down data flow with small focused controller classes that own matching state for a view or small view cluster. - Do not build monolithic views, monolithic controllers, or broad shared mutable state when a smaller component boundary would be clearer. - Keep updates to view-driving state minimal and localized. diff --git a/plugins/apple-dev-skills/tests/test_structure_swift_sources_workflow.py b/plugins/apple-dev-skills/tests/test_structure_swift_sources_workflow.py index 9692625f..58044ebb 100644 --- a/plugins/apple-dev-skills/tests/test_structure_swift_sources_workflow.py +++ b/plugins/apple-dev-skills/tests/test_structure_swift_sources_workflow.py @@ -109,6 +109,20 @@ def test_runtime_customization_changes_header_policy_and_thresholds(self) -> Non self.assertEqual(payload["output"]["split_thresholds"]["soft_limit"], 250) self.assertEqual(payload["output"]["split_thresholds"]["hard_limit"], 600) + def test_swiftui_structure_requires_one_view_and_preview_per_file(self) -> None: + skill_text = (ROOT / "skills/structure-swift-sources/SKILL.md").read_text(encoding="utf-8") + source_rules_text = (ROOT / "skills/structure-swift-sources/references/source-organization-rules.md").read_text( + encoding="utf-8" + ) + layout_rules_text = (ROOT / "skills/structure-swift-sources/references/layout-rules.md").read_text( + encoding="utf-8" + ) + + self.assertIn("require exactly one SwiftUI `View` component per file", skill_text) + self.assertIn("keep that component's Xcode SwiftUI preview in the same file", skill_text) + self.assertIn("Do not group multiple `View` component types in one Swift file", source_rules_text) + self.assertIn("Require one SwiftUI `View` component per file", layout_rules_text) + if __name__ == "__main__": unittest.main() diff --git a/plugins/apple-dev-skills/tests/test_swiftui_app_architecture_workflow.py b/plugins/apple-dev-skills/tests/test_swiftui_app_architecture_workflow.py index 1efd702a..f70f6b29 100644 --- a/plugins/apple-dev-skills/tests/test_swiftui_app_architecture_workflow.py +++ b/plugins/apple-dev-skills/tests/test_swiftui_app_architecture_workflow.py @@ -52,6 +52,17 @@ def test_desktop_scene_coverage_mentions_utility_window(self) -> None: self.assertIn("UtilityWindow", scene_text) self.assertIn("FocusedValues", scene_text) + def test_view_components_require_file_local_previews(self) -> None: + skill_text = self.read("skills/swiftui-app-architecture-workflow/SKILL.md") + anti_patterns_text = self.read( + "skills/swiftui-app-architecture-workflow/references/anti-patterns-and-corrections.md" + ) + + self.assertIn("Each SwiftUI `View` component must live in its own Swift file", skill_text) + self.assertIn("view's own Xcode SwiftUI preview", skill_text) + self.assertIn("Grouped SwiftUI View Files", anti_patterns_text) + self.assertIn("keep that component's Xcode SwiftUI preview in the same file", anti_patterns_text) + if __name__ == "__main__": unittest.main() diff --git a/plugins/apple-dev-skills/tests/test_xcode_guidance_sync_workflow.py b/plugins/apple-dev-skills/tests/test_xcode_guidance_sync_workflow.py index f14ebc48..c990e428 100644 --- a/plugins/apple-dev-skills/tests/test_xcode_guidance_sync_workflow.py +++ b/plugins/apple-dev-skills/tests/test_xcode_guidance_sync_workflow.py @@ -84,6 +84,8 @@ def test_sync_creates_agents_template(self) -> None: self.assertIn("optional parameters with explicit default values", agents_text) self.assertIn("four or more arguments or parameters", agents_text) self.assertIn("Prefer enums, enum cases with associated values", agents_text) + self.assertIn("Require one SwiftUI `View` component per file", agents_text) + self.assertIn("Xcode SwiftUI preview in the same file", agents_text) self.assertTrue(Path(tmpdir, ".swiftformat").is_file()) self.assertTrue(Path(tmpdir, "Scripts/repo-maintenance/hooks/pre-commit.sample").is_file()) self.assertTrue(Path(tmpdir, "Scripts/repo-maintenance/validate-all.sh").is_file()) @@ -128,6 +130,8 @@ def test_sync_appends_section_to_existing_agents(self) -> None: self.assertIn("optional parameters with explicit default values", agents_text) self.assertIn("four or more arguments or parameters", agents_text) self.assertIn("Prefer enums, enum cases with associated values", agents_text) + self.assertIn("Require one SwiftUI `View` component per file", agents_text) + self.assertIn("Xcode SwiftUI preview in the same file", agents_text) self.assertTrue(Path(tmpdir, ".swiftformat").is_file()) self.assertTrue(Path(tmpdir, "Scripts/repo-maintenance/hooks/pre-commit.sample").is_file()) self.assertTrue(Path(tmpdir, "Scripts/repo-maintenance/release.sh").is_file()) diff --git a/plugins/apple-dev-skills/uv.lock b/plugins/apple-dev-skills/uv.lock index 093f6674..dcffec98 100644 --- a/plugins/apple-dev-skills/uv.lock +++ b/plugins/apple-dev-skills/uv.lock @@ -4,7 +4,7 @@ requires-python = ">=3.10" [[package]] name = "apple-dev-skills-maintainer" -version = "8.5.3" +version = "8.5.4" source = { virtual = "." } [package.dev-dependencies] diff --git a/plugins/cardhop-app/.codex-plugin/plugin.json b/plugins/cardhop-app/.codex-plugin/plugin.json index dd1d0c14..7b7493a8 100644 --- a/plugins/cardhop-app/.codex-plugin/plugin.json +++ b/plugins/cardhop-app/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "cardhop-app", - "version": "8.5.3", + "version": "8.5.4", "description": "Cardhop.app workflow guidance plus a bundled local MCP server for contact capture and updates on macOS.", "author": { "name": "Gale", diff --git a/plugins/cardhop-app/mcp/pyproject.toml b/plugins/cardhop-app/mcp/pyproject.toml index 3b30dac5..4a753313 100644 --- a/plugins/cardhop-app/mcp/pyproject.toml +++ b/plugins/cardhop-app/mcp/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "cardhop-app-mcp" -version = "8.5.3" +version = "8.5.4" requires-python = ">=3.13" dependencies = [ "fastmcp>=3.0.2", diff --git a/plugins/cardhop-app/mcp/uv.lock b/plugins/cardhop-app/mcp/uv.lock index 0c63fb48..6b5f762e 100644 --- a/plugins/cardhop-app/mcp/uv.lock +++ b/plugins/cardhop-app/mcp/uv.lock @@ -138,7 +138,7 @@ wheels = [ [[package]] name = "cardhop-app-mcp" -version = "8.5.3" +version = "8.5.4" source = { virtual = "." } dependencies = [ { name = "fastmcp" }, diff --git a/plugins/cloud-deployment-skills/.codex-plugin/plugin.json b/plugins/cloud-deployment-skills/.codex-plugin/plugin.json index 2d929fe1..ae0b8cc1 100644 --- a/plugins/cloud-deployment-skills/.codex-plugin/plugin.json +++ b/plugins/cloud-deployment-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "cloud-deployment-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Codex skills for routing cloud deployment work through official provider plugins, MCP servers, CLIs, and Socket-owned deployment guidance.", "author": { "name": "Gale", diff --git a/plugins/cloud-inference-skills/.codex-plugin/plugin.json b/plugins/cloud-inference-skills/.codex-plugin/plugin.json index 2c5409ff..3c9b0deb 100644 --- a/plugins/cloud-inference-skills/.codex-plugin/plugin.json +++ b/plugins/cloud-inference-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "cloud-inference-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Cloud AI inference workflow skills for routing model serving, training, conversion, and GPU infrastructure work across Runpod, Hugging Face, AWS, Vast.ai, CoreWeave, and similar providers.", "author": { "name": "Gale", diff --git a/plugins/dotnet-skills/.codex-plugin/plugin.json b/plugins/dotnet-skills/.codex-plugin/plugin.json index f26241da..09ad31bd 100644 --- a/plugins/dotnet-skills/.codex-plugin/plugin.json +++ b/plugins/dotnet-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "dotnet-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Codex skills for choosing, bootstrapping, building, testing, packaging, diagnosing, and maintaining .NET projects with F# and C# as equal first-party languages.", "author": { "name": "Gale", diff --git a/plugins/game-dev-skills/.codex-plugin/plugin.json b/plugins/game-dev-skills/.codex-plugin/plugin.json index d1d50037..87f927ef 100644 --- a/plugins/game-dev-skills/.codex-plugin/plugin.json +++ b/plugins/game-dev-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "game-dev-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Apple platform game development workflow skills for SpriteKit, SceneKit, GameplayKit, controller input, haptics, profiling, and game-stack routing.", "author": { "name": "Gale", diff --git a/plugins/network-protocol-skills/.codex-plugin/plugin.json b/plugins/network-protocol-skills/.codex-plugin/plugin.json index 4fe259d7..f1969587 100644 --- a/plugins/network-protocol-skills/.codex-plugin/plugin.json +++ b/plugins/network-protocol-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "network-protocol-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Codex skills for choosing, planning, implementing, and diagnosing modern application transports and real-time networking protocols, including QUIC, HTTP/3, WebRTC, Media over QUIC, WebTransport-adjacent handoffs, protocol maturity checks, and stack-specific implementation routing.", "author": { "name": "Gale", diff --git a/plugins/productivity-skills/.codex-plugin/plugin.json b/plugins/productivity-skills/.codex-plugin/plugin.json index 2770a864..86ea6fd3 100644 --- a/plugins/productivity-skills/.codex-plugin/plugin.json +++ b/plugins/productivity-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "productivity-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Broadly useful productivity workflows for Codex.", "author": { "name": "Gale", diff --git a/plugins/productivity-skills/pyproject.toml b/plugins/productivity-skills/pyproject.toml index 76dc529f..e24d4b32 100644 --- a/plugins/productivity-skills/pyproject.toml +++ b/plugins/productivity-skills/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "productivity-skills-maintenance" -version = "8.5.3" +version = "8.5.4" description = "Maintainer-only Python tooling baseline for productivity-skills." requires-python = ">=3.11" dependencies = [] diff --git a/plugins/productivity-skills/uv.lock b/plugins/productivity-skills/uv.lock index 2356ebce..0a14c41d 100644 --- a/plugins/productivity-skills/uv.lock +++ b/plugins/productivity-skills/uv.lock @@ -228,7 +228,7 @@ wheels = [ [[package]] name = "productivity-skills-maintenance" -version = "8.5.3" +version = "8.5.4" source = { virtual = "." } [package.dev-dependencies] diff --git a/plugins/python-skills/.codex-plugin/plugin.json b/plugins/python-skills/.codex-plugin/plugin.json index 8ede49b9..f0eaaed0 100644 --- a/plugins/python-skills/.codex-plugin/plugin.json +++ b/plugins/python-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "python-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Bundled Python-focused Codex skills for uv bootstrapping, project implementation, diagnostics, packaging, tooling, CI, upgrades, FastAPI, FastMCP, and pytest workflows.", "author": { "name": "Gale", diff --git a/plugins/python-skills/pyproject.toml b/plugins/python-skills/pyproject.toml index 7c4de517..ed9a71c4 100644 --- a/plugins/python-skills/pyproject.toml +++ b/plugins/python-skills/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "python-skills-maintainer" -version = "8.5.3" +version = "8.5.4" description = "Maintainer tooling for the python-skills repository" requires-python = ">=3.11" dependencies = [] diff --git a/plugins/python-skills/uv.lock b/plugins/python-skills/uv.lock index 6f6c318f..38caf80e 100644 --- a/plugins/python-skills/uv.lock +++ b/plugins/python-skills/uv.lock @@ -251,7 +251,7 @@ wheels = [ [[package]] name = "python-skills-maintainer" -version = "8.5.3" +version = "8.5.4" source = { virtual = "." } [package.dev-dependencies] diff --git a/plugins/reverse-engineering-skills/.codex-plugin/plugin.json b/plugins/reverse-engineering-skills/.codex-plugin/plugin.json index 919a3be2..d13413bb 100644 --- a/plugins/reverse-engineering-skills/.codex-plugin/plugin.json +++ b/plugins/reverse-engineering-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "reverse-engineering-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Workflow skills for reverse engineering, decompilation, disassembly, symbol, and artifact-analysis tasks.", "skills": "./skills/", "author": { diff --git a/plugins/rust-skills/.codex-plugin/plugin.json b/plugins/rust-skills/.codex-plugin/plugin.json index 08ab418d..a288c4b1 100644 --- a/plugins/rust-skills/.codex-plugin/plugin.json +++ b/plugins/rust-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "rust-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Rust, Cargo, rustup, crate, workspace, CLI, library, package, CI, testing, linting, and formatting workflow skills.", "skills": "./skills/", "author": { diff --git a/plugins/server-side-jvm/.codex-plugin/plugin.json b/plugins/server-side-jvm/.codex-plugin/plugin.json index 54dd049f..d3e6403f 100644 --- a/plugins/server-side-jvm/.codex-plugin/plugin.json +++ b/plugins/server-side-jvm/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "server-side-jvm", - "version": "8.5.3", + "version": "8.5.4", "description": "Codex skills for choosing, building, testing, and maintaining server-side JVM backend projects with Java and Scala as equal first-party languages and future Clojure support planned.", "author": { "name": "Gale", diff --git a/plugins/server-side-swift/.codex-plugin/plugin.json b/plugins/server-side-swift/.codex-plugin/plugin.json index 58d22c61..29a6fbb4 100644 --- a/plugins/server-side-swift/.codex-plugin/plugin.json +++ b/plugins/server-side-swift/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "server-side-swift", - "version": "8.5.3", + "version": "8.5.4", "description": "Codex skills for bootstrapping, syncing, building, running, containerizing, deploying, and maintaining server-side Swift services, including Vapor, Hummingbird, hb, persistence, Swift OpenAPI, RPC-fit decisions, SwiftNIO, observability, auth, app sync, Docker, Apple Containerization, Fly.io, and SwiftPM-first workflows.", "author": { "name": "Gale", diff --git a/plugins/spotify/.codex-plugin/plugin.json b/plugins/spotify/.codex-plugin/plugin.json index d98dd3b7..36c2db25 100644 --- a/plugins/spotify/.codex-plugin/plugin.json +++ b/plugins/spotify/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "spotify", - "version": "8.5.3", + "version": "8.5.4", "description": "Placeholder plugin repository for future Spotify-focused Codex workflows.", "author": { "name": "Gale", diff --git a/plugins/swift-lang/.codex-plugin/plugin.json b/plugins/swift-lang/.codex-plugin/plugin.json index 72fd3581..06714f69 100644 --- a/plugins/swift-lang/.codex-plugin/plugin.json +++ b/plugins/swift-lang/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "swift-lang", - "version": "8.5.3", + "version": "8.5.4", "description": "Shared Swift language skills for API style, error handling, functional pipelines, formatting, source organization, and modernization cleanup.", "skills": "./skills/", "author": { diff --git a/plugins/swiftasb-skills/.codex-plugin/plugin.json b/plugins/swiftasb-skills/.codex-plugin/plugin.json index b7ae5c79..fa562b5d 100644 --- a/plugins/swiftasb-skills/.codex-plugin/plugin.json +++ b/plugins/swiftasb-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "swiftasb-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Codex skills for explaining SwiftASB and building SwiftUI, AppKit, and Swift package integrations on top of it.", "author": { "name": "Gale", diff --git a/plugins/things-app/.codex-plugin/plugin.json b/plugins/things-app/.codex-plugin/plugin.json index a283c47a..93146494 100644 --- a/plugins/things-app/.codex-plugin/plugin.json +++ b/plugins/things-app/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "things-app", - "version": "8.5.3", + "version": "8.5.4", "description": "Things.app skills and a bundled local MCP server for reminders, planning digests, and structured task workflows.", "author": { "name": "Gale", diff --git a/plugins/things-app/mcp/pyproject.toml b/plugins/things-app/mcp/pyproject.toml index 22d07c01..2a70b746 100644 --- a/plugins/things-app/mcp/pyproject.toml +++ b/plugins/things-app/mcp/pyproject.toml @@ -7,7 +7,7 @@ packages = ["app"] [project] name = "things-mcp" -version = "8.5.3" +version = "8.5.4" requires-python = ">=3.13" dependencies = [ "fastmcp>=3.0.2", diff --git a/plugins/things-app/mcp/uv.lock b/plugins/things-app/mcp/uv.lock index 28de9083..26663d78 100644 --- a/plugins/things-app/mcp/uv.lock +++ b/plugins/things-app/mcp/uv.lock @@ -1241,7 +1241,7 @@ wheels = [ [[package]] name = "things-mcp" -version = "8.5.3" +version = "8.5.4" source = { editable = "." } dependencies = [ { name = "fastmcp" }, diff --git a/plugins/things-app/pyproject.toml b/plugins/things-app/pyproject.toml index 6ca72bb3..990731a5 100644 --- a/plugins/things-app/pyproject.toml +++ b/plugins/things-app/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "things-app-maintenance" -version = "8.5.3" +version = "8.5.4" description = "Maintainer-only Python tooling baseline for things-app skills and plugin packaging." requires-python = ">=3.11" dependencies = [] diff --git a/plugins/things-app/uv.lock b/plugins/things-app/uv.lock index 7db05dac..3d0589d0 100644 --- a/plugins/things-app/uv.lock +++ b/plugins/things-app/uv.lock @@ -120,7 +120,7 @@ wheels = [ [[package]] name = "things-app-maintenance" -version = "8.5.3" +version = "8.5.4" source = { virtual = "." } [package.dev-dependencies] diff --git a/plugins/web-dev-skills/.codex-plugin/plugin.json b/plugins/web-dev-skills/.codex-plugin/plugin.json index dcad8269..7f9a8b7d 100644 --- a/plugins/web-dev-skills/.codex-plugin/plugin.json +++ b/plugins/web-dev-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "web-dev-skills", - "version": "8.5.3", + "version": "8.5.4", "description": "Codex skills for focused web and Expo native-boundary workflows.", "author": { "name": "Gale", diff --git a/pyproject.toml b/pyproject.toml index 4ee00e7f..424fee6f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "socket-maintenance" -version = "8.5.3" +version = "8.5.4" description = "Root uv tooling baseline for the socket superproject." requires-python = ">=3.11" dependencies = [] diff --git a/uv.lock b/uv.lock index 1483a967..4bb680f2 100644 --- a/uv.lock +++ b/uv.lock @@ -286,7 +286,7 @@ wheels = [ [[package]] name = "socket-maintenance" -version = "8.5.3" +version = "8.5.4" source = { virtual = "." } [package.dev-dependencies]