.agents/skills/pokeswift-extractor-contract-change/SKILL.md
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.
npx skillsauth add Dimillian/PokeSwift pokeswift-extractor-contract-changeInstall 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.
Treat generated content as evidence, not authoring surface. Prefer fixing the first broken contract layer instead of compensating in runtime code.
Define the failing contract. Capture the exact value or shape that is wrong: missing dialogue ID, wrong warp/checkpoint, broken map script, bad trainer manifest, missing audio cue metadata, stale item/species/move field, or loader decode mismatch.
Trace the first diverging layer.
Use this order:
pret/pokered asm/data -> PokeExtractCLI -> Content/Red -> PokeDataModel/PokeContent -> PokeCore/PokeUI.
Fix the first layer that differs from the expected source-driven result.
Pick the right ownership boundary.
If the extracted value is wrong, change PokeExtractCLI.
If the extracted value is right but the shared model cannot represent it, change PokeDataModel first.
If the model is right but loading or validation is wrong, change PokeContent.
Only change PokeCore or PokeUI after the upstream contract is correct.
Regenerate instead of patching artifacts.
After extractor changes, run ./scripts/extract_red.sh.
Never hand-edit Content/Red/** as the fix.
Validate upstream first, then downstream.
Run focused PokeExtractCLITests and PokeContentTests.
Then run the smallest runtime or UI tests that consume the changed contract.
Update SWIFT_PORT.md if the shipped scope, milestone boundary, or system ledger changed.
PokeExtractCLI
Own parsing, normalization, template assembly, and deterministic manifest generation.
Search here for battle text templates, trainer dialogues, encounter tables, map objects/scripts, warps, marts, items, audio cues, and source-derived flags.
Content/Red
Treat as generated output.
Diff it to confirm what changed, but do not author fixes here.
PokeDataModel
Own shared manifests and save/telemetry schemas.
Put contract changes here before duplicating structure in loaders or runtime code.
PokeContent
Own content loading, validation, and repo-contract tests.
Fix this layer when manifests are correct but decoding, validation, or loader defaults are wrong.
PokeCore and PokeUI
Consume contracts.
Change these only after upstream data and shared types are proven correct.
common_text.asmContent/Red diffs that look suspicious after extractor workIf extraction logic changed:
Run ./scripts/extract_red.sh.
If manifests or schemas changed:
Run focused PokeExtractCLITests and PokeContentTests.
If runtime consumers changed because of the contract:
Run the smallest relevant PokeCoreTests or PokeUITests slice.
If file moves or target-sensitive edits happened during the change:
Run tuist generate --no-open before broader validation.
Content/Red/**.if statements.When reviewing an extractor or contract patch:
git diff --stat and the changed generated artifacts.Content/Red diffs as first-class findings.Report these points clearly:
SWIFT_PORT.md changeddevelopment
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 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.
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? | | ------------------------------------------------------ | --------------------------