{
  "_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" : 362,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "4a33756ca0689495d3c9e2f31fa310326fa01710",
            "branch" : [
              {
                "SHA1" : "4a33756ca0689495d3c9e2f31fa310326fa01710",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "4a33756ca0689495d3c9e2f31fa310326fa01710",
            "branch" : [
              {
                "SHA1" : "4a33756ca0689495d3c9e2f31fa310326fa01710",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "4a33756ca0689495d3c9e2f31fa310326fa01710",
        "branch" : [
          {
            "SHA1" : "4a33756ca0689495d3c9e2f31fa310326fa01710",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/mcMMO-Dev/mcMMO.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    {
      "displayPath" : "mcMMO.jar",
      "fileName" : "mcMMO.jar",
      "relativePath" : "target/mcMMO.jar"
    },
    {
      "displayPath" : "original-mcMMO.jar",
      "fileName" : "original-mcMMO.jar",
      "relativePath" : "target/original-mcMMO.jar"
    }
  ],
  "building" : false,
  "description" : null,
  "displayName" : "#362",
  "duration" : 63593,
  "estimatedDuration" : 66807,
  "executor" : null,
  "fullDisplayName" : "mcMMO #362",
  "id" : "362",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 362,
  "queueId" : 309,
  "result" : "SUCCESS",
  "timestamp" : 1790125454100,
  "url" : "https://popicraft.net/jenkins/job/mcMMO/362/",
  "builtOn" : "Builder",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java",
          "src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java"
        ],
        "commitId" : "4fb5035aebd30d34d2cb5ba9835ef520a90662be",
        "timestamp" : 1790124370000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Report FlatFile writes that fail instead of claiming success\u000a\u000awriteStringToFileSafely logged and swallowed any IOException from the\u000awrite, so every operation that rewrote mcmmo.users returned success\u000awhether or not anything reached disk. saveUser told PlayerProfile the\u000aprofile was saved, so it was never retried. saveUserUUIDs told the UUID\u000aupgrade its batch was stored, and removeUser, saveUserUUID and\u000apurgePowerlessUsers reported changes that never happened.\u000a\u000aThe helper now returns whether the write went through, rewriteUsersFile\u000areturns it, and each caller passes it on and skips its success logging\u000awhen it failed. The users file writer is opened through a package-private\u000afactory, alongside the existing reader factory, so tests can make it fail.\u000a\u000aThe mid-read failure tests are split into one parameterized case per\u000aoperation so each broken path fails on its own, and write failures get\u000athe same coverage.\u000a",
        "date" : "2026-09-22 17:46:10 -0700",
        "id" : "4fb5035aebd30d34d2cb5ba9835ef520a90662be",
        "msg" : "Report FlatFile writes that fail instead of claiming success",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt"
        ],
        "commitId" : "a9bed7cd00ce445695291e0834f844fd36c7f4e6",
        "timestamp" : 1790124371000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Credit cyrne1-7208 for the FlatFile read failure fix\u000a",
        "date" : "2026-09-22 17:46:11 -0700",
        "id" : "a9bed7cd00ce445695291e0834f844fd36c7f4e6",
        "msg" : "Credit cyrne1-7208 for the FlatFile read failure fix",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/commands/skills/SmeltingCommandTest.java"
        ],
        "commitId" : "4a33756ca0689495d3c9e2f31fa310326fa01710",
        "timestamp" : 1790125201000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Cover the /smelting Vanilla XP multiplier line against a real advanced.yml\u000a\u000aThe existing Smelting tests stub the config getter, so nothing checked that\u000aa value typed into advanced.yml reaches the stat line players see. The new\u000atest writes an edited copy of the shipped advanced.yml, loads it through\u000aAdvancedConfig, and runs the real SmeltingCommand stat steps.\u000a\u000aIt pins that configured whole numbers are shown at every rank, that\u000adecimals are rounded down and never shown below 1x, and that the line is\u000ahidden until Understanding The Art unlocks. Showing the rank instead of\u000athe configured value fails it.\u000a",
        "date" : "2026-09-22 18:00:01 -0700",
        "id" : "4a33756ca0689495d3c9e2f31fa310326fa01710",
        "msg" : "Cover the /smelting Vanilla XP multiplier line against a real advanced.yml",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/commands/skills/SmeltingCommandTest.java"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
      "fullName" : "nossr50"
    }
  ]
}