Skip to content

feat(docs): card-spec skill + Think Twice & Drake Hatcher specs#240

Merged
delebedev merged 28 commits intomainfrom
feat/card-specs
Mar 26, 2026
Merged

feat(docs): card-spec skill + Think Twice & Drake Hatcher specs#240
delebedev merged 28 commits intomainfrom
feat/card-specs

Conversation

@delebedev
Copy link
Owner

Summary

  • Card specs: unit of work for implementing card support — Forge script → mechanics → catalog mapping → trace → gaps
  • card-spec skill for autonomous spec generation by subagents
  • Think Twice spec: flashback wire shape confirmed (CastSpell from GY, Resolve to Exile)
  • Drake Hatcher spec: incubation counter_type=200 discovered, SubCounter activation cost pattern

Test plan

  • Think Twice spec manually authored + verified against raw proto
  • Drake Hatcher spec generated by conformance subagent using card-spec skill
  • Both specs follow consistent template

🤖 Generated with Claude Code

Card specs are the unit of work for implementing card support.
Each spec decomposes Forge script → mechanics → catalog status →
trace from recordings → gaps → supporting evidence.

- card-spec skill: structured process for building specs from
  Forge scripts + recording traces
- Think Twice: flashback wire shape confirmed — CastSpell category
  from GY, Resolve category to Exile (not Exile category)
- Drake Hatcher: incubation counter_type=200 discovered, SubCounter
  activation cost fires at activation not resolution, vigilance
  wire-confirmed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link

github-actions bot commented Mar 25, 2026

Test Results

  252 files  ±0    252 suites  ±0   2m 52s ⏱️ +5s
1 030 tests ±0  1 004 ✅ ±0   26 💤 ±0  0 ❌ ±0 
1 841 runs  ±0  1 019 ✅ ±0  822 💤 ±0  0 ❌ ±0 

Results for commit 2bc3b3c. ± Comparison against base commit bf9497b.

♻️ This comment has been updated with latest results.

@github-actions
Copy link

github-actions bot commented Mar 25, 2026

CI Report — Gate

Tests: 845/845 passed (194 skipped)

Coverage: 11.0% (642/5861 lines)

Module Coverage Lines
tooling 🔴 11% 642/5861
Slow tests (>3s): 1
  • InstanceIdReallocTest.Limbo grows across multiple plays (5.4s)

delebedev and others added 27 commits March 25, 2026 23:24
Agent-generated specs with Forge event column added to skill.

- Kiora: ETB loot (draw+discard in one ability), SelectNReq for
  discard choice mid-resolution, AbilityWordActive threshold tracking
- Treasure Map: transform = silent grpId mutation (87432→87433),
  landmark counter_type=127, 3 atomic TokenCreated in one diff
- Brass's Tunnel-Grinder: bore counter_type=182, AbilityWordActive
  for Descended, transform unobserved (game ended early)
- Skill: added Forge event column to mechanics table

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- "What it does" must be game-rules generic, no session details
- Annotations: only novel/gap-filling, 3-5 groups max
- Supporting evidence: cross-references only, tasks go in Gaps
- Forge event column explicitly required

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Black Mage's Rod: job_select = TokenCreated + AttachmentCreated in
  one trigger resolution, no SelectTargetsReq. Single data point,
  Dragoon's Lance in 23-10-20 available for variance.
