| name | evaluate-card |
| description | Evaluate Shadowverse card DSL behavior using eval-card.js scenario packets. Use when verifying card implementations, fixing DSL, or marking cards pass/fail in card-manifest.json. |
Evaluate Card DSL
When to use
- User asks to verify a card works correctly
- After authoring or changing DSL in
packages/sve-engine/data/card-defs/sets/<SET>.json
- During expansion rollout (BP01, BP02, …)
Workflow
-
Build engine (if needed):
npm run build:engine
-
Run eval packet:
node src/scripts/eval-card.js <cardNo>
Output: eval-reports/<cardNo>.md plus stdout.
-
Read the packet:
- Official card text vs resolved DSL
- Scenario results (action trace, assertions, state diff)
- Open questions (missing scenarios, unresolved choices)
-
Compare behavior to text using the embedded rubric:
- Timings (fanfare, last words, evolve, activate, spell)
- Costs, targets, conditions (including Necrocharge)
- Optional branches and once-per-turn limits
-
If fail — fix DSL in the correct set file:
packages/sve-engine/data/card-defs/sets/<SET>.json
-
If scenario gap — add YAML under:
packages/sve-engine/scenarios/cards/<cardNo>-<slug>.yaml
-
Re-run until scenarios pass:
npm run eval:scenarios
node src/scripts/eval-card.js <cardNo>
-
Update manifest:
- Edit
packages/sve-engine/data/card-manifest.json for the card:
evalStatus: pass | fail | blocked | keyword-only
dslStatus: verified | authored | keyword-only | missing
blockers: engine primitives still needed
lastEvalAt: ISO date
- Or regenerate base manifest:
npm run generate:manifest
Scenario authoring
See packages/sve-engine/docs/dsl-authoring.md for DSL schema.
Example scenario actions:
play: CARDNO — play from hand
resolveTrigger: fanfare
selectZone: { zone: cemetery, cardNo: CARDNO }
activate: CARDNO
engageFollowers: [ALLY1, ALLY2]
Batch commands
node src/scripts/eval-card.js --set BP01 --inventory
node src/scripts/parse-effects-to-dsl.js --set BP01
npm run coverage:cards
Verdicts
| Verdict | Meaning |
|---|
pass | Text matches DSL and scenarios |
fail | DSL wrong; fix set file |
blocked | Needs new engine primitive (add to manifest blockers) |
keyword-only | No effects beyond printed keywords |