$ 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: art library has items and unique ids ok 1 - art library has items and unique ids --- duration_ms: 0.456292 type: 'test' ... # Subtest: every web image exists, is WebP and is small ok 2 - every web image exists, is WebP and is small --- duration_ms: 62.454334 type: 'test' ... # Subtest: every original still exists inside zoen with the recorded hash (originals untouched) ok 3 - every original still exists inside zoen with the recorded hash (originals untouched) --- duration_ms: 374.339958 type: 'test' ... # Subtest: art request ids unique and prioritised ok 4 - art request ids unique and prioritised --- duration_ms: 0.473167 type: 'test' ... # Subtest: every reference image exists (so Codex can compare with current art) ok 5 - every reference image exists (so Codex can compare with current art) --- duration_ms: 7.646875 type: 'test' ... # Subtest: every iconRequest in game data has an art request ok 6 - every iconRequest in game data has an art request --- duration_ms: 8.515333 type: 'test' ... # Subtest: markdown files exist for every category and prompts are non-trivial ok 7 - markdown files exist for every category and prompts are non-trivial --- duration_ms: 0.507875 type: 'test' ... # Subtest: art requests carry delivery path, status, filesystem references and update instructions ok 8 - art requests carry delivery path, status, filesystem references and update instructions --- duration_ms: 27.295666 type: 'test' ... # Subtest: art-sync (dry run) matches a delivered file to its request and plans the data update ok 9 - art-sync (dry run) matches a delivered file to its request and plans the data update --- duration_ms: 59.069708 type: 'test' ... # Subtest: size and composition ok 10 - size and composition --- duration_ms: 0.653667 type: 'test' ... # Subtest: every edge endpoint exists, no duplicate or self edges, graph is connected ok 11 - every edge endpoint exists, no duplicate or self edges, graph is connected --- duration_ms: 0.552042 type: 'test' ... # Subtest: no two nodes overlap (≥ 12 units clear between rims) ok 12 - no two nodes overlap (≥ 12 units clear between rims) --- duration_ms: 11.432583 type: 'test' ... # Subtest: no path passes under a node it does not connect (≥ 6 units clear) ok 13 - no path passes under a node it does not connect (≥ 6 units clear) --- duration_ms: 285.460291 type: 'test' ... # Subtest: no two paths cross each other ok 14 - no two paths cross each other --- duration_ms: 5323.658292 type: 'test' ... # Subtest: arc edges really are circular and start/end on their nodes ok 15 - arc edges really are circular and start/end on their nodes --- duration_ms: 0.365625 type: 'test' ... # Subtest: every mastery reachable from every origin without crossing another start ok 16 - every mastery reachable from every origin without crossing another start --- duration_ms: 0.523458 type: 'test' ... # Subtest: path identity: own pure masteries cheapest, hybrids cost more, far poles cost most ok 17 - path identity: own pure masteries cheapest, hybrids cost more, far poles cost most --- duration_ms: 2.862208 type: 'test' ... # Subtest: every build’s recommended origin can wield an item-level-40 weapon within 45 points ok 18 - every build’s recommended origin can wield an item-level-40 weapon within 45 points --- duration_ms: 1.813584 type: 'test' ... # Subtest: icons on nodes exist; nodes without icons carry an art request ok 19 - icons on nodes exist; nodes without icons carry an art request --- duration_ms: 1.406541 type: 'test' ... # Subtest: opportunity cost: far-pole weapons need ~2× the points of the native origin ok 20 - opportunity cost: far-pole weapons need ~2× the points of the native origin --- duration_ms: 0.656375 type: 'test' ... # Subtest: gen-atlas.mjs is deterministic ok 21 - gen-atlas.mjs is deterministic --- duration_ms: 53.212875 type: 'test' ... # Subtest: gen-progression.mjs is deterministic ok 22 - gen-progression.mjs is deterministic --- duration_ms: 40.638333 type: 'test' ... # Subtest: 11 equipment slots: helmet, main hand, off hand, gloves, boots, armour, belt, necklace, earring, 2 rings ok 23 - 11 equipment slots: helmet, main hand, off hand, gloves, boots, armour, belt, necklace, earring, 2 rings --- duration_ms: 0.760792 type: 'test' ... # Subtest: rarity is the affix count; affix tiers climb T5 < T4 < T3 ok 24 - rarity is the affix count; affix tiers climb T5 < T4 < T3 --- duration_ms: 0.3075 type: 'test' ... # Subtest: example items are legal: affix count = rarity, ≤3 prefixes/suffixes, slot, tier by ilvl, value in range, sockets ≤ cap ok 25 - example items are legal: affix count = rarity, ≤3 prefixes/suffixes, slot, tier by ilvl, value in range, sockets ≤ cap --- duration_ms: 0.277417 type: 'test' ... # Subtest: orbs and shards stack to 999 and have icons; gems have icons ok 26 - orbs and shards stack to 999 and have icons; gems have icons --- duration_ms: 0.47325 type: 'test' ... # Subtest: consumables: potions, cleanses, elixirs, food and the travel/speed/reset scrolls exist; vendors are real NPCs ok 27 - consumables: potions, cleanses, elixirs, food and the travel/speed/reset scrolls exist; vendors are real NPCs --- duration_ms: 0.209125 type: 'test' ... # Subtest: materials: exactly 2 per monster, wired into bestiary drops, sell for gold ok 28 - materials: exactly 2 per monster, wired into bestiary drops, sell for gold --- duration_ms: 0.162625 type: 'test' ... # Subtest: mounts: four desert mounts at 10/20/30/40, faster and pricier each step ok 29 - mounts: four desert mounts at 10/20/30/40, faster and pricier each step --- duration_ms: 0.063625 type: 'test' ... # Subtest: vendors: blacksmith sells only real white bases; every vendor NPC exists ok 30 - vendors: blacksmith sells only real white bases; every vendor NPC exists --- duration_ms: 0.14225 type: 'test' ... # Subtest: rulesets: alpha grants 999 of every orb and 999 resets, a companion pick and a starter mount; keys are single-use ok 31 - rulesets: alpha grants 999 of every orb and 999 resets, a companion pick and a starter mount; keys are single-use --- duration_ms: 0.373083 type: 'test' ... # Subtest: cost estimate uses the pricing table (Opus 5.5 list prices) ok 32 - cost estimate uses the pricing table (Opus 5.5 list prices) --- duration_ms: 1.054167 type: 'test' ... # Subtest: time: wall clock includes stoppages, active counts only short gaps ok 33 - time: wall clock includes stoppages, active counts only short gaps --- duration_ms: 1.463125 type: 'test' ... # Subtest: codex ledger reads only zoen/ sessions, dedupes usage records and counts image calls ok 34 - codex ledger reads only zoen/ sessions, dedupes usage records and counts image calls --- duration_ms: 47.732292 type: 'test' ... # Subtest: roadmap: unique ids, deps exist, every M0–M2 task has a test and evidence ok 35 - roadmap: unique ids, deps exist, every M0–M2 task has a test and evidence --- duration_ms: 0.507625 type: 'test' ... # Subtest: glossary terms unique and defined ok 36 - glossary terms unique and defined --- duration_ms: 0.132708 type: 'test' ... # Subtest: HUD rects inside the screen, art pieces exist as art requests, no desktop overlap of core widgets ok 37 - HUD rects inside the screen, art pieces exist as art requests, no desktop overlap of core widgets --- duration_ms: 0.349083 type: 'test' ... # Subtest: stack: every layer has a choice, version and cost line; setup steps numbered ok 38 - stack: every layer has a choice, version and cost line; setup steps numbered --- duration_ms: 0.129375 type: 'test' ... # Subtest: exactly 8 skill picks by level 40, all at or before 40 ok 39 - exactly 8 skill picks by level 40, all at or before 40 --- duration_ms: 0.412292 type: 'test' ... # Subtest: 45 atlas points at 40 (39 level points + 6 quest points) ok 40 - 45 atlas points at 40 (39 level points + 6 quest points) --- duration_ms: 0.099083 type: 'test' ... # Subtest: xp to next level strictly increases; 175 effective hours to 40 ok 41 - xp to next level strictly increases; 175 effective hours to 40 --- duration_ms: 0.059917 type: 'test' ... # Subtest: pace: nobody reaches 40 in under 7 days, even online 24/7; typical player takes about a month ok 42 - pace: nobody reaches 40 in under 7 days, even online 24/7; typical player takes about a month --- duration_ms: 0.076167 type: 'test' ... # Subtest: alpha ruleset reaches 40 in about 2 hours (quest-heavy multipliers) ok 43 - alpha ruleset reaches 40 in about 2 hours (quest-heavy multipliers) --- duration_ms: 0.394 type: 'test' ... # Subtest: origins sum to 40 base attributes and portraits exist ok 44 - origins sum to 40 base attributes and portraits exist --- duration_ms: 0.169833 type: 'test' ... # Subtest: desktop bindings: required keys bound once each ok 45 - desktop bindings: required keys bound once each --- duration_ms: 0.714625 type: 'test' ... # Subtest: 144 unique skills: 18 weapon codices × 7 + 3 pole codices × 6 ok 46 - 144 unique skills: 18 weapon codices × 7 + 3 pole codices × 6 --- duration_ms: 0.565875 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 47 - each weapon codex unlocks at 1/3/6/10/15/20/27: level-1 chain skill, level-20 signature, level-27 finisher --- duration_ms: 0.627333 type: 'test' ... # Subtest: finishers: conditional, high damage, condition is a known state ok 48 - finishers: conditional, high damage, condition is a known state --- duration_ms: 0.285875 type: 'test' ... # Subtest: pole codices: 3 self buffs and 3 team buffs each; every buff or aura has a scope ok 49 - pole codices: 3 self buffs and 3 team buffs each; every buff or aura has a scope --- duration_ms: 0.147125 type: 'test' ... # Subtest: scenario tags are valid, and only attack skills are chainable ok 50 - scenario tags are valid, and only attack skills are chainable --- duration_ms: 0.204 type: 'test' ... # Subtest: every skill has timings, 4 facets, and anim/vfx/sfx briefs ok 51 - every skill has timings, 4 facets, and anim/vfx/sfx briefs --- duration_ms: 0.295333 type: 'test' ... # Subtest: icons: reused icons exist, otherwise an art request id is set; no icon used twice ok 52 - icons: reused icons exist, otherwise an art request id is set; no icon used twice --- duration_ms: 0.55575 type: 'test' ... # Subtest: specials and applied states are defined in combat-states.json ok 53 - specials and applied states are defined in combat-states.json --- duration_ms: 0.212083 type: 'test' ... # Subtest: 18 builds: 3 per Atlas path, one build per weapon family ok 54 - 18 builds: 3 per Atlas path, one build per weapon family --- duration_ms: 0.434958 type: 'test' ... # Subtest: every build has a real choice (more candidates than picks) and exactly 8 legal picks ok 55 - every build has a real choice (more candidates than picks) and exactly 8 legal picks --- duration_ms: 0.592958 type: 'test' ... # Subtest: hotbars: Mouse1 chain holds ≤ 8 learned attack skills; Q–C any learned skill or buff; quick slots hold buffs ok 56 - hotbars: Mouse1 chain holds ≤ 8 learned attack skills; Q–C any learned skill or buff; quick slots hold buffs --- duration_ms: 0.404792 type: 'test' ... # Subtest: weapon bases: requirements follow the formula; icons or requests exist ok 57 - weapon bases: requirements follow the formula; icons or requests exist --- duration_ms: 0.77925 type: 'test' ... # Subtest: origin starter weapons are the families of that pole ok 58 - origin starter weapons are the families of that pole --- duration_ms: 0.072833 type: 'test' ... # Subtest: map is 4096 m and every zone sits inside it ok 59 - map is 4096 m and every zone sits inside it --- duration_ms: 0.730875 type: 'test' ... # Subtest: monsters live in a zone whose level band fits them; art exists ok 60 - monsters live in a zone whose level band fits them; art exists --- duration_ms: 0.538291 type: 'test' ... # Subtest: every weapon base drops from a real monster ok 61 - every weapon base drops from a real monster --- duration_ms: 0.083209 type: 'test' ... # Subtest: quests: 47 in level order, valid zones/givers/targets ok 62 - quests: 47 in level order, valid zones/givers/targets --- duration_ms: 0.240167 type: 'test' ... # Subtest: quest Atlas points land exactly where progression expects them ok 63 - quest Atlas points land exactly where progression expects them --- duration_ms: 0.087792 type: 'test' ... # Subtest: choices pause Auto-Quest; boss quest offers a solo route ok 64 - choices pause Auto-Quest; boss quest offers a solo route --- duration_ms: 0.119667 type: 'test' ... 1..64 # tests 64 # suites 0 # pass 64 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 5709.597666