feat(docs): card-spec skill + Think Twice & Drake Hatcher specs#240
Merged
feat(docs): card-spec skill + Think Twice & Drake Hatcher specs#240
Conversation
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>
CI Report — GateTests: 845/845 passed (194 skipped) Coverage: 11.0% (642/5861 lines)
Slow tests (>3s): 1
|
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
card-specskill for autonomous spec generation by subagentsTest plan
🤖 Generated with Claude Code