{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.SCMTrigger$SCMTriggerCause",
          "shortDescription" : "Started by an SCM change"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 342,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "0bf608a425587c65384f6532f3df94c1c84b84d6",
            "branch" : [
              {
                "SHA1" : "0bf608a425587c65384f6532f3df94c1c84b84d6",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "0bf608a425587c65384f6532f3df94c1c84b84d6",
            "branch" : [
              {
                "SHA1" : "0bf608a425587c65384f6532f3df94c1c84b84d6",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "0bf608a425587c65384f6532f3df94c1c84b84d6",
        "branch" : [
          {
            "SHA1" : "0bf608a425587c65384f6532f3df94c1c84b84d6",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/mcMMO-Dev/mcMMO.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : false,
  "description" : null,
  "displayName" : "#342",
  "duration" : 241420,
  "estimatedDuration" : 135282,
  "executor" : null,
  "fullDisplayName" : "mcMMO #342",
  "id" : "342",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 342,
  "queueId" : 215,
  "result" : "FAILURE",
  "timestamp" : 1783740849710,
  "url" : "https://popicraft.net/jenkins/job/mcMMO/342/",
  "builtOn" : "Builder",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotion.java",
          "src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyManager.java",
          "src/test/java/com/gmail/nossr50/skills/alchemy/AlchemyTest.java",
          "src/test/java/com/gmail/nossr50/skills/alchemy/AlchemyPotionBrewerTest.java",
          "src/test/java/com/gmail/nossr50/datatypes/skills/alchemy/PotionStageTest.java",
          "src/test/java/com/gmail/nossr50/skills/alchemy/AlchemyManagerTest.java",
          "src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyPotionBrewer.java",
          "src/test/java/com/gmail/nossr50/listeners/InventoryListenerBrewTest.java"
        ],
        "commitId" : "e53f74c2751dbcb5d0ecd5bf958088e35e18649d",
        "timestamp" : 1783732629000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add alchemy unit test coverage and tidy alchemy internals\u000a\u000aCovers the Catalysis brew speed curve, Concoctions tier plumbing,\u000apotion stage math, brew and ingredient validation, finishBrewing,\u000athe disable-time brew flush, and the vanilla-brew race handler.\u000a\u000aCleanup while in the area: clearer calculateBrewSpeed, removal of a\u000aduplicated base-potion-type check and an always-false brew guard,\u000astale debug comment removal, and final locals.\u000a",
        "date" : "2026-07-10 18:17:09 -0700",
        "id" : "e53f74c2751dbcb5d0ecd5bf958088e35e18649d",
        "msg" : "Add alchemy unit test coverage and tidy alchemy internals",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/listeners/InventoryListenerBrewTest.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/alchemy/AlchemyPotionBrewerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyManager.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/datatypes/skills/alchemy/PotionStageTest.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/alchemy/AlchemyManagerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotion.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyPotionBrewer.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/alchemy/AlchemyTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotionTest.java",
          "src/main/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotion.java"
        ],
        "commitId" : "406422a554449d4456e7a8dbd7062827b58267db",
        "timestamp" : 1783732674000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix potion matching failing when custom effect order differs\u000a\u000aCustom effects were compared by list index, so two potions carrying\u000aidentical effects in a different order were treated as different\u000apotions and the brew silently failed. Effects are now matched by\u000atype, amplifier, and duration regardless of order.\u000a",
        "date" : "2026-07-10 18:17:54 -0700",
        "id" : "406422a554449d4456e7a8dbd7062827b58267db",
        "msg" : "Fix potion matching failing when custom effect order differs",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotionTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotion.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyPotionBrewer.java",
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/skills/alchemy/AlchemyPotionBrewerTransferTest.java"
        ],
        "commitId" : "71bad6a743390854fe28bf636b9329756810e76e",
        "timestamp" : 1783732719000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix brewing stand ingredient transfers using the wrong stack limit\u000a\u000aShift-right-click transfers checked the source stack against the max\u000astack size instead of the ingredient slot, so a full source stack was\u000awrongly refused while a full ingredient slot happily grew past the\u000astack limit. Room is now judged by the destination stack, using the\u000acomponent-aware ItemStack#getMaxStackSize.\u000a",
        "date" : "2026-07-10 18:18:39 -0700",
        "id" : "71bad6a743390854fe28bf636b9329756810e76e",
        "msg" : "Fix brewing stand ingredient transfers using the wrong stack limit",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/alchemy/AlchemyPotionBrewerTransferTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyPotionBrewer.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/archery/ArcheryManagerTest.java",
          "src/main/java/com/gmail/nossr50/skills/archery/Archery.java",
          "src/test/java/com/gmail/nossr50/skills/archery/ArcheryTest.java",
          "src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java"
        ],
        "commitId" : "d3d52819267ca965f96d969a996306123da3fe4c",
        "timestamp" : 1783733366000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add archery unit test coverage\u000a\u000aCovers the Skill Shot damage math and its max bonus cap, the arrow\u000atracker and its periodic invalid-entity cleanup, ability gates, the\u000adistance XP multiplier (including the 50-block cap and cross-world\u000aguards), and both Daze branches: the Paper lookAt path and the\u000aSpigot scheduled-teleport path with its stale-world guard.\u000a\u000aMinor cleanup: final locals and a line wrap in the Archery helpers.\u000a",
        "date" : "2026-07-10 18:29:26 -0700",
        "id" : "d3d52819267ca965f96d969a996306123da3fe4c",
        "msg" : "Add archery unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/archery/Archery.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/archery/ArcheryManagerTest.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/archery/ArcheryTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/skills/crossbows/CrossbowsManager.java",
          "src/test/java/com/gmail/nossr50/skills/crossbows/CrossbowsTest.java",
          "src/test/java/com/gmail/nossr50/skills/crossbows/CrossbowsManagerTest.java"
        ],
        "commitId" : "9f0afd6151e38136e52adba9b1a21315107f2665",
        "timestamp" : 1783733664000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add crossbows unit test coverage\u000a\u000aCovers the Trick Shot ricochet end to end: crossbow and permission\u000agates, the bounce budget from the subskill rank, the head-on\u000arejection window (first bounce only), the reflected arrow spawn with\u000aits copied combat state, tipped-arrow potion state, infinite-arrow\u000apickup denial, and the hit routing that feeds it. Also covers the\u000aPowered Shot damage math and its activation gate.\u000a\u000aMinor cleanup: final locals and a corrected comment on the ricochet\u000aangle check.\u000a",
        "date" : "2026-07-10 18:34:24 -0700",
        "id" : "9f0afd6151e38136e52adba9b1a21315107f2665",
        "msg" : "Add crossbows unit test coverage",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/crossbows/CrossbowsManagerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/crossbows/CrossbowsManager.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/crossbows/CrossbowsTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/skills/spears/SpearsManager.java",
          "src/test/java/com/gmail/nossr50/skills/spears/SpearsManagerTest.java"
        ],
        "commitId" : "a3f6e55adaf5dae01d21ad19a931c7a761314922",
        "timestamp" : 1783734232000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add spears unit test coverage\u000a\u000aCovers Momentum end to end: the lazy speed effect type resolution\u000aand its fail-fast when the registry lacks it, attack-strength-scaled\u000aactivation odds with the full-strength clamp, the guard that never\u000adowngrades a stronger or longer existing swiftness buff, permission\u000agating, and the buff application itself. Also covers the Momentum\u000aduration curve and the Spear Mastery bonus damage math.\u000a\u000aThe tests bootstrap Bukkit Registry and PotionEffectType with mocks\u000aminted during their own static initialization, which makes\u000aregistry-backed effect types mockable off-server.\u000a\u000aMinor cleanup: final locals and a clarified odds comment.\u000a",
        "date" : "2026-07-10 18:43:52 -0700",
        "id" : "a3f6e55adaf5dae01d21ad19a931c7a761314922",
        "msg" : "Add spears unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/spears/SpearsManager.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/spears/SpearsManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/taming/TrackedTamingEntityTest.java",
          "src/test/java/com/gmail/nossr50/skills/taming/TamingManagerTest.java",
          "src/test/java/com/gmail/nossr50/skills/taming/TamingTest.java"
        ],
        "commitId" : "c9ac1407f2e5898ff47370a5a2e66aaf35c2287c",
        "timestamp" : 1783735043000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add taming unit test coverage\u000a\u000aCovers the static Taming helpers (damage prevention gate, Thick Fur,\u000aShock Proof, Holy Hound healing clamps, summon failure messages),\u000ataming XP with its cancellable event, Fast Food Service healing,\u000aGore and Sharpened Claws damage math, Pummel knockback and its\u000anotifications, Environmentally Aware rescue teleports, Beast Lore\u000amessages including horse stats and the llama exclusion, the Call of\u000athe Wild summon flow (cost, cap, throttle, permission and item\u000agates, wolf setup and tracking), and the tracked summon lifecycle.\u000a",
        "date" : "2026-07-10 18:57:23 -0700",
        "id" : "c9ac1407f2e5898ff47370a5a2e66aaf35c2287c",
        "msg" : "Add taming unit test coverage",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/taming/TrackedTamingEntityTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/taming/TamingManagerTest.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/taming/TamingTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/taming/TamingManagerTest.java",
          "src/main/java/com/gmail/nossr50/skills/taming/TamingManager.java",
          "Changelog.txt"
        ],
        "commitId" : "c72abd1a0c70dca848c592475c2be3098892ec6f",
        "timestamp" : 1783735110000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix Holy Hound gating on the wrong subskill unlock\u000a\u000aHoly Hound checked Environmentally Aware's unlock level, so wolves\u000awere healed by magic and poison from Taming level 10 instead of the\u000alevel 35 the skill guides advertise. It now gates on its own rank.\u000a",
        "date" : "2026-07-10 18:58:30 -0700",
        "id" : "c72abd1a0c70dca848c592475c2be3098892ec6f",
        "msg" : "Fix Holy Hound gating on the wrong subskill unlock",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/taming/TamingManager.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/taming/TamingManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/spears/SpearsManagerTest.java",
          "src/test/java/com/gmail/nossr50/TestRegistryBootstrap.java",
          "src/test/java/com/gmail/nossr50/skills/mining/BlastMiningTest.java",
          "src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java",
          "src/test/java/com/gmail/nossr50/skills/mining/MiningManagerTest.java"
        ],
        "commitId" : "a95ebfb2f1b52efaf9fee84387a8e2d892ed9704",
        "timestamp" : 1783735679000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add mining unit test coverage\u000a\u000aCovers miningBlockCheck end to end (XP, permission and config gates,\u000asilk touch handling, Super Breaker durability and triple drops,\u000aMother Lode with its double-drop fallback), the remote detonation\u000agate and flow (cooldown warning, instant TNT priming, denied fake\u000abreaks), blast mining drop processing (yield rolls, bonus drop\u000atiers, debris rolls, illegal drops), the blast modifiers and drop\u000amultiplier tiers, the Demolitions Expertise and Bigger Bombs unlock\u000ascans, and the PVP blast damage cap and owner damage reduction.\u000a\u000aExtracts the registry bootstrap proven in the spears tests into a\u000ashared TestRegistryBootstrap that mints per-type registry mocks, so\u000aEnchantment and PotionEffectType are both safely mockable off-server\u000aregardless of suite order.\u000a\u000aMinor cleanup: corrected five copy-pasted javadocs on the blast\u000amodifier getters.\u000a",
        "date" : "2026-07-10 19:07:59 -0700",
        "id" : "a95ebfb2f1b52efaf9fee84387a8e2d892ed9704",
        "msg" : "Add mining unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/mining/MiningManagerTest.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/TestRegistryBootstrap.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/mining/BlastMiningTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/spears/SpearsManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/swords/SwordsManagerTest.java"
        ],
        "commitId" : "ff435173ce4390d5b0da368f2f1a8da86498efed",
        "timestamp" : 1783735885000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add swords unit test coverage\u000a\u000aCovers the ability gates (readied sword, living-attacker counter\u000agate, active super ability), the Rupture flow (refresh instead of\u000are-roll, blocking defenders, bleed task scheduling and defender\u000anotification), Stab damage scaling, Counter Attack reflection with\u000aits notifications, and Serrated Strikes AoE damage reduction.\u000a",
        "date" : "2026-07-10 19:11:25 -0700",
        "id" : "ff435173ce4390d5b0da368f2f1a8da86498efed",
        "msg" : "Add swords unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/swords/SwordsManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/axes/AxesManagerTest.java"
        ],
        "commitId" : "41d1dadccc4e3898bc12f860155ac426e6d33a2a",
        "timestamp" : 1783736097000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add axes unit test coverage\u000a\u000aCovers the ability gates including the armored/naked target split\u000abetween Armor Impact and Greater Impact, Axe Mastery scaling, the\u000aCritical Hit PVP path with its notifications, Impact armor\u000adurability damage and its no-equipment guard, the Greater Impact\u000aknockback and bonus damage payout, and the armor detection helper.\u000aAlso adds save/restore hygiene for the Axes static modifiers the\u000aexisting tests mutated.\u000a",
        "date" : "2026-07-10 19:14:57 -0700",
        "id" : "41d1dadccc4e3898bc12f860155ac426e6d33a2a",
        "msg" : "Add axes unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/axes/AxesManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/unarmed/UnarmedManagerTest.java"
        ],
        "commitId" : "1b44bb55a8f302c746d24d97eb65ceb997cce2f8",
        "timestamp" : 1783736330000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add unarmed unit test coverage\u000a\u000aCovers the ability gates (armed-player disarm targets, empty-fist\u000aarrow deflect, active Berserk, readied fists), all six Block Cracker\u000abrick conversions with the config and activation gates, the full\u000aDisarm flow (protected drops, Iron Grip saves, cancelled events),\u000aArrow Deflect, and the Steel Arm damage curve including the rank 18\u000abreakpoint and the custom override.\u000a",
        "date" : "2026-07-10 19:18:50 -0700",
        "id" : "1b44bb55a8f302c746d24d97eb65ceb997cce2f8",
        "msg" : "Add unarmed unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/unarmed/UnarmedManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/excavation/ExcavationTest.java"
        ],
        "commitId" : "d5390b64300d5e7128421104dc4ea5d837182fc8",
        "timestamp" : 1783736514000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add excavation unit test coverage\u000a\u000aCovers block XP, the Giga Drill Breaker double XP check with tool\u000adurability and its tripled treasure rolls, treasure drop-level\u000agating, treasure XP payouts, archaeology experience orb rolls and\u000atheir rank scaling, and the archaeology permission gate.\u000a",
        "date" : "2026-07-10 19:21:54 -0700",
        "id" : "d5390b64300d5e7128421104dc4ea5d837182fc8",
        "msg" : "Add excavation unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/excavation/ExcavationTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/maces/MacesTest.java"
        ],
        "commitId" : "adc1a10327e52ea696dfbbc6b3c30bba0c8a04d4",
        "timestamp" : 1783736683000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add maces unit test coverage\u000a\u000aCovers the Cripple flow end to end: the lazy slowness effect type\u000aresolution and its fail-fast, the do-not-stack guard against already\u000aslowed targets, attack-strength-scaled odds, permission gating, the\u000aplayer/mob tier split for slow duration and strength, and the effect\u000aapplication with its notification. Crush damage was already covered.\u000a",
        "date" : "2026-07-10 19:24:43 -0700",
        "id" : "adc1a10327e52ea696dfbbc6b3c30bba0c8a04d4",
        "msg" : "Add maces unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/maces/MacesTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/smelting/SmeltingManagerTest.java"
        ],
        "commitId" : "2c917cb4a7e5b63da8850d95684918a31be05f0f",
        "timestamp" : 1783736851000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add smelting unit test coverage\u000a\u000aCovers the Fuel Efficiency multiplier tiers with the spent-fuel and\u000aShort.MAX_VALUE clamps, smelt XP payouts, and the Second Smelt flow:\u000athe winning roll adding an ingot, the nearly-full result slot guard,\u000aand the per-item double drop config gate. The vanilla XP multiplier\u000awas already covered.\u000a",
        "date" : "2026-07-10 19:27:31 -0700",
        "id" : "2c917cb4a7e5b63da8850d95684918a31be05f0f",
        "msg" : "Add smelting unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/smelting/SmeltingManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/repair/RepairManagerTest.java"
        ],
        "commitId" : "646f831b364c6aa71ea79f6aeddbd6f5bb6516fe",
        "timestamp" : 1783737207000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add repair unit test coverage\u000a\u000aCovers the anvil placement hint firing exactly once, every\u000ahandleRepair guard rail (unbreakable, custom model data, permission,\u000askill level, full durability, missing material, stacked items), the\u000aRepair Mastery bonus and Super Repair double with its notification,\u000aand the Arcane Forging outcomes: rank-zero loss, kept enchants,\u000astripped enchants, and downgrades. Confirmation windows and the\u000aarcane forging enchant cap were already covered.\u000a",
        "date" : "2026-07-10 19:33:27 -0700",
        "id" : "646f831b364c6aa71ea79f6aeddbd6f5bb6516fe",
        "msg" : "Add repair unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/repair/RepairManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/salvage/SalvageManagerTest.java"
        ],
        "commitId" : "c5554a5b313f65b3334f9b230c77bfd4f9cbf0a1",
        "timestamp" : 1783737453000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add salvage unit test coverage\u000a\u000aCovers the Scrap Collector yield limits, the enchant bypass perk\u000aguaranteeing full extraction, the anvil placement hint firing once,\u000athe handleSalvage guard rails (unbreakable, skill level, too\u000adamaged), the successful salvage flow with its material payout and\u000ahand emptying, and the arcane salvage split between lost enchants\u000aand full book extraction. Confirmation windows and the enchant cap\u000awere already covered.\u000a",
        "date" : "2026-07-10 19:37:33 -0700",
        "id" : "c5554a5b313f65b3334f9b230c77bfd4f9cbf0a1",
        "msg" : "Add salvage unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/salvage/SalvageManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/herbalism/HerbalismManagerAbilitiesTest.java"
        ],
        "commitId" : "cc392fa051990f62afce5cc64511b44b0ae81149",
        "timestamp" : 1783737974000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add herbalism ability unit test coverage\u000a\u000aCovers the ability gates (Green Thumb seed requirements, Shroom\u000aThumb needing both mushroom types, Hylian Luck, readied hoe),\u000aFarmer's Diet delegation, the sweet berry bush harvest with its\u000adelayed age verification and cancelled-harvest guard, plant maturity\u000arules including the berry bush age-two rule and the untrustworthy\u000aageables, bonus drop marking (Green Terra and Verdant Bounty triples\u000aversus plain doubles), and the natural/player-placed double drop\u000asplit. Green Thumb consumption and multi-block XP were already\u000acovered.\u000a",
        "date" : "2026-07-10 19:46:14 -0700",
        "id" : "cc392fa051990f62afce5cc64511b44b0ae81149",
        "msg" : "Add herbalism ability unit test coverage",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/herbalism/HerbalismManagerAbilitiesTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingTest.java"
        ],
        "commitId" : "580bc40b7a392478dab1921cb1959485a9b4eb4b",
        "timestamp" : 1783738202000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add woodcutting gate and Clean Cuts unit test coverage\u000a\u000aCovers the Leaf Blower and Tree Feller gates (axe requirement,\u000aunlock, active ability) and the Clean Cuts triple drop paths: the\u000ametadata marking on single-block breaks and the direct double spawn\u000aunder Tree Feller. Double drops, XP, the Tree Feller threshold,\u000aKnock on Wood orbs, and durability were already covered.\u000a",
        "date" : "2026-07-10 19:50:02 -0700",
        "id" : "580bc40b7a392478dab1921cb1959485a9b4eb4b",
        "msg" : "Add woodcutting gate and Clean Cuts unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsTest.java"
        ],
        "commitId" : "d0214f1dc3beb69a9c6509e4bfd6e3e981c940e0",
        "timestamp" : 1783738410000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add acrobatics gate and throttle unit test coverage\u000a\u000aCovers the Dodge gate (blocking players, PVE trigger config, the\u000alightning config, the unlock), the roll XP throttle with its\u000alengthening cooldown under exploit prevention, and the fall location\u000amemory. Roll damage, thresholds, graceful roll probability, and the\u000aper-mob dodge XP cap were already covered.\u000a",
        "date" : "2026-07-10 19:53:30 -0700",
        "id" : "d0214f1dc3beb69a9c6509e4bfd6e3e981c940e0",
        "msg" : "Add acrobatics gate and throttle unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/random/ProbabilityTestUtils.java"
        ],
        "commitId" : "c25b48e7812f718cdaba7da7801c9a442efb3e29",
        "timestamp" : 1783739022000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Widen statistical tolerance in probability expectation tests\u000a\u000aAt 20 million samples the old 0.035 percentage point tolerance sat\u000aaround 3 sigma, so the parameterized static-chance cases would flake\u000aon an unlucky roll every few hundred runs. 0.05 keeps roughly 4.5\u000asigma of headroom while still catching any real probability\u000aregression.\u000a",
        "date" : "2026-07-10 20:03:42 -0700",
        "id" : "c25b48e7812f718cdaba7da7801c9a442efb3e29",
        "msg" : "Widen statistical tolerance in probability expectation tests",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/random/ProbabilityTestUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/skills/fishing/FishingManagerProcessFishingTest.java",
          "src/test/java/com/gmail/nossr50/skills/fishing/FishingManagerMasterAnglerTest.java",
          "src/test/java/com/gmail/nossr50/listeners/PlayerListenerFishingTest.java"
        ],
        "commitId" : "0bf608a425587c65384f6532f3df94c1c84b84d6",
        "timestamp" : 1783739847000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add fishing enchantment unit test coverage\u000a\u000aCovers the enchantment-backed fishing paths: the cast wiring that\u000areads the rod Lure level and hands it to Master Angler, the deferred\u000aMaster Angler task scheduled one tick after the cast, Luck of the Sea\u000ascaling of the treasure roll (main hand, off hand, unenchanted, and\u000aunknown hand), and the Magic Hunter roll including candidate\u000afiltering, the conflict rule, non-enchantable drops, and the locked\u000agate. These were previously untestable off-server because Enchantment\u000aresolves through the registry; the registry bootstrap added for the\u000aspears coverage unblocks them.\u000a",
        "date" : "2026-07-10 20:17:27 -0700",
        "id" : "0bf608a425587c65384f6532f3df94c1c84b84d6",
        "msg" : "Add fishing enchantment unit test coverage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/fishing/FishingManagerMasterAnglerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/listeners/PlayerListenerFishingTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/fishing/FishingManagerProcessFishingTest.java"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
      "fullName" : "nossr50"
    }
  ]
}