- Nullpriest: kicker wired, kicked ETB return-from-GY traced.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Max 3 proto frame decodes per spec
- Grep-filter instead of full proto-inspect dumps
- Skip tracing wired/works mechanics entirely
- Explicit "unobserved" flagging when mechanic wasn't exercised
- Also adds Nullpriest spec (kicker not paid — flagged correctly)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Investigate ETB: Clue token grpId=89236, sac-for-draw bracket
fires in single diff before resolution. AbilityInstanceDeleted
uses pre-rename Clue iid as affectorId.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Specs must be self-contained — never reference agent-memory
- Only reference committed docs (catalog, rosetta, conformance/, card-specs/)
- "What it does" = game rules only, no wire details
- Unobserved mechanics get a banner callout
- Track old vs new ID on ObjectIdChanged
- Skip mana payment brackets

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace manual Python snippets with:
- just tape proto find-card (zone transitions)
- just tape session cards (card manifest)
- just proto-trace (ID lifecycle)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mandatory additional cost (discard): PayCostsReq promptId=1024,
EffectCostResp empty, Discard ZoneTransfer with spell iid as
affectorId. Distinct from SelectNReq and CastingTimeOptionsReq paths.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Conditional ETB (from-GY check) unobserved — cast from hand only.
Lifelink combat damage confirmed. Needs dedicated recording with
GY recursion (Raise Dead / Cauldron Familiar loop) to trigger the
self-exile + 5/5 Demon token creation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CastAdventure = actionType 16 (distinct from CastSpell). Adventure
resolves to Exile (category=Resolve zone=29). Cast creature from
Exile = CastSpell zone_src=29. Adventure proxy type=Adventure
companion object on stack. Two TokenCreated (Rats) on resolve.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GY activated ability: server offers Activate in GSM actions array
the moment card enters GY. inactiveActions field surfaces abilities
with unmet costs (no Food). Actual GY→BF return unobserved — needs
session with Food tokens.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Record → Spec → Synthesize → Implement → Close the loop.
Vertical card specs feed horizontal layers (counter mapper,
token registry, transform, cast-from-non-hand). Horizontal
PRs get unit tests, card puzzles are integration gates.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Class enchantment: all abilities sent upfront at L1, level-up
offered via Activate action, inactiveActions with
disqualifyingSourceId gates tier progression. No mechanics
exercised — game ended T12. Needs dedicated recording.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Cards are vehicles — simplest card for the combo wins. 20K cards,
~50-100 mechanic combos. Complex lifecycles (adventure) may need
multiple puzzles per phase.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tier 1 (data): counter type mapper (3 types), token registry (6 grpIds)
Tier 2 (handlers): transform, cast-from-non-hand, AbilityWordActive,
  GY→BF return (unobserved), mandatory additional cost
Tier 3 (new mechanics): adventure, job select, GY activation,
  class leveling, ninjutsu

4 existing issues to update, 5 new issues to create.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ninjutsu never activated — offered via inactiveActions (decoder
drops this field). Normal cast confirmed. Copy tokens carry source
grpId. Needs dedicated session with ninjutsu activation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All 12 agent-generated specs referenced .claude/agent-memory/ files
(gitignored, local-only). Replaced with committed docs (rosetta.md,
catalog.yaml, SYNTHESIS.md, other card-specs) or inlined the finding.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ard specs

Read all specs → group gaps → update rosetta/catalog → link issues →
flag trace gaps → write SYNTHESIS.md. Three tiers: data registration,
shared handlers, new mechanics. Prioritized by unblock count.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two modes: broad scan (keyword density) and targeted (fill SYNTHESIS.md
trace gaps). Aggregates cards.json across sessions, excludes already
spec'd cards, suggests groupings and next actions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Kicker paid both casts. GY→BF transfer category = "Return" (the
missing piece for Nullpriest, Cauldron Familiar, Cleric Class).
SelectTargetsReq targetSourceZoneId=33 for GY targeting. Fizzle
path: no targets → ability deleted in same diff, no SelectTargetsReq.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sun-Blessed Healer spec resolved the unknown. Unblocks Nullpriest,
Cauldron Familiar, Cleric Class, Archfiend's Vessel.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ETB draw confirmed. LTB unobserved (never sacrificed). ETB and LTB
share same abilityGrpId 190898 — server disambiguation unknown.
Needs session where permanent leaves BF.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Flashback: same Cast action, distinguished by abilityGrpId.
CastingTimeOption pAnn type=13 for alternate cost. Copy token
carries source grpId + new TemporaryPermanent pAnn. Adventure
proxy replicates on copy of adventure creatures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AbilityWordActive fires at cast (on stack), not resolve. Case
solving is silent — no CaseSolved annotation, just pAnn value
update. Value resets at NewTurnStarted. Solve mechanics unobserved.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sacrifice-as-cost via PayCostsReq promptId=1074. Tap trigger
(140120) fires on any tap including attack — +1/+1 counter + exile
from GY combined. AddAbility for temp indestructible uses
affectorId=permanent (not ability instance).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New layers: copy tokens (TemporaryPermanent pAnn), sacrifice-as-cost
(PayCostsReq 1074), AbilityWordActive at cast not resolve, ETB/LTB
shared grpId, flashback abilityGrpId detail. 8 trace gaps for next
recording sessions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@delebedev delebedev merged commit 12b9280 into main Mar 26, 2026
3 checks passed
@delebedev delebedev deleted the feat/card-specs branch March 26, 2026 00:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant