$ pnpm data:test # cwd /Users/king/Desktop/Workspace/SRO/zoen # exit 0 > zoen@0.1.0 data:test /Users/king/Desktop/Workspace/SRO/zoen > pnpm --filter @zoen/game-data test > @zoen/game-data@0.1.0 test /Users/king/Desktop/Workspace/SRO/zoen/packages/game-data > node --test "tests/*.test.mjs" TAP version 13 # Subtest: ctx: a skill pack carries the contract and is a small fraction of skills.json ok 1 - ctx: a skill pack carries the contract and is a small fraction of skills.json --- duration_ms: 1585.998333 type: 'test' ... # Subtest: ctx: every skill, monster and zone resolves; unknown ids exit 1 with suggestions ok 2 - ctx: every skill, monster and zone resolves; unknown ids exit 1 with suggestions --- duration_ms: 1307.558709 type: 'test' ... # Subtest: ctx: polish slices by area, item and stage; roadmap tasks and milestones ok 3 - ctx: polish slices by area, item and stage; roadmap tasks and milestones --- duration_ms: 8560.154625 type: 'test' ... # Subtest: ctx guide: every \#\# and \#\#\# section prints exactly its text; a \#\# section holds its children and a \#\#\# stops at the next heading ok 4 - ctx guide: every \#\# and \#\#\# section prints exactly its text; a \#\# section holds its children and a \#\#\# stops at the next heading --- duration_ms: 1860.126292 type: 'test' ... # Subtest: ctx guide: with no anchor it lists every section with bytes and tokens ok 5 - ctx guide: with no anchor it lists every section with bytes and tokens --- duration_ms: 1006.875583 type: 'test' ... # Subtest: ctx guide: several anchors print in the order asked, and a section inside another asked-for one prints once ok 6 - ctx guide: several anchors print in the order asked, and a section inside another asked-for one prints once --- duration_ms: 2372.137459 type: 'test' ... # Subtest: ctx guide and doc: an unknown anchor, doc or path outside docs/ exits 1 and says what is valid ok 7 - ctx guide and doc: an unknown anchor, doc or path outside docs/ exits 1 and says what is valid --- duration_ms: 5158.227542 type: 'test' ... # Subtest: ctx slicer: ids and slugs follow the wiki; fenced code and front matter are skipped; a section ends at a heading of its level or above ok 8 - ctx slicer: ids and slugs follow the wiki; fenced code and front matter are skipped; a section ends at a heading of its level or above --- duration_ms: 3.409917 type: 'test' ... # Subtest: ctx doc: any doc under docs/ by anchor, with or without the docs/ prefix; every doc parses ok 9 - ctx doc: any doc under docs/ by anchor, with or without the docs/ prefix; every doc parses --- duration_ms: 3482.72975 type: 'test' ... # Subtest: roadmap guide: every id a task names resolves, none repeats or sits inside another, and ctx task prints the exact command ok 10 - roadmap guide: every id a task names resolves, none repeats or sits inside another, and ctx task prints the exact command --- duration_ms: 2208.356459 type: 'test' ... # Subtest: the read-first rule and the tools table point at the guide slices ok 11 - the read-first rule and the tools table point at the guide slices --- duration_ms: 1.76375 type: 'test' ... # Subtest: task-log: a Claude Code session is attributed by itself; without any session id it says so ok 12 - task-log: a Claude Code session is attributed by itself; without any session id it says so --- duration_ms: 3199.741334 type: 'test' ... # Subtest: task-log: two tests of one task that run at the same time keep separate log files ok 13 - task-log: two tests of one task that run at the same time keep separate log files --- duration_ms: 2117.686166 type: 'test' ... # Subtest: art library has items and unique ids ok 14 - art library has items and unique ids --- duration_ms: 2.741833 type: 'test' ... # Subtest: every web image exists, is WebP and is small ok 15 - every web image exists, is WebP and is small --- duration_ms: 619.193917 type: 'test' ... # Subtest: every original still exists inside zoen with the recorded hash (originals untouched) ok 16 - every original still exists inside zoen with the recorded hash (originals untouched) --- duration_ms: 7086.791583 type: 'test' ... # Subtest: art request ids unique and prioritised ok 17 - art request ids unique and prioritised --- duration_ms: 3.002875 type: 'test' ... # Subtest: every reference image exists (so Codex can compare with current art) ok 18 - every reference image exists (so Codex can compare with current art) --- duration_ms: 220.784292 type: 'test' ... # Subtest: every iconRequest in game data has an art request ok 19 - every iconRequest in game data has an art request --- duration_ms: 31.838208 type: 'test' ... # Subtest: markdown files exist for every category and prompts are non-trivial ok 20 - markdown files exist for every category and prompts are non-trivial --- duration_ms: 1.313583 type: 'test' ... # Subtest: art requests carry delivery path, status, filesystem references and update instructions ok 21 - art requests carry delivery path, status, filesystem references and update instructions --- duration_ms: 187.116541 type: 'test' ... # Subtest: art-sync (dry run) matches a delivered file to its request and plans the data update ok 22 - art-sync (dry run) matches a delivered file to its request and plans the data update --- duration_ms: 6882.705917 type: 'test' ... # Subtest: art-sync (dry run) matches nested files to wildcard bundle requests ok 23 - art-sync (dry run) matches nested files to wildcard bundle requests --- duration_ms: 5705.571542 type: 'test' ... # Subtest: size and composition ok 24 - size and composition --- duration_ms: 10.45575 type: 'test' ... # Subtest: every edge endpoint exists, no duplicate or self edges, graph is connected ok 25 - every edge endpoint exists, no duplicate or self edges, graph is connected --- duration_ms: 2.211958 type: 'test' ... # Subtest: no two nodes overlap (≥ 12 units clear between rims) ok 26 - no two nodes overlap (≥ 12 units clear between rims) --- duration_ms: 128.856834 type: 'test' ... # Subtest: no path passes under a node it does not connect (≥ 6 units clear) ok 27 - no path passes under a node it does not connect (≥ 6 units clear) --- duration_ms: 9415.134417 type: 'test' ... # Subtest: no two paths cross each other ok 28 - no two paths cross each other --- duration_ms: 114955.499875 type: 'test' ... # Subtest: arc edges really are circular and start/end on their nodes ok 29 - arc edges really are circular and start/end on their nodes --- duration_ms: 2.083958 type: 'test' ... # Subtest: every mastery reachable from every origin without crossing another start ok 30 - every mastery reachable from every origin without crossing another start --- duration_ms: 4.856166 type: 'test' ... # Subtest: path identity: own pure masteries cheapest, hybrids cost more, far poles cost most ok 31 - path identity: own pure masteries cheapest, hybrids cost more, far poles cost most --- duration_ms: 14.179625 type: 'test' ... # Subtest: every build’s recommended origin can wield an item-level-40 weapon within 45 points ok 32 - every build’s recommended origin can wield an item-level-40 weapon within 45 points --- duration_ms: 6.209083 type: 'test' ... # Subtest: icons on nodes exist; nodes without icons carry an art request ok 33 - icons on nodes exist; nodes without icons carry an art request --- duration_ms: 4.67825 type: 'test' ... # Subtest: opportunity cost: far-pole weapons need ~2× the points of the native origin ok 34 - opportunity cost: far-pole weapons need ~2× the points of the native origin --- duration_ms: 2.404667 type: 'test' ... # Subtest: gen-atlas.mjs is deterministic ok 35 - gen-atlas.mjs is deterministic --- duration_ms: 973.426625 type: 'test' ... # Subtest: gen-progression.mjs is deterministic ok 36 - gen-progression.mjs is deterministic --- duration_ms: 582.011458 type: 'test' ... # Subtest: 11 equipment slots: helmet, main hand, off hand, gloves, boots, armour, belt, necklace, earring, 2 rings ok 37 - 11 equipment slots: helmet, main hand, off hand, gloves, boots, armour, belt, necklace, earring, 2 rings --- duration_ms: 3.000333 type: 'test' ... # Subtest: rarity is the affix count; affix tiers climb T5 < T4 < T3 ok 38 - rarity is the affix count; affix tiers climb T5 < T4 < T3 --- duration_ms: 2.001458 type: 'test' ... # Subtest: example items are legal: affix count = rarity, ≤3 prefixes/suffixes, slot, tier by ilvl, value in range, sockets ≤ cap ok 39 - example items are legal: affix count = rarity, ≤3 prefixes/suffixes, slot, tier by ilvl, value in range, sockets ≤ cap --- duration_ms: 1.833833 type: 'test' ... # Subtest: orbs and shards stack to 999 and have icons; gems have icons ok 40 - orbs and shards stack to 999 and have icons; gems have icons --- duration_ms: 5.673458 type: 'test' ... # Subtest: consumables: potions, cleanses, elixirs, food and the travel/speed/reset scrolls exist; vendors are real NPCs ok 41 - consumables: potions, cleanses, elixirs, food and the travel/speed/reset scrolls exist; vendors are real NPCs --- duration_ms: 1.230417 type: 'test' ... # Subtest: materials: exactly 2 per monster, wired into bestiary drops, sell for gold ok 42 - materials: exactly 2 per monster, wired into bestiary drops, sell for gold --- duration_ms: 0.668667 type: 'test' ... # Subtest: mounts: four desert mounts at 10/20/30/40, faster and pricier each step ok 43 - mounts: four desert mounts at 10/20/30/40, faster and pricier each step --- duration_ms: 0.26075 type: 'test' ... # Subtest: vendors: blacksmith sells only real white bases; every vendor NPC exists ok 44 - vendors: blacksmith sells only real white bases; every vendor NPC exists --- duration_ms: 2.825667 type: 'test' ... # Subtest: rulesets: alpha is the live game × multipliers (no custom kit); keys are single-use ok 45 - rulesets: alpha is the live game × multipliers (no custom kit); keys are single-use --- duration_ms: 6.636834 type: 'test' ... # Subtest: inventory window contract: 11 slots on a 12×7 grid without overlap, weapons 2×3, armour 2×3, belt 2×1, bag 12×5 ok 46 - inventory window contract: 11 slots on a 12×7 grid without overlap, weapons 2×3, armour 2×3, belt 2×1, bag 12×5 --- duration_ms: 2.137584 type: 'test' ... # Subtest: round 5: orbs coloured by rarity, gems by socket colour (Jade Caravan rule) ok 47 - round 5: orbs coloured by rarity, gems by socket colour (Jade Caravan rule) --- duration_ms: 2.198041 type: 'test' ... # Subtest: round 5: every published equipment icon has inventory fit data (tools/build-icon-fit.py) ok 48 - round 5: every published equipment icon has inventory fit data (tools/build-icon-fit.py) --- duration_ms: 2.792167 type: 'test' ... # Subtest: round 7: every stackable drop class rolls a random quantity; the market stays capped, bound and helper-only ok 49 - round 7: every stackable drop class rolls a random quantity; the market stays capped, bound and helper-only --- duration_ms: 11.045542 type: 'test' ... # Subtest: feel tiers: low → ultra, layers only grow, ultra-only screen effects ok 50 - feel tiers: low → ultra, layers only grow, ultra-only screen effects --- duration_ms: 11.399792 type: 'test' ... # Subtest: feel rules: presentation only, no global time-scale, telegraphs never culled; haptics for every impact ok 51 - feel rules: presentation only, no global time-scale, telegraphs never culled; haptics for every impact --- duration_ms: 0.844917 type: 'test' ... # Subtest: audio requests: every skill, weapon family, hit material and zone has a prompt; prompts never name another game ok 52 - audio requests: every skill, weapon family, hit material and zone has a prompt; prompts never name another game --- duration_ms: 22.710916 type: 'test' ... # Subtest: audio design (owner, ADR-026): classic town/GM music and encounter-only boss themes; every area keeps its environment bed and landmark emitter ok 53 - audio design (owner, ADR-026): classic town/GM music and encounter-only boss themes; every area keeps its environment bed and landmark emitter --- duration_ms: 136.809709 type: 'test' ... # Subtest: shared combat hit requests describe short separable layers ok 54 - shared combat hit requests describe short separable layers --- duration_ms: 4.303041 type: 'test' ... # Subtest: platform caps (owner, round 4): browser ≤ Mid; apps up to Ultra ok 55 - platform caps (owner, round 4): browser ≤ Mid; apps up to Ultra --- duration_ms: 1.057166 type: 'test' ... # Subtest: audio design (owner, round 9): every area has a random one-shot ambient accent so the soundscape is not a constant loop ok 56 - audio design (owner, round 9): every area has a random one-shot ambient accent so the soundscape is not a constant loop --- duration_ms: 9.343708 type: 'test' ... # Subtest: read guard: a whole read of a guarded file is denied with the command to use instead ok 57 - read guard: a whole read of a guarded file is denied with the command to use instead --- duration_ms: 979.178834 type: 'test' ... # Subtest: read guard: sliced reads and unrelated reads are allowed ok 58 - read guard: sliced reads and unrelated reads are allowed --- duration_ms: 888.027875 type: 'test' ... # Subtest: read guard: cat, less, more, big head/tail and jq identity of a guarded file are denied in Bash ok 59 - read guard: cat, less, more, big head/tail and jq identity of a guarded file are denied in Bash --- duration_ms: 766.887 type: 'test' ... # Subtest: read guard: Unity scenes and prefabs over 200 KB need a slice ok 60 - read guard: Unity scenes and prefabs over 200 KB need a slice --- duration_ms: 5.492625 type: 'test' ... # Subtest: read guard: fails open on malformed input ok 61 - read guard: fails open on malformed input --- duration_ms: 5410.420625 type: 'test' ... # Subtest: context meter: warns once at 150k and once at 250k per session ok 62 - context meter: warns once at 150k and once at 250k per session --- duration_ms: 1432.300334 type: 'test' ... # Subtest: context meter: a sub-agent is metered on its own transcript ok 63 - context meter: a sub-agent is metered on its own transcript --- duration_ms: 5.038083 type: 'test' ... # Subtest: context meter: fails open ok 64 - context meter: fails open --- duration_ms: 1576.533 type: 'test' ... # --at needs an ISO date/time, got "not-a-date" # Subtest: cost estimate uses the pricing table (Opus 5.5 list prices) ok 65 - cost estimate uses the pricing table (Opus 5.5 list prices) --- duration_ms: 2.370291 type: 'test' ... # Subtest: time: wall clock includes stoppages, active counts only short gaps ok 66 - time: wall clock includes stoppages, active counts only short gaps --- duration_ms: 11.670458 type: 'test' ... # Subtest: codex ledger reads only zoen/ sessions, dedupes usage records and counts image calls ok 67 - codex ledger reads only zoen/ sessions, dedupes usage records and counts image calls --- duration_ms: 992.434709 type: 'test' ... # Subtest: token windows can be limited to one session (concurrent sessions are not double-counted) ok 68 - token windows can be limited to one session (concurrent sessions are not double-counted) --- duration_ms: 1.72675 type: 'test' ... # Subtest: task-log records --session and a back-dated --at start without counting flags as text ok 69 - task-log records --session and a back-dated --at start without counting flags as text --- duration_ms: 4175.268667 type: 'test' ... # Subtest: incremental transcript cache gives the same totals as a full parse ok 70 - incremental transcript cache gives the same totals as a full parse --- duration_ms: 3932.271083 type: 'test' ... # Subtest: a rebuild keeps a session whose transcript is gone (archived) and the total never drops ok 71 - a rebuild keeps a session whose transcript is gone (archived) and the total never drops --- duration_ms: 3139.11025 type: 'test' ... # Subtest: per session the larger value wins: a trimmed or rewritten transcript cannot lower a total ok 72 - per session the larger value wins: a trimmed or rewritten transcript cannot lower a total --- duration_ms: 3223.21275 type: 'test' ... # Subtest: sub-agent transcripts (/subagents/agent-*.jsonl) are counted in their session, once ok 73 - sub-agent transcripts (/subagents/agent-*.jsonl) are counted in their session, once --- duration_ms: 3022.338166 type: 'test' ... # Subtest: a task logged from a sub-agent counts that sub-agent (and its helpers), not the session or the other sub-agents ok 74 - a task logged from a sub-agent counts that sub-agent (and its helpers), not the session or the other sub-agents --- duration_ms: 2321.763333 type: 'test' ... # Subtest: per-task tokens: an earlier value for the same window is kept, an earlier open window is not carried over ok 75 - per-task tokens: an earlier value for the same window is kept, an earlier open window is not carried over --- duration_ms: 3.986583 type: 'test' ... # Subtest: time of merged spans equals the time of all timestamps read together ok 76 - time of merged spans equals the time of all timestamps read together --- duration_ms: 2.776208 type: 'test' ... # Subtest: a ledger written before per-session splits is merged exactly; a copy of a conversation is counted once ok 77 - a ledger written before per-session splits is merged exactly; a copy of a conversation is counted once --- duration_ms: 98.850125 type: 'test' ... # Subtest: roadmap: unique ids, deps exist, every M0–M2 task has a test and evidence ok 78 - roadmap: unique ids, deps exist, every M0–M2 task has a test and evidence --- duration_ms: 2.767125 type: 'test' ... # Subtest: glossary terms unique and defined ok 79 - glossary terms unique and defined --- duration_ms: 0.490959 type: 'test' ... # Subtest: HUD rects inside the screen, art pieces exist as art requests, no desktop overlap of core widgets ok 80 - HUD rects inside the screen, art pieces exist as art requests, no desktop overlap of core widgets --- duration_ms: 29.351 type: 'test' ... # Subtest: stack: every layer has a choice, version and cost line; setup steps numbered ok 81 - stack: every layer has a choice, version and cost line; setup steps numbered --- duration_ms: 0.664042 type: 'test' ... # Subtest: glossary: every term links to a wiki screen; popups use known kinds ok 82 - glossary: every term links to a wiki screen; popups use known kinds --- duration_ms: 1.276708 type: 'test' ... # Subtest: team position events: ≥ 3 proposals, each with ≥ 3 positions, a job, abilities and a build cost; owner decision OPEN-8 ok 83 - team position events: ≥ 3 proposals, each with ≥ 3 positions, a job, abilities and a build cost; owner decision OPEN-8 --- duration_ms: 181.143666 type: 'test' ... # Subtest: release versioning: semver current version on a known channel; shown on the loading screen ok 84 - release versioning: semver current version on a known channel; shown on the loading screen --- duration_ms: 11.582042 type: 'test' ... # Subtest: cosmetic side quests: every cosmetic has a source, every questline rewards a catalog cosmetic, boss-only drops name a real boss ok 85 - cosmetic side quests: every cosmetic has a source, every questline rewards a catalog cosmetic, boss-only drops name a real boss --- duration_ms: 6.676958 type: 'test' ... # Subtest: GM room covers the owner test needs; web activity feed is free in alpha, premium later, read-only ok 86 - GM room covers the owner test needs; web activity feed is free in alpha, premium later, read-only --- duration_ms: 8.9345 type: 'test' ... # Subtest: round 6: security rules — only "certain" rules ban at once; appeal-only review; patching plan per platform ok 87 - round 6: security rules — only "certain" rules ban at once; appeal-only review; patching plan per platform --- duration_ms: 3.023125 type: 'test' ... # Subtest: ADR-030 time and weather: look-only contract, phases cover the day, every zone has weather and a signature phase ok 88 - ADR-030 time and weather: look-only contract, phases cover the day, every zone has weather and a signature phase --- duration_ms: 144.576042 type: 'test' ... # Subtest: ADR-030 GM arena: the time and weather toggles are real GM commands ok 89 - ADR-030 GM arena: the time and weather toggles are real GM commands --- duration_ms: 8.323583 type: 'test' ... # Subtest: ADR-028 feel defaults: one camera shake default (70%), settings for the owner choices, no blood ok 90 - ADR-028 feel defaults: one camera shake default (70%), settings for the owner choices, no blood --- duration_ms: 32.297334 type: 'test' ... # Subtest: ADR-029 roadmap: every M0–M2 task says what it needs, early starts are real and Unity-free, new tasks exist ok 91 - ADR-029 roadmap: every M0–M2 task says what it needs, early starts are real and Unity-free, new tasks exist --- duration_ms: 5.031292 type: 'test' ... # Subtest: ADR-029 agent rules live where every agent reads them; the status file stays short ok 92 - ADR-029 agent rules live where every agent reads them; the status file stays short --- duration_ms: 12.415125 type: 'test' ... # Subtest: ADR-031 is recorded and closes OPEN-15 to OPEN-19 ok 93 - ADR-031 is recorded and closes OPEN-15 to OPEN-19 --- duration_ms: 4.678666 type: 'test' ... # Subtest: ADR-031 hits online: the Combat Lab runs at 80 ms and builds both impact modes; the owner picks one at G2 ok 94 - ADR-031 hits online: the Combat Lab runs at 80 ms and builds both impact modes; the owner picks one at G2 --- duration_ms: 4.347833 type: 'test' ... # Subtest: ADR-031 voices are non-verbal; the action is built to the catalog and the owner gives feedback later ok 95 - ADR-031 voices are non-verbal; the action is built to the catalog and the owner gives feedback later --- duration_ms: 0.560959 type: 'test' ... # Subtest: polish catalog: accepted (ADR-028) but not implemented, numbers still proposed, unique ids in their area, every item has a stage and a proof ok 96 - polish catalog: accepted (ADR-028) but not implemented, numbers still proposed, unique ids in their area, every item has a stage and a proof --- duration_ms: 20.738834 type: 'test' ... # Subtest: polish catalog never redefines canonical feel values and stays inside them ok 97 - polish catalog never redefines canonical feel values and stays inside them --- duration_ms: 1.759916 type: 'test' ... # Subtest: polish audio: known buses only, pitch variation matches the audio doc, loudness and voices are sane ok 98 - polish audio: known buses only, pitch variation matches the audio doc, loudness and voices are sane --- duration_ms: 3.658792 type: 'test' ... # Subtest: polish surfaces: every zone and every monster material is covered by existing data ok 99 - polish surfaces: every zone and every monster material is covered by existing data --- duration_ms: 10.2515 type: 'test' ... # Subtest: polish platforms: every limited technique names its fallback and source; web-only limits are stated on the items ok 100 - polish platforms: every limited technique names its fallback and source; web-only limits are stated on the items --- duration_ms: 1.363083 type: 'test' ... # Subtest: polish round 2 (ADR-031): accepted on 2026-10-07, numbered after the round-1 items, agrees with existing rules ok 101 - polish round 2 (ADR-031): accepted on 2026-10-07, numbered after the round-1 items, agrees with existing rules --- duration_ms: 96.251167 type: 'test' ... # Subtest: polish perf scenes: five named scenes, each says what to watch; telegraphs are a renderer of their own ok 102 - polish perf scenes: five named scenes, each says what to watch; telegraphs are a renderer of their own --- duration_ms: 1.472209 type: 'test' ... # Subtest: exactly 8 skill picks by level 40, all at or before 40 ok 103 - exactly 8 skill picks by level 40, all at or before 40 --- duration_ms: 16.284666 type: 'test' ... # Subtest: 45 atlas points at 40 (39 level points + 6 quest points) ok 104 - 45 atlas points at 40 (39 level points + 6 quest points) --- duration_ms: 0.726125 type: 'test' ... # Subtest: xp to next level strictly increases; 175 effective hours to 40 ok 105 - xp to next level strictly increases; 175 effective hours to 40 --- duration_ms: 0.334708 type: 'test' ... # Subtest: pace: nobody reaches 40 in under 7 days, even online 24/7; typical player takes about a month ok 106 - pace: nobody reaches 40 in under 7 days, even online 24/7; typical player takes about a month --- duration_ms: 0.456125 type: 'test' ... # Subtest: alpha ruleset (live × multipliers) reaches 40 in under 2 hours, quests carrying most XP ok 107 - alpha ruleset (live × multipliers) reaches 40 in under 2 hours, quests carrying most XP --- duration_ms: 2.347125 type: 'test' ... # Subtest: origins sum to 40 base attributes and portraits exist ok 108 - origins sum to 40 base attributes and portraits exist --- duration_ms: 4.339584 type: 'test' ... # Subtest: desktop bindings: required keys bound once each ok 109 - desktop bindings: required keys bound once each --- duration_ms: 2.200375 type: 'test' ... # Subtest: public-data is exactly the allow-listed files and up to date ok 110 - public-data is exactly the allow-listed files and up to date --- duration_ms: 945.013042 type: 'test' ... # Subtest: no internal keys anywhere (prompts, briefs, AI internals, tuning, prices, flags) ok 111 - no internal keys anywhere (prompts, briefs, AI internals, tuning, prices, flags) --- duration_ms: 189.632417 type: 'test' ... # Subtest: canaries: production briefs, mood text, art prompts, roadmap internals and proposed names never appear ok 112 - canaries: production briefs, mood text, art prompts, roadmap internals and proposed names never appear --- duration_ms: 485.774875 type: 'test' ... # Subtest: no tuning numbers in public text ok 113 - no tuning numbers in public text --- duration_ms: 7.513416 type: 'test' ... # Subtest: every build reference resolves to a public skill or a sealed tile ok 114 - every build reference resolves to a public skill or a sealed tile --- duration_ms: 1.982708 type: 'test' ... # Subtest: public roadmap: plain entries, known statuses, no dates or budgets ok 115 - public roadmap: plain entries, known statuses, no dates or budgets --- duration_ms: 2.350292 type: 'test' ... # Subtest: 144 unique skills: 18 weapon codices × 7 + 3 pole codices × 6 ok 116 - 144 unique skills: 18 weapon codices × 7 + 3 pole codices × 6 --- duration_ms: 2.939833 type: 'test' ... # Subtest: each weapon codex unlocks at 1/3/6/10/15/20/27: level-1 chain skill, level-20 signature, level-27 finisher ok 117 - each weapon codex unlocks at 1/3/6/10/15/20/27: level-1 chain skill, level-20 signature, level-27 finisher --- duration_ms: 2.781167 type: 'test' ... # Subtest: finishers: conditional, high damage, condition is a known state ok 118 - finishers: conditional, high damage, condition is a known state --- duration_ms: 1.327583 type: 'test' ... # Subtest: pole codices: 3 self buffs and 3 team buffs each; every buff or aura has a scope ok 119 - pole codices: 3 self buffs and 3 team buffs each; every buff or aura has a scope --- duration_ms: 63.772834 type: 'test' ... # Subtest: scenario tags are valid, and only attack skills are chainable ok 120 - scenario tags are valid, and only attack skills are chainable --- duration_ms: 2.007375 type: 'test' ... # Subtest: every skill has timings, 4 facets, and anim/vfx/sfx briefs ok 121 - every skill has timings, 4 facets, and anim/vfx/sfx briefs --- duration_ms: 1.647875 type: 'test' ... # Subtest: icons: reused icons exist, otherwise an art request id is set; no icon used twice ok 122 - icons: reused icons exist, otherwise an art request id is set; no icon used twice --- duration_ms: 17.995125 type: 'test' ... # Subtest: specials and applied states are defined in combat-states.json ok 123 - specials and applied states are defined in combat-states.json --- duration_ms: 3.879541 type: 'test' ... # Subtest: 18 builds: 3 per Atlas path, one build per weapon family ok 124 - 18 builds: 3 per Atlas path, one build per weapon family --- duration_ms: 26.9755 type: 'test' ... # Subtest: every build has a real choice (more candidates than picks) and exactly 8 legal picks ok 125 - every build has a real choice (more candidates than picks) and exactly 8 legal picks --- duration_ms: 2.119208 type: 'test' ... # Subtest: hotbars: Mouse1 chain holds ≤ 8 learned attack skills; Q–C any learned skill or buff; quick slots hold buffs ok 126 - hotbars: Mouse1 chain holds ≤ 8 learned attack skills; Q–C any learned skill or buff; quick slots hold buffs --- duration_ms: 2.322583 type: 'test' ... # Subtest: weapon bases: requirements follow the formula; icons or requests exist ok 127 - weapon bases: requirements follow the formula; icons or requests exist --- duration_ms: 1.637667 type: 'test' ... # Subtest: origin starter weapons are the families of that pole ok 128 - origin starter weapons are the families of that pole --- duration_ms: 0.281125 type: 'test' ... # Subtest: every skill has a player-facing description ok 129 - every skill has a player-facing description --- duration_ms: 0.352042 type: 'test' ... # Subtest: map is 4096 m and every zone sits inside it ok 130 - map is 4096 m and every zone sits inside it --- duration_ms: 2.503125 type: 'test' ... # Subtest: monsters live in a zone whose level band fits them; art exists ok 131 - monsters live in a zone whose level band fits them; art exists --- duration_ms: 2.716 type: 'test' ... # Subtest: every weapon base drops from a real monster ok 132 - every weapon base drops from a real monster --- duration_ms: 0.604 type: 'test' ... # Subtest: quests: 47 in level order, valid zones/givers/targets ok 133 - quests: 47 in level order, valid zones/givers/targets --- duration_ms: 4.23175 type: 'test' ... # Subtest: quest Atlas points land exactly where progression expects them ok 134 - quest Atlas points land exactly where progression expects them --- duration_ms: 0.606083 type: 'test' ... # Subtest: choices pause Auto-Quest; boss quest offers a solo route ok 135 - choices pause Auto-Quest; boss quest offers a solo route --- duration_ms: 0.559292 type: 'test' ... # Subtest: click-to-travel contract: auto-mount threshold, region-wide paths, cancel rules match mounts ok 136 - click-to-travel contract: auto-mount threshold, region-wide paths, cancel rules match mounts --- duration_ms: 6.92775 type: 'test' ... 1..136 # tests 136 # suites 0 # pass 136 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 125602.52225