agentsclimarketplace

Si rules check

Skill bfowle/spirit-island/skills/si-rules-check

Use BEFORE writing any spirit-chapter Opening Strategy T1/T2/T3 blocks, Tempo Profile tables, or per-turn Energy/CP/elements claims. Returns the spirit's Wiki-verified starting state + growth-option decoder + legal-play-combination calculator, so the resulting turn-by-turn prose is mechanically valid rather than hallucinated. Resolves the class of bug caught on Shadows T1 (wrote "Concealing + Mantle" when Shadows starts 0E/1CP and neither G2 branch allows that combo).From its SKILL.md

Install
npx -y skills add bfowle/spirit-island --skill si-rules-check

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

12.8 KB, ~3.3k tokens by cl100k_base, as published. Nobody here has run it

si-rules-check — pre-write mechanics verification

Why this exists

Real bug caught by Brett: I wrote Shadows's Opening A T1 as "G2 → play Concealing Shadows (0E) + Mantle of Dread (1E), 1E spent, Innate L1 fires." All three claims are false:

  1. Starting Energy is 0, not 1. Shadows's presence_energy_track[0] = "energy0" per the Wiki.
  2. Starting Card Plays is 1, not 2. presence_cardplay_track[0] = "card1".
  3. G2 = gain 1 Minor + place 1 Presence from one track. Whichever track you uncover gives you its next slot's income — not both tracks' slots.
  4. Therefore no T1 configuration lets you play both a 0E card and a 1E card.

This skill prevents that class of error. Invoke it before writing any mechanics-dependent section.

When to invoke

  • Before writing a spirit chapter's Opening Strategy section (T1/T2/T3 blocks).
  • Before writing a Tempo Profile table (per-round E/CP/presence claims).
  • Before claiming an innate fires on a specific turn.
  • Before enumerating "legal plays" for a turn.
  • Before recommending a growth choice in si-at-the-table.

Do not use this skill for generic strategy commentary (archetype, synergies, adversary matchup prose) — only for mechanical claims.

Input

The skill takes one argument: the spirit slug (matching the filename in data/references/wiki/{slug}.json).

Example: si-rules-check shadows-flicker-like-flame.

Output

A structured markdown brief the writer can reference:

# Shadows Flicker Like Flame — Rules Check

## Starting state (T1, before any growth)
- Energy: 0  (from presence_energy_track[0] = "energy0")
- Card Plays: 1  (from presence_cardplay_track[0] = "card1")
- Hand: 4 Uniques (Concealing Shadows, Crops Wither and Fade, Favors Called Due, Mantle of Dread)
- Elements this turn: 0 of everything (cleared each turn)

## Growth options (pick ONE per turn; "growthtype=one")
- G1 (first=reclaim, second=gain1p): Reclaim all played+discarded. Gain 1 Minor. No presence placed.
  → T1 state after G1: 0E / 1CP (unchanged).
- G2 (first=gain1p, second=addpresence1): Gain 1 Minor. Place 1 Presence Range 1 from ONE track.
  → Place from CP track: reveal card2 → 0E / 2CP (2 cards, 0 energy).
  → Place from Energy track: reveal energy1 → 1E / 1CP (1 card, 1 energy).
- G3 (first=addpresence3, second=energy3): Place 1 Presence Range 3 from ONE track. +3 Energy this turn.
  → Place from CP track: reveal card2 → 3E / 2CP.
  → Place from Energy track: reveal energy1 → 1E+3 = 4E / 1CP.

## Unique cards (cost + speed + elements)
- Concealing Shadows: 0E Fast / Moon, Air
- Crops Wither and Fade: 1E Slow / Moon, Fire, Plant
- Favors Called Due: 1E Slow / Moon, Air, Animal
- Mantle of Dread: 1E Slow / Moon, Fire, Air

## Legal T1 plays (card combinations)
Given starting 0E/1CP + growth choice, enumerate:

**G1 (no track reveal)** → 0E / 1CP:
- 0 cards played, OR
- 1 card at cost ≤ 0: **Concealing Shadows alone** (only legal option).

**G2 via CP track** → 0E / 2CP:
- 0–2 cards played; sum of costs ≤ 0.
- Legal combos: {}, {Concealing}, {Concealing + [any 0-cost Minor drafted]}.
- **Illegal**: Concealing + Mantle (Mantle costs 1E, we have 0E).

**G2 via Energy track** → 1E / 1CP:
- 0–1 cards played; sum of costs ≤ 1.
- Legal combos: {}, {Concealing (0E)}, {Crops Wither (1E)}, {Favors Called Due (1E)}, {Mantle of Dread (1E)}.

