Status: done
What to build: Implement 36041 — Lionsmane (vp ice, Sentry - AP, rez 6, str 4). Subroutines:
1. "Do 2 net damage."
2. "Do 2 net damage unless the Runner pays 3[credit]."
3. "Do 2 net damage unless the Runner jacks out."
Follow docs/adding-a-card.md: hook block in rust/netrunner-core/src/cards/vp.rs, ≥1 card_36041_* test, flags in game/cards_impl/vp.json.
Watch out for: subs 2 and 3 are Runner "unless" decisions during subroutine resolution — check whether an existing sub offers a Runner pay-or-suffer choice to pattern-match (Tithe 30073 and Ping 30055 are implemented sg ice; Anoetic Void 30050 has a Corp pay-or-else shape). Sub 3's "unless the Runner jacks out" must actually end the run when chosen, and can't be chosen if jacking out isn't legal (e.g. cannot-jack-out effects, if the engine models any). Runner with <3 credits gets no pay option on sub 2.
No Runner pay-or-suffer sub existed to copy. Funhouse's "give the Runner 1
tag unless they pay 4" (engine::fire_subroutine pattern 13) pays automatically
whenever the Runner can afford it — the Runner is never asked. That is a real
approximation, but it is a tag, where paying is nearly always right; 2 net
damage against 3 credits is a genuine choice, so Lionsmane opens a decision
(DecisionData::Lionsmane) instead. Both subs share one decision kind with an
escape discriminator, the Cultivate-stage pattern.
Cannot-jack-out is not modelled, so sub 3 always offers the escape.
RunState::jack_out is written (Ansel 1.0's third subroutine sets it false) and
read by nobody, and no implemented card prints a cannot-jack-out effect. Gating
on that flag today would remove an option the Runner really has; the comment on
cards::vp::lionsmane_jack_or_damage marks the line that learns to check it
when such a card lands.