.agents/skills/pokeswift-parity-fix/SKILL.md
Investigate and fix PokeSwift gameplay parity regressions against `pret/pokered` using the repo's source-driven pipeline. Use when a user reports behavior drift from Pokemon Red, asks for parity work in battle/progression/maps/save/load/audio/UI, needs tracing from pokered assembly and data through `PokeExtractCLI`, `Content/Red`, and `PokeCore` or `PokeUI`, or wants a PokeSwift parity review or fix instead of generic Swift refactoring.
npx skillsauth add Dimillian/PokeSwift pokeswift-parity-fixInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Read AGENTS.md and SWIFT_PORT.md before changing milestone-sensitive behavior.
Prefer source-driven fixes. Do not patch runtime behavior if the real defect lives in extraction, generated content, or a broken contract between modules.
Define the exact parity target. Capture the user-visible behavior that should match Red. If the report is vague, anchor it to a concrete flow: map transition, trainer battle, move effect, blackout, evolution, audio cue, save/load path, or UI presentation beat.
Reproduce before editing.
Start with git status --short.
Read the owning implementation instead of guessing.
Use the smallest reproduction that proves the bug: focused tests, telemetry traces, or a native app run.
Trace the ownership chain.
Use this order whenever behavior originates from Red:
pret/pokered asm/data -> PokeExtractCLI -> Content/Red -> PokeContent/PokeDataModel -> PokeCore -> PokeUI/PokeMac.
Stop at the first layer that diverges from expected behavior and fix that layer.
Patch the narrowest correct boundary.
Change extractor code if generated content is wrong.
Regenerate Content/Red/** instead of hand-editing generated artifacts.
Change PokeDataModel first if a shared schema contract is wrong.
Keep PokeCore headless; keep host/UI concerns out of simulation code.
Validate at the correct level.
Use focused extraction/content tests for extractor changes.
Use focused runtime or UI tests for consumer changes.
Run the native app when milestone-sensitive behavior is involved.
Update SWIFT_PORT.md in the same change set when scope, milestone status, or a meaningful parity boundary changes.
PokeExtractCLI
Own parser, normalization, and generated manifest bugs.
Search here first for missing trainer text, wrong warps, map scripts, item data, encounter tables, audio metadata, and battle templates.
Content/Red
Treat as generated evidence, not authoring surface.
Diff it to confirm extraction output, but fix the extractor and regenerate.
PokeDataModel and PokeContent
Own schema and loading contracts.
Use this layer when extraction is correct but runtime sees missing or mis-modeled fields.
PokeCore
Own gameplay simulation, battle rules, progression flags, persistence, and telemetry production.
Fix here when the manifest is correct but runtime semantics drift from Red.
PokeUI and PokeMac
Own native presentation, rendering, app shell, and input/host behavior.
Fix here only when the underlying runtime state is correct and the visible behavior is wrong.
If Tuist manifests or source moves changed:
Run tuist generate --no-open.
If extractor logic or generated content changed:
Run ./scripts/extract_red.sh.
Then run focused PokeExtractCLITests and PokeContentTests.
If runtime logic changed:
Prefer workspace xcodebuild over swift test.
Use the smallest relevant test slice first, then broaden as needed.
If UI or rendering changed:
Run focused PokeUITests or PokeRenderTests, then build PokeMac.
If the bug is only credible through native execution:
Use POKESWIFT_WATCH_MODE=0 ./scripts/launch_app.sh.
Probe telemetry endpoints such as /health and /quit when relevant.
.asm parsing.Content/Red/**.swift test at repo root; this repo validates through the workspace.When asked to review a parity patch instead of fixing it:
git status --short and git diff --stat.pret/pokered assembly/data before calling it a bug.Report these points clearly:
SWIFT_PORT.md was updated or intentionally left unchangeddevelopment
Plan, review, and execute PokeSwift refactors without breaking the Tuist workspace, target graph, or module ownership boundaries. Use when moving or splitting Swift files, reorganizing `Sources/` or `App/`, decomposing large runtime or UI files, cleaning up feature slices, or checking whether a proposed refactor is safe for PokeSwift's Tuist-based workspace.
tools
Investigate, implement, and validate PokeSwift extraction or shared-contract changes without breaking the source-driven pipeline. Use when work touches `PokeExtractCLI`, `PokeDataModel`, `PokeContent`, generated `Content/Red` artifacts, or any bug where the issue may be in extracted data, schema shape, content loading, or extractor-to-runtime contract drift.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------