**G3 via CP track** → 3E / 2CP:
- 0–2 cards played; sum of costs ≤ 3.
- Legal combos include: {Concealing + Mantle (0E+1E=1E)}, {Crops Wither + Mantle (2E)}, {Favors + Mantle (2E)}, etc.

**G3 via Energy track** → 4E / 1CP:
- 0–1 cards played; sum of costs ≤ 4.
- Legal: any single card.

## Element threshold matching (for the innate)

Innate: Darkness Swallows the Unwary (Fast, Range 1, optional Sacred Site target)
- L1: 2 Moon + 1 Fire  → Gather 1 Explorer.
- L2: 3 Moon + 2 Fire  → Destroy up to 2 Explorer. 1 Fear per destroyed.
- L3: 4 Moon + 3 Fire + 2 Air → 3 Damage. 1 Fear per Invader destroyed.

Cards' element contributions (from Wiki):
- Concealing Shadows: 1 Moon + 1 Air
- Crops Wither: 1 Moon + 1 Fire + 1 Plant
- Favors Called Due: 1 Moon + 1 Air + 1 Animal
- Mantle of Dread: 1 Moon + 1 Fire + 1 Air

For T1 innate firing (need 2M+1F), minimum requirement:
- 2 cards providing 2 Moon + 1 Fire: {Concealing + Mantle}, {Concealing + Crops Wither}, {Crops Wither + any Moon card}, etc.
- **No single card** provides 2M+1F → innate cannot fire T1 on a single-card turn.
- Therefore: **innate L1 requires at least G3-via-CP-track + 2 qualifying cards, OR deferring L1 firing to T2 via reclaim cycle.**

## What to cite in prose

When writing T1:
- Cite actual E/CP after the chosen growth.
- Name exact cards played with costs summed.
- Only claim innate firing if the summed elements cross the threshold.
- If you can't hit a threshold legally, say so: "Innate L1 does not fire T1; fires T2 after Reclaim."

## Audit hook

If a previously-authored chapter has a T1 block:
1. Re-run this skill for the spirit.
2. Check whether the chapter's claimed E/CP and play combinations are in the "Legal T1 plays" list.
3. If not, flag with `[VERIFY: illegal per rules-check]` and revise.

## Data sources

- `data/references/wiki/{slug}.json` — parsed spirit data (start tracks, growth options, unique cards).
- `scripts/wiki-fetch.py` — re-fetch if data is stale.
- Future: `tools/si-live/common/` Rust crate — canonical rule engine (Phase A+).

## Rules this skill enforces

1. **Starting state = first-uncovered track slots**. Not an assumption.
2. **One track reveal per presence placement** (not both tracks simultaneously).
3. **Growth options are atomic**: `first` + `second` + (optional) `third` effects all resolve together when you pick that growth.
4. **Card plays this turn ≤ current CP**.
5. **Sum of card costs ≤ current Energy**.
6. **Fast cards resolve in Fast phase; Slow in Slow phase.**
7. **Elements accumulate from cards played that turn only; reset at turn end.**
8. **Innate firing requires threshold elements *available at the innate's phase of resolution*; free of energy cost.** See "Innate element timing" below — Fast innates cannot see Slow-card elements.
9. **Special-rule usage (e.g., Shadows of the Dahan's 1E range extension) spends energy from the spirit's pool.**
10. **Invader phase contents by turn** determine which card effects are material vs. dormant that turn. See "Invader phase by turn" below.
11. **Dormant-effect rule**: card clauses gated on Ravage / Damage-from-Invaders are null effects on turns where the trigger does not occur in the target land. Don't cite them as opener value on those turns.

## Invader phase by turn (base-game standard invader deck)

The standard 8-round game has the invader deck advance one column per turn:

| Turn | Explore | Build | Ravage | Notes                                                            |
|------|---------|-------|--------|------------------------------------------------------------------|
| 1    | ✓       | —     | —      | Invader Card 1 = Stage I Explore. No Build, no Ravage.           |
| 2    | ✓       | ✓     | —      | Card 1 advances to Build column; Card 2 enters Explore. No Ravage. |
| 3    | ✓       | ✓     | ✓      | Card 1 → Ravage (first Ravage of the game); Card 2 → Build; Card 3 → Explore. |
| 4+   | ✓       | ✓     | ✓      | Full cycle continues; each card cycles through Ravage → discard.   |

**Implications for opener prose**:

- T1 cards tagged "prevents Ravage", "Dahan take 0 Damage from Ravaging", "Invaders can't Ravage here", "Defend N" → null this turn. Only their Fear / elements / non-Ravage effects are material.
- T2 cards with "prevents Ravage" etc. → still null (no Ravage until T3).
- T3 is the earliest turn these effects are material, and only in lands Ravaged that turn.

**Adversary caveats**: adversary escalation cards can shift this. Sweden front-loads a Build; some Habsburg levels add early Builds. Check the adversary JSON (`data/adversaries.json` / per-level escalation text) before claiming standard base-deck timing.

## Innate element timing

When an Innate Power resolves, it checks its thresholds against elements generated **so far this turn** — i.e., elements produced by cards whose effects have already resolved.

| Innate speed | Can see elements from | Cannot see |
|--------------|----------------------|------------|
| **Fast**     | Fast cards played this turn before the innate resolves | Slow cards (resolve later in the turn) |
| **Slow**     | Fast cards + Slow cards played this turn before the innate resolves | — |
| **Fast or Slow** (player's choice) | Depends on which phase the player resolves it in | — |

**Corollary**: a Slow card cannot "feed" a Fast innate. The Slow card's elements arrive after the Fast innate's resolution window has closed.

**Worked example — Shadows T1 Opening A**:
- Fast phase: Concealing Shadows plays → 1 Moon + 1 Air in pool.
  - Darkness Swallows the Unwary (Fast innate) checks L1 threshold (2 Moon + 1 Fire): pool has 1M+1A → **does NOT fire**.
- Slow phase: Mantle of Dread plays → adds 1 Moon + 1 Fire + 1 Air (pool now 2M+1F+2A).
  - Darkness Swallows has already resolved. It does not re-check. **L1 does not fire this turn**.

Authoring consequence: claims like "L1 fires T1 via Concealing + Mantle elements" are **invalid** — the Fast innate can't see Mantle's Slow-phase contribution.

**Elements do NOT persist across turns.** At Time Passes, the element pool resets to empty. T2 starts with 0 elements regardless of T1 plays.

## Dormant-effect detection

Card effects that depend on a trigger outside the current turn are **dormant** on turns where the trigger doesn't fire. When citing such a card in opener prose, you must explicitly say so.

Common dormant clauses + their trigger:

| Clause                                                     | Trigger (when material)                                                |
|------------------------------------------------------------|------------------------------------------------------------------------|
| "Dahan take 0/no Damage from Ravaging this turn"           | A Ravage happens in target land THIS turn (T3+ in base)                |
| "Defend N"                                                 | The target land takes Damage from a Ravage THIS turn                    |
| "Invaders can't Ravage here this turn"                     | A Ravage would otherwise happen in target land THIS turn                |
| "Dahan here deal 2 Damage during Ravages this turn"        | A Ravage happens in target land THIS turn                                |
| "Invaders in this land skip their next Build"              | A Build happens in target land THIS turn (T2+ in base; target-specific) |
| "Push N Explorers/Towns that were just brought by Explore" | An Explore placed units in target land THIS turn                       |

**Rule for opener writers**: on any turn where the trigger doesn't fire, write "dormant this turn; first becomes material on T<N>" rather than citing the effect as the card's T<current> value. The card's Fear / elements / other clauses remain material.

## Phase-timing summary block (included in skill output)

When invoked on a spirit, the skill returns a summary like:

Shadows Flicker Like Flame — Phase Timing Summary

Turn 1 invader contents

  • Explore only. Ravage-protection / Defend effects are dormant T1.

Turn 2 invader contents

  • Explore + Build. Ravage-protection / Defend still dormant.

Turn 3 invader contents

  • Explore + Build + Ravage. First turn Ravage-protection becomes material.

Innate speed

  • Darkness Swallows the Unwary: Fast → resolves in Fast phase; only sees elements from Fast cards played so far this turn.

Fast-phase element ceiling from Uniques alone

  • Concealing Shadows (Fast, 1M+1A) is the only Fast Unique.
  • Fast-phase Moon ceiling from Uniques = 1. L1 needs 2 Moon → not reachable from Uniques alone.
  • L1 fires in Fast phase only with a drafted Fast Moon+Fire Minor (e.g., Visions of Fiery Doom 1M+1F, or Land of Haunts and Embers 1M+1F+1A).

Authors read this block **before** writing T1/T2/T3 prose and cite specific lines when asserting "L1 fires T<N>" or "dormant this turn" in their chapter text.

## Related

- `memory/feedback_verify_mechanics_before_writing.md` — the rule this skill enforces.
- `scripts/wiki-fetch.py` — data source.
- `skills/si-at-the-table/SKILL.md` — consumer of this skill's output for live-game advice.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,851. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.