{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.TimerTrigger$TimerTriggerCause",
          "shortDescription" : "Started by timer"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/dev-playlists-links" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 116,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "e3ff2c9cbc9deb7bc4aa6308ff8a453da86ac12d",
            "branch" : [
              {
                "SHA1" : "e3ff2c9cbc9deb7bc4aa6308ff8a453da86ac12d",
                "name" : "refs/remotes/origin/dev-playlists-links"
              }
            ]
          },
          "revision" : {
            "SHA1" : "e3ff2c9cbc9deb7bc4aa6308ff8a453da86ac12d",
            "branch" : [
              {
                "SHA1" : "e3ff2c9cbc9deb7bc4aa6308ff8a453da86ac12d",
                "name" : "refs/remotes/origin/dev-playlists-links"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "e3ff2c9cbc9deb7bc4aa6308ff8a453da86ac12d",
        "branch" : [
          {
            "SHA1" : "e3ff2c9cbc9deb7bc4aa6308ff8a453da86ac12d",
            "name" : "refs/remotes/origin/dev-playlists-links"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/UstadMobile/Respect.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    {
      "displayPath" : "respect-app-compose-debug.apk",
      "fileName" : "respect-app-compose-debug.apk",
      "relativePath" : "respect-app-compose/build/outputs/apk/debug/respect-app-compose-debug.apk"
    },
    {
      "displayPath" : "respect-app-compose-release.apk",
      "fileName" : "respect-app-compose-release.apk",
      "relativePath" : "respect-app-compose/build/outputs/apk/release/respect-app-compose-release.apk"
    },
    {
      "displayPath" : "respect-app-compose-debug.aab",
      "fileName" : "respect-app-compose-debug.aab",
      "relativePath" : "respect-app-compose/build/outputs/bundle/debug/respect-app-compose-debug.aab"
    },
    {
      "displayPath" : "respect-app-compose-release.aab",
      "fileName" : "respect-app-compose-release.aab",
      "relativePath" : "respect-app-compose/build/outputs/bundle/release/respect-app-compose-release.aab"
    },
    {
      "displayPath" : "mapping.txt",
      "fileName" : "mapping.txt",
      "relativePath" : "respect-app-compose/build/outputs/mapping/release/mapping.txt"
    },
    {
      "displayPath" : "respect-cli-1.0.33.zip",
      "fileName" : "respect-cli-1.0.33.zip",
      "relativePath" : "respect-cli/build/distributions/respect-cli-1.0.33.zip"
    },
    {
      "displayPath" : "respect-server-1.0.33.zip",
      "fileName" : "respect-server-1.0.33.zip",
      "relativePath" : "respect-server/build/distributions/respect-server-1.0.33.zip"
    },
    {
      "displayPath" : "respect-server-shadow-1.0.33.zip",
      "fileName" : "respect-server-shadow-1.0.33.zip",
      "relativePath" : "respect-server/build/distributions/respect-server-shadow-1.0.33.zip"
    }
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#116",
  "duration" : 9415,
  "estimatedDuration" : 169560,
  "executor" : None,
  "fullDisplayName" : "dev-playlists-links #116",
  "id" : "116",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 116,
  "queueId" : 11087,
  "result" : "FAILURE",
  "timestamp" : 1786305900445,
  "url" : "https://devserver3.ustadmobile.com/jenkins/job/dev-playlists-links/116/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/SchoolCountryDetector.kt"
        ],
        "commitId" : "a4d0150fe26f9ff9b1f9a6de60bdebf753448313",
        "timestamp" : 1763017475000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Added SchoolcountryDetector.\u000a",
        "date" : "2025-11-13 12:34:35 +0530",
        "id" : "a4d0150fe26f9ff9b1f9a6de60bdebf753448313",
        "msg" : "Added SchoolcountryDetector.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/SchoolCountryDetector.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/SchoolCountryDetector.kt"
        ],
        "commitId" : "944c26ad8e4e5d9a9ae18eba2bed2f23b2e697c2",
        "timestamp" : 1763106745000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "added the GetCountryForUrlUseCase to lookup the country for a given URL\u000a",
        "date" : "2025-11-14 13:22:25 +0530",
        "id" : "944c26ad8e4e5d9a9ae18eba2bed2f23b2e697c2",
        "msg" : "added the GetCountryForUrlUseCase to lookup the country for a given URL",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/SchoolCountryDetector.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
        ],
        "commitId" : "0500ce78894c3dbc49d1e7fe491d03ddfedcc8d6",
        "timestamp" : 1763111337000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Added the implementation of the usecase\u000a",
        "date" : "2025-11-14 14:38:57 +0530",
        "id" : "0500ce78894c3dbc49d1e7fe491d03ddfedcc8d6",
        "msg" : "Added the implementation of the usecase",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
        ],
        "commitId" : "f50adb6ea129658d30648fd1d9f43aa4f43bc83e",
        "timestamp" : 1763359219000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "set White flag foe unknown country\u000a",
        "date" : "2025-11-17 11:30:19 +0530",
        "id" : "f50adb6ea129658d30648fd1d9f43aa4f43bc83e",
        "msg" : "set White flag foe unknown country",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
        ],
        "commitId" : "857f9bce5a3146eddef726bc3df42cdd398d7951",
        "timestamp" : 1763371747000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Chnage the Endpoint\u000a",
        "date" : "2025-11-17 14:59:07 +0530",
        "id" : "857f9bce5a3146eddef726bc3df42cdd398d7951",
        "msg" : "Chnage the Endpoint",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
        ],
        "commitId" : "6b8cc2c66c44a9e8a5e2628e077b201a4e8817f5",
        "timestamp" : 1763372021000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Chnage the Endpoint\u000a",
        "date" : "2025-11-17 15:03:41 +0530",
        "id" : "6b8cc2c66c44a9e8a5e2628e077b201a4e8817f5",
        "msg" : "Chnage the Endpoint",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
        ],
        "commitId" : "c40888ba7613010725454fcbbcf57031287ecc95",
        "timestamp" : 1763376701000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Remove the X-forwared-ip\u000a",
        "date" : "2025-11-17 16:21:41 +0530",
        "id" : "c40888ba7613010725454fcbbcf57031287ecc95",
        "msg" : "Remove the X-forwared-ip",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt"
        ],
        "commitId" : "c2445729a2db6f36e205a21dec7aab5f7fb86d66",
        "timestamp" : 1763378720000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Remove the white flag (default one being for just test purpose)\u000a",
        "date" : "2025-11-17 16:55:20 +0530",
        "id" : "c2445729a2db6f36e205a21dec7aab5f7fb86d66",
        "msg" : "Remove the white flag (default one being for just test purpose)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
        ],
        "commitId" : "5825298a09081127a6af65f4ba6556e3c7afdee3",
        "timestamp" : 1763455135000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "chane the end pointurl\u000a",
        "date" : "2025-11-18 14:08:55 +0530",
        "id" : "5825298a09081127a6af65f4ba6556e3c7afdee3",
        "msg" : "chane the end pointurl",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
        ],
        "commitId" : "c9185422cfdbed15882baf3b4841044baab8c72c",
        "timestamp" : 1763540629000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Add CountryFlag component for displaying flags\u000a",
        "date" : "2025-11-19 13:53:49 +0530",
        "id" : "c9185422cfdbed15882baf3b4841044baab8c72c",
        "msg" : "Add CountryFlag component for displaying flags",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
        ],
        "commitId" : "8e5f308aa64fb2e503a3f1f54b0113338b097bbc",
        "timestamp" : 1763626996000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "refactor: use Koin DI in CountryFlag composable for GetCountryForUrlUseCase.\u000a",
        "date" : "2025-11-20 13:53:16 +0530",
        "id" : "8e5f308aa64fb2e503a3f1f54b0113338b097bbc",
        "msg" : "refactor: use Koin DI in CountryFlag composable for GetCountryForUrlUseCase.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "30564c242c9ad4b487ec539a99fe6edae373c000",
        "timestamp" : 1763627461000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Modify App koin module\u000a",
        "date" : "2025-11-20 14:01:01 +0530",
        "id" : "30564c242c9ad4b487ec539a99fe6edae373c000",
        "msg" : "Modify App koin module",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "183fb85b03da17049b9ef0da7091dfd63fddc39d",
        "timestamp" : 1763630034000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Modify App koin module\u000a",
        "date" : "2025-11-20 14:43:54 +0530",
        "id" : "183fb85b03da17049b9ef0da7091dfd63fddc39d",
        "msg" : "Modify App koin module",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
        ],
        "commitId" : "d3d88c4c5598d5b42ab6d7d15b1a30fdb8721bcb",
        "timestamp" : 1763954560000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "refactor: replace string type with URL for schoolUrl\u000a",
        "date" : "2025-11-24 08:52:40 +0530",
        "id" : "d3d88c4c5598d5b42ab6d7d15b1a30fdb8721bcb",
        "msg" : "refactor: replace string type with URL for schoolUrl",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "ceca96a09687e8f649d769132601772cf9a478a4",
        "timestamp" : 1763977117000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Modify AppKoin module\u000a",
        "date" : "2025-11-24 15:08:37 +0530",
        "id" : "ceca96a09687e8f649d769132601772cf9a478a4",
        "msg" : "Modify AppKoin module",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
        ],
        "commitId" : "8cd1739ed559e2e42563d131b695b1da4d57837b",
        "timestamp" : 1768996473000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "-Created SharedFeedback Screen and its viewmodel (added in app route, appNavHost, app koin)\u000a-in AccountList have added a text with trailing icon \"Share feedback)\" and on click of it navigation to share feed back\u000a-In Share feedback screen added section on Quick Contact (as text) the using List Item to define 3 options of whatsapp, email and public forum)\u000aadded on click methods to it (not functional yet )\u000a",
        "date" : "2026-01-21 17:24:33 +0530",
        "id" : "8cd1739ed559e2e42563d131b695b1da4d57837b",
        "msg" : "-Created SharedFeedback Screen and its viewmodel (added in app route, appNavHost, app koin)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
        ],
        "commitId" : "9b5200c1c64f65a9c944127bd3f885b2bfffc33f",
        "timestamp" : 1769011246000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Remove redundant content descriptions\u000a",
        "date" : "2026-01-21 21:30:46 +0530",
        "id" : "9b5200c1c64f65a9c944127bd3f885b2bfffc33f",
        "msg" : "Refactor: Remove redundant content descriptions",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherAndroid.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncher.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncher.kt",
          "respect-lib-shared/log/respect-server.2026-01-14.0.log",
          "respect-datalayer-repository/log/respect-server.2026-01-14.0.log"
        ],
        "commitId" : "98949c9108a009648bdfcdf0dc4e8fdb19fd1538",
        "timestamp" : 1769063995000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Added functionality to open whatsapp to a default number and also when click on public forum opening respect website\u000a\u000aOnce I get the Whatsapp support number will change that and also will replace the web support link once provided\u000a",
        "date" : "2026-01-22 12:09:55 +0530",
        "id" : "98949c9108a009648bdfcdf0dc4e8fdb19fd1538",
        "msg" : "Added functionality to open whatsapp to a default number and also when click on public forum opening respect website",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/log/respect-server.2026-01-14.0.log"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-repository/log/respect-server.2026-01-14.0.log"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncher.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncher.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
        ],
        "commitId" : "e47c0aaa7481f27ce8331d8ca10b44fb083be7c5",
        "timestamp" : 1769070937000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "merged main\u000a",
        "date" : "2026-01-22 14:05:37 +0530",
        "id" : "e47c0aaa7481f27ce8331d8ca10b44fb083be7c5",
        "msg" : "merged main",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "gradle/wrapper/gradle-wrapper.properties",
          "gradle/libs.versions.toml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "gradle.properties"
        ],
        "commitId" : "704dedde542a471542ef6b154ba770c8056c8928",
        "timestamp" : 1769161032000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Add feedback form to Share Feedback screen\u000a\u000aThis commit introduces a detailed feedback form on the \"Share Feedback\" screen, allowing users to submit structured feedback.\u000a\u000aKey changes include:\u000a- A dropdown menu for selecting a feedback category.\u000a- A multi-line text field for users to describe their feedback in detail.\u000a- A checkbox for users to request a response from the team.\u000a- A \"Submit\" button to send the feedback.\u000a- Updated string resources for the new UI elements.\u000a- Renamed \"WhatsApp/Email Support\" to \"WhatsApp/Email Respect\".\u000a- Upgraded Gradle version from 8.13 to 9.1.0 and updated related dependencies.\u000a",
        "date" : "2026-01-23 15:07:12 +0530",
        "id" : "704dedde542a471542ef6b154ba770c8056c8928",
        "msg" : "feat: Add feedback form to Share Feedback screen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "gradle/wrapper/gradle-wrapper.properties"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "d4ca86c10492cb109c510c9cb98bbf3ca82464d1",
        "timestamp" : 1769163289000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Adds optional phone number and email fields to the \"Share Feedback\" screen. These fields are displayed only when the user agrees to be contacted by checking a box. The phone number input utilizes the `RespectPhoneNumberTextField` component.\u000a",
        "date" : "2026-01-23 15:44:49 +0530",
        "id" : "d4ca86c10492cb109c510c9cb98bbf3ca82464d1",
        "msg" : "Adds optional phone number and email fields to the \"Share Feedback\" screen. These fields are displayed only when the user agrees to be contacted by checking a box. The phone number input utilizes the `RespectPhoneNumberTextField` component.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncher.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "d2ad80ef88ed51fb88c6efab1ed0e493ef84de86",
        "timestamp" : 1769165149000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Introduced an `EmailLauncher` to enable users to send feedback via email.\u000a- Created a common `EmailLauncher` interface.\u000a- Added an Android-specific implementation (`EmailLauncherAndroid`) that opens an email client with a pre-filled recipient and subject.\u000a",
        "date" : "2026-01-23 16:15:49 +0530",
        "id" : "d2ad80ef88ed51fb88c6efab1ed0e493ef84de86",
        "msg" : "Introduced an `EmailLauncher` to enable users to send feedback via email.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncher.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/model/FeedbackTicket.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/sharefeedback/FeedBackDataSourceRepository.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "209d5d17e8fbba1ae8254a0cc63eaa87f9dd3e7e",
        "timestamp" : 1769190673000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Implemented Zammad ticket creation for feedback\u000a\u000a- Added `FeedBackDataSource` interface and its HTTP implementation to create feedback tickets via the Zammad API.\u000a- Implemented a repository for the feedback data source.\u000a- Defined `FeedbackTicket` and ` data models for the ticket.\u000a- Integrated the ticket creation logic into `ShareFeedbackViewModel`'s `onClickSubmit` function for testing purposes.\u000a",
        "date" : "2026-01-23 23:21:13 +0530",
        "id" : "209d5d17e8fbba1ae8254a0cc63eaa87f9dd3e7e",
        "msg" : "Implemented Zammad ticket creation for feedback",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/sharefeedback/FeedBackDataSourceRepository.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/model/FeedbackTicket.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "a6d22afea62ab81feffaa73dc64902dc471cd682",
        "timestamp" : 1769190744000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: remove unused accountManager\u000a\u000aRemoves the unused `accountManager` field from the `ShareFeedbackViewModel` constructor.\u000a",
        "date" : "2026-01-23 23:22:24 +0530",
        "id" : "a6d22afea62ab81feffaa73dc64902dc471cd682",
        "msg" : "Refactor: remove unused accountManager",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "ff6e74cdb0ef0568cf22fb53bd4e733d88442fad",
        "timestamp" : 1769445344000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "creating list of category from string.xml\u000a",
        "date" : "2026-01-26 22:05:44 +0530",
        "id" : "ff6e74cdb0ef0568cf22fb53bd4e733d88442fad",
        "msg" : "creating list of category from string.xml",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "78eb1098a7bd589e5f1f03ef8151c21b401bac06",
        "timestamp" : 1769446978000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Implement feedback submission functionality\u000a\u000aThis commit wires up the ShareFeedback screen to enable users to submit feedback.\u000a\u000aKey changes:\u000a- Implemented `onPhoneChanged` and `onEmailChanged` to update the UI state.\u000a- Connected the \"Submit\" button to create and send a `FeedbackTicket`.\u000a- The ticket now correctly uses the user-provided email, selected category, and feedback text.\u000a- Standardized the email subject line using a string resource.\u000a",
        "date" : "2026-01-26 22:32:58 +0530",
        "id" : "78eb1098a7bd589e5f1f03ef8151c21b401bac06",
        "msg" : "feat: Implement feedback submission functionality",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "00f944b82cc7799a057a65be32fe5d4dc1723c58",
        "timestamp" : 1769488351000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Implement feedback ticket submission\u000a\u000aThis commit introduces the functionality to create and submit a feedback ticket.\u000a\u000aChanges include:\u000a- Adding the necessary Koin dependency injection for `FeedbackDataSource`.\u000a- Correcting the Zammad authentication token format.\u000a- Updating the `ShareFeedbackViewModel` to construct and submit the `FeedbackTicket`.\u000a- Modifying the `FeedbackDataSourceHttp` to remove the response body handling.\u000a",
        "date" : "2026-01-27 10:02:31 +0530",
        "id" : "00f944b82cc7799a057a65be32fe5d4dc1723c58",
        "msg" : "feat: Implement feedback ticket submission",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncher.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "bc4cb731b6210e8f5b2dd172c60f382cb50678f1",
        "timestamp" : 1769492342000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactored share feedback view model\u000a\u000a- Extracted hardcoded strings to constants.\u000a- Added a `ticketTitle` variable to `ShareFeedbackViewModel`.\u000a- The `ticketTitle` is now passed as the subject when sending an email.\u000a- Updated the `guess` string resource to include a colon.\u000a",
        "date" : "2026-01-27 11:09:02 +0530",
        "id" : "bc4cb731b6210e8f5b2dd172c60f382cb50678f1",
        "msg" : "Refactored share feedback view model",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncher.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
        ],
        "commitId" : "889350a0ca1ed4e28b906610ddcd4799ecb4d6c7",
        "timestamp" : 1769493693000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refact: Move feedback data source to school data source\u000a\u000aThe `FeedBackDataSource` is now accessed through the `SchoolDataSource` interface.\u000a\u000aChanges include:\u000a- Adding `feedBackDataSource` to the `SchoolDataSource` interface.\u000a- Implementing `feedBackDataSource` in `SchoolDataSourceHttp`, `SchoolDataSourceRepository`, and `SchoolDataSourceDb` (with a TODO).\u000a- Updating `ShareFeedbackViewModel` to use `schoolDataSource.feedBackDataSource`.\u000a- Removing the now-redundant `FeedbackDataSource` Koin definitions.\u000a",
        "date" : "2026-01-27 11:31:33 +0530",
        "id" : "889350a0ca1ed4e28b906610ddcd4799ecb4d6c7",
        "msg" : "Refact: Move feedback data source to school data source",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "58d45b3e973aa06d1cd1b50b8bfe14d5dff88185",
        "timestamp" : 1769495167000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Renamed `ticketTitle` to `subject` for clarity.\u000a\u000aThe `ticketTitle` variable in `ShareFeedbackViewModel` has been renamed to `subject` to better reflect its purpose.\u000a\u000aIn `EmailLauncherAndroid`, the logic for building the mailto URI has been updated to use string interpolation and `toUri()` for a more concise implementation.\u000a",
        "date" : "2026-01-27 11:56:07 +0530",
        "id" : "58d45b3e973aa06d1cd1b50b8bfe14d5dff88185",
        "msg" : "Refactor: Renamed `ticketTitle` to `subject` for clarity.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherAndroid.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "70aa6344ea518a1f4d14d29f02c2744c2188043c",
        "timestamp" : 1769507693000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Moved hardcoded values for WhatsApp, web URLs, and email recipients to a companion object in `ShareFeedbackViewModel`.\u000a",
        "date" : "2026-01-27 15:24:53 +0530",
        "id" : "70aa6344ea518a1f4d14d29f02c2744c2188043c",
        "msg" : "Moved hardcoded values for WhatsApp, web URLs, and email recipients to a companion object in `ShareFeedbackViewModel`.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherAndroid.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "2b8e20c1f9ff2442f20abf39818b9f086e6b4cc3",
        "timestamp" : 1769508238000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Moved hardcoded values for WhatsApp, web URLs, and email recipients to a companion object in `ShareFeedbackViewModel`.\u000a",
        "date" : "2026-01-27 15:33:58 +0530",
        "id" : "2b8e20c1f9ff2442f20abf39818b9f086e6b4cc3",
        "msg" : "Moved hardcoded values for WhatsApp, web URLs, and email recipients to a companion object in `ShareFeedbackViewModel`.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "df262cc009526fe23c50664fd222e495b6ce0f95",
        "timestamp" : 1769513507000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Add validation to share feedback screen\u000a\u000a- Implement required field validation for the feedback description.\u000a- Add validation to ensure either a phone number or email is provided when a response is requested.\u000a- Display error messages on the respective fields.\u000a- Refactor `feedbackText` to `feedbackDescription` for clarity.\u000a",
        "date" : "2026-01-27 17:01:47 +0530",
        "id" : "df262cc009526fe23c50664fd222e495b6ce0f95",
        "msg" : "feat: Add validation to share feedback screen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherAndroid.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
        ],
        "commitId" : "e775f4b827b76a76c029d5deaa73d9d0a048285b",
        "timestamp" : 1769573786000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor\u000a",
        "date" : "2026-01-28 09:46:26 +0530",
        "id" : "e775f4b827b76a76c029d5deaa73d9d0a048285b",
        "msg" : "Refactor",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherAndroid.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "b37421b295042e61a653b9699a6eb26ff5e07984",
        "timestamp" : 1769574739000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor\u000a",
        "date" : "2026-01-28 10:02:19 +0530",
        "id" : "b37421b295042e61a653b9699a6eb26ff5e07984",
        "msg" : "Refactor",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "b97060ae591ccac9216e387e1abdae58504200a2",
        "timestamp" : 1769579614000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Removed email from contact validation on feedback form.\u000a",
        "date" : "2026-01-28 11:23:34 +0530",
        "id" : "b97060ae591ccac9216e387e1abdae58504200a2",
        "msg" : "feat: Removed email from contact validation on feedback form.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "3170d46d2bb22994e42648e6dea0607b0e079a46",
        "timestamp" : 1769579680000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Removed email from contact validation on feedback form.\u000a",
        "date" : "2026-01-28 11:24:40 +0530",
        "id" : "3170d46d2bb22994e42648e6dea0607b0e079a46",
        "msg" : "feat: Removed email from contact validation on feedback form.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "b9f6f0d89ce01e99c6d32d7eda68e59575c8d4ae",
        "timestamp" : 1769580768000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Fix: Share feedback contact validation\u000a\u000aCorrected the validation logic for the phone number field on the share feedback screen. The error will now be correctly triggered if the \"contact me\" checkbox is selected and the phone number field is left blank.\u000a",
        "date" : "2026-01-28 11:42:48 +0530",
        "id" : "b9f6f0d89ce01e99c6d32d7eda68e59575c8d4ae",
        "msg" : "Fix: Share feedback contact validation",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "3bc1b77d4a8ac89585b74833e40873657cb46120",
        "timestamp" : 1769581119000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Appends the user's phone number to the body of the feedback ticket being created.\u000a",
        "date" : "2026-01-28 11:48:39 +0530",
        "id" : "3bc1b77d4a8ac89585b74833e40873657cb46120",
        "msg" : "Appends the user's phone number to the body of the feedback ticket being created.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "668e871940c87a96077d588d535822742a712982",
        "timestamp" : 1769581351000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Appends the user's phone number to the body of the feedback ticket being created.\u000a",
        "date" : "2026-01-28 11:52:31 +0530",
        "id" : "668e871940c87a96077d588d535822742a712982",
        "msg" : "Appends the user's phone number to the body of the feedback ticket being created.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt"
        ],
        "commitId" : "20989f794deb131a87be9c2ebdb5730c6c05bac3",
        "timestamp" : 1769584121000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Appends the user's phone number to the body of the feedback ticket being created.\u000a",
        "date" : "2026-01-28 12:38:41 +0530",
        "id" : "20989f794deb131a87be9c2ebdb5730c6c05bac3",
        "msg" : "Appends the user's phone number to the body of the feedback ticket being created.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/model/FeedbackTicket.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "58faa6168ea37cb58bb9754c4d8d9376493f847c",
        "timestamp" : 1769585134000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "The contact validation error message, which applies to both phone and email fields, has been moved from the phone number field to the email field to ensure it's always visible. Additionally, the validation logic is updated to require at least one contact method (phone or email) when the feedback checkbox is selected, and a new string resource for this validation message has been added.\u000a",
        "date" : "2026-01-28 12:55:34 +0530",
        "id" : "58faa6168ea37cb58bb9754c4d8d9376493f847c",
        "msg" : "The contact validation error message, which applies to both phone and email fields, has been moved from the phone number field to the email field to ensure it's always visible. Additionally, the validation logic is updated to require at least one contact method (phone or email) when the feedback checkbox is selected, and a new string resource for this validation message has been added.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/model/FeedbackTicket.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
        ],
        "commitId" : "4d8b3ea5b05b5a04ac72a864fc722ee782cf85b2",
        "timestamp" : 1769593172000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Separate contact field validation on feedback form\u000a\u000aThe shared `contactError` state has been replaced with individual `phoneNumberError` and `emailError` states for the phone and email fields on the share feedback screen.\u000a\u000aThis change introduces specific validation logic for each field:\u000a*   If the \"contact me\" checkbox is selected, an error is now displayed under the email field, requiring at least one contact method.\u000a*   Individual validation for incorrect phone number and email formats has been added, displaying \"Invalid\" or \"Invalid email\" respectively.\u000a*   The error message for requiring at least one contact method has been updated for clarity.\u000a",
        "date" : "2026-01-28 15:09:32 +0530",
        "id" : "4d8b3ea5b05b5a04ac72a864fc722ee782cf85b2",
        "msg" : "Refactor: Separate contact field validation on feedback form",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/model/FeedbackTicket.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
        ],
        "commitId" : "c1517a73866c94cc252eada8bc1db51492116dde",
        "timestamp" : 1769595267000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Add feedback submitted screen\u000a\u000aIntroduced a confirmation screen that appears after a user successfully submits feedback. This involves creating the `FeedbackSubmittedScreen` and its corresponding `FeedbackSubmittedViewModel`.\u000a\u000aUpon successful ticket creation, the app now navigates to this new screen. Additionally, the phone number is no longer appended to the feedback ticket's article type.\u000a",
        "date" : "2026-01-28 15:44:27 +0530",
        "id" : "c1517a73866c94cc252eada8bc1db51492116dde",
        "msg" : "feat: Add feedback submitted screen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/model/FeedbackTicket.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "c9b29b3995e18cfc591d3aa4713222d8b9a5f03a",
        "timestamp" : 1769595603000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Appends the user's phone number to the body of the feedback ticket being created.\u000a",
        "date" : "2026-01-28 15:50:03 +0530",
        "id" : "c9b29b3995e18cfc591d3aa4713222d8b9a5f03a",
        "msg" : "Appends the user's phone number to the body of the feedback ticket being created.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "2f1e0ec71b0e50c59cb1f9c2af727b2b2235c173",
        "timestamp" : 1769595619000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Appends the user's phone number to the body of the feedback ticket being created.\u000a",
        "date" : "2026-01-28 15:50:19 +0530",
        "id" : "2f1e0ec71b0e50c59cb1f9c2af727b2b2235c173",
        "msg" : "Appends the user's phone number to the body of the feedback ticket being created.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
        ],
        "commitId" : "e0d6c7f3e669335a88532177a3017f67b1176cc0",
        "timestamp" : 1769595651000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Appends the user's phone number to the body of the feedback ticket being created.\u000a",
        "date" : "2026-01-28 15:50:51 +0530",
        "id" : "e0d6c7f3e669335a88532177a3017f67b1176cc0",
        "msg" : "Appends the user's phone number to the body of the feedback ticket being created.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
        ],
        "commitId" : "409d446aec3f2a1707e242231d34771dcce86953",
        "timestamp" : 1769605638000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Appends the user's phone number to the body of the feedback ticket being created.\u000a",
        "date" : "2026-01-28 18:37:18 +0530",
        "id" : "409d446aec3f2a1707e242231d34771dcce86953",
        "msg" : "Appends the user's phone number to the body of the feedback ticket being created.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-lib-shared/src/commonMain/composeResources/drawable/feedback_sent.xml",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/build.gradle.kts",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
        ],
        "commitId" : "c09dc8cd4b4ec4271c4d5420c3357fb08e4ef992",
        "timestamp" : 1769605642000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Appends the user's phone number to the body of the feedback ticket being created.\u000a",
        "date" : "2026-01-28 18:37:22 +0530",
        "id" : "c09dc8cd4b4ec4271c4d5420c3357fb08e4ef992",
        "msg" : "Appends the user's phone number to the body of the feedback ticket being created.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/composeResources/drawable/feedback_sent.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
        ],
        "commitId" : "784c88546941121f6433fe6083af9d0c40e30659",
        "timestamp" : 1769607456000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Display submission error on feedback form\u000a\u000aIntroduces an error message on the \"Share Feedback\" screen that is displayed to the user if the feedback submission fails. This is implemented by adding an `errorMessage` state to the `ShareFeedbackViewModel` and a corresponding `Text` component in the UI to show the message. Additionally, a new string resource for the error has been created.\u000a",
        "date" : "2026-01-28 19:07:36 +0530",
        "id" : "784c88546941121f6433fe6083af9d0c40e30659",
        "msg" : "feat: Display submission error on feedback form",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
        ],
        "commitId" : "765037d6d5a5a721c6a9462fdda3029053f7e64f",
        "timestamp" : 1769609128000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "added end-to-end test\u000a",
        "date" : "2026-01-28 18:05:28 +0400",
        "id" : "765037d6d5a5a721c6a9462fdda3029053f7e64f",
        "msg" : "added end-to-end test",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "659d0082b864fa67567d217a0c2555129f02e389",
        "timestamp" : 1769614249000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Cleared share feedback screen from backstack\u000a\u000aAfter successfully submitting feedback, the navigation logic is updated to clear the `ShareFeedback` screen from the back stack. This prevents the user from navigating back to the form they just submitted. Additionally, padding was added to the image on the `FeedbackSubmittedScreen`.\u000a",
        "date" : "2026-01-28 21:00:49 +0530",
        "id" : "659d0082b864fa67567d217a0c2555129f02e389",
        "msg" : "feat: Cleared share feedback screen from backstack",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
        ],
        "commitId" : "d3625e0f8b038a9937ee33ef7f92c34c93f13db1",
        "timestamp" : 1769616111000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "refactor\u000a",
        "date" : "2026-01-28 21:31:51 +0530",
        "id" : "d3625e0f8b038a9937ee33ef7f92c34c93f13db1",
        "msg" : "refactor",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
        ],
        "commitId" : "2828513646853240f8871234560cb1c7b51a6bb7",
        "timestamp" : 1769665993000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : " Refactor contact validation error on feedback form\u000a",
        "date" : "2026-01-29 11:23:13 +0530",
        "id" : "2828513646853240f8871234560cb1c7b51a6bb7",
        "msg" : "Refactor contact validation error on feedback form",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "gradle/wrapper/gradle-wrapper.properties",
          "gradle/libs.versions.toml",
          "respect-datalayer-repository/log/respect-server.2026-01-14.0.log",
          "gradle.properties"
        ],
        "commitId" : "7ff74f04134b5fd2478c3e5cc7e3646e6d628d46",
        "timestamp" : 1769674384000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : " Update Gradle and remove log files\u000a",
        "date" : "2026-01-29 13:43:04 +0530",
        "id" : "7ff74f04134b5fd2478c3e5cc7e3646e6d628d46",
        "msg" : "Update Gradle and remove log files",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "edit",
            "file" : "gradle/wrapper/gradle-wrapper.properties"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer-repository/log/respect-server.2026-01-14.0.log"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-app-compose/build.gradle.kts"
        ],
        "commitId" : "b2537e62509dfa2cedcb0b938e04431a70b8f72e",
        "timestamp" : 1769677857000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Configuration loading for Zammad credentials has been updated in `build.gradle.kts`, now sourcing the token and URL from a `zammad.properties` file or environment variables.\u000a",
        "date" : "2026-01-29 14:40:57 +0530",
        "id" : "b2537e62509dfa2cedcb0b938e04431a70b8f72e",
        "msg" : "Configuration loading for Zammad credentials has been updated in `build.gradle.kts`, now sourcing the token and URL from a `zammad.properties` file or environment variables.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/subflows/add_person_create_account.yaml",
          ".maestro/flows/004_user_send_feedback_test.yaml",
          ".maestro/flows/subflows/school_user_login_flow.yaml"
        ],
        "commitId" : "915ab3c24000630e1706b5a0a8b4af87e68e0e59",
        "timestamp" : 1769679989000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "added validations\u000a",
        "date" : "2026-01-29 13:46:29 +0400",
        "id" : "915ab3c24000630e1706b5a0a8b4af87e68e0e59",
        "msg" : "added validations",
        "paths" : [
          {
            "editType" : "add",
            "file" : ".maestro/flows/004_user_send_feedback_test.yaml"
          },
          {
            "editType" : "add",
            "file" : ".maestro/flows/subflows/add_person_create_account.yaml"
          },
          {
            "editType" : "add",
            "file" : ".maestro/flows/subflows/school_user_login_flow.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
        ],
        "commitId" : "76cd48a5efd336dc8c549ff95dde093f553d7dcc",
        "timestamp" : 1769704111000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "refactor: Integrate FeedbackDataSource into SchoolDataSource\u000a\u000aExtracted the `FeedBackDataSource` into the `SchoolDataSource` interface and its various implementations (`Http`, `Db`, `Repository`). This refactoring centralizes data source access.\u000a\u000aKey changes include:\u000a- Passing Zammad URL and token configurations from the `AppKoinModule` to `SchoolDataSourceHttp`.\u000a- Updating `ShareFeedbackViewModel` to obtain the `feedBackDataSource` via the main `SchoolDataSource`.\u000a- Removing the hardcoded Zammad URL from `FeedbackDataSourceHttp` and using the configured one instead.\u000a- Hiding the bottom navigation on the \"Share Feedback\" screen.\u000a",
        "date" : "2026-01-29 21:58:31 +0530",
        "id" : "76cd48a5efd336dc8c549ff95dde093f553d7dcc",
        "msg" : "refactor: Integrate FeedbackDataSource into SchoolDataSource",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
        ],
        "commitId" : "aeea06f22157081cdd4b39d9b45681bc3482b0f4",
        "timestamp" : 1769705189000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Handle feedback submission errors and hide navigation\u000a\u000a- Checks the HTTP response status after attempting to create a feedback ticket.\u000a- Displays a generic error message to the user if the ticket submission fails.\u000a- On the feedback submission confirmation screen, the bottom navigation is now hidden.\u000a- The `createTicket` function in the data source and view model now returns an `HttpResponse` to enable status checking.\u000a",
        "date" : "2026-01-29 22:16:29 +0530",
        "id" : "aeea06f22157081cdd4b39d9b45681bc3482b0f4",
        "msg" : "Handle feedback submission errors and hide navigation",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncher.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncher.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncher.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherAndroid.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCase.kt"
        ],
        "commitId" : "741ff12b56f782bf6fa602ae19402ce5b24b026d",
        "timestamp" : 1769706105000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Append \"UseCase\" to launcher class names\u000a\u000aRenamed the `EmailLauncher`, `WebLauncher`, and `WhatsAppLauncher` classes and their corresponding Android implementations to `EmailLauncherUseCase`, `WebLauncherUseCase`, and `WhatsAppLauncherUseCase` respectively. This change makes their purpose as use cases clearer and aligns them with the project's naming conventions.\u000a\u000aThe `ShareFeedbackViewModel` and the Koin dependency injection module have been updated to reflect these new class names.\u000a",
        "date" : "2026-01-29 22:31:45 +0530",
        "id" : "741ff12b56f782bf6fa602ae19402ce5b24b026d",
        "msg" : "Refactor: Append \"UseCase\" to launcher class names",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncher.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncher.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncher.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/build.gradle.kts",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-lib-shared/build.gradle.kts",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/sharefeedback/FeedBackDataSourceRepository.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
        ],
        "commitId" : "f4de51a39e15ee38525f4984521f1ff869953108",
        "timestamp" : 1769711106000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Removes the `FeedBackDataSource`, its HTTP implementation, and repository, along with their integration into the existing data source layers. The responsibility for feedback ticket creation has been moved from the data layer to the `ShareFeedbackViewModel`.\u000a\u000aAdditionally, Zammad API credentials (URL and token) are now configured through `buildConfigField` in the `respect-lib-shared` module, removing the previous hardcoded values and `respect-app-compose` build configurations.\u000a",
        "date" : "2026-01-29 23:55:06 +0530",
        "id" : "f4de51a39e15ee38525f4984521f1ff869953108",
        "msg" : "Removes the `FeedBackDataSource`, its HTTP implementation, and repository, along with their integration into the existing data source layers. The responsibility for feedback ticket creation has been moved from the data layer to the `ShareFeedbackViewModel`.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/sharefeedback/FeedbackDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/sharefeedback/FeedBackDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/build.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/FeedBackDataSource.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/build.gradle.kts",
          "respect-app-compose/build.gradle.kts"
        ],
        "commitId" : "d40c7cc0b87c46fff6d4993e6bd088461452db09",
        "timestamp" : 1769712553000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Refactored feedback property names for clarity and consistency.\u000a\u000aRenamed Zammad and Respect contact properties to use a `FEEDBACK_` prefix, improving clarity about their purpose. This change affects build configuration files (`build.gradle.kts`) by renaming build config fields and the property files from which they are loaded (e.g., `zammad.properties` to `feedback.properties`).\u000a\u000aSpecifically, the following properties were renamed:\u000a- `ZAMMAD_URL` to `FEEDBACK_ZAMMADURL`\u000a- `ZAMMAD_TOKEN` to `FEEDBACK_ZAMMADTOKEN`\u000a\u000aAdditionally, new properties for Respect's contact details were introduced with the same naming convention:\u000a- `FEEDBACK_RESPECTPHONENUMBER`\u000a- `FEEDBACK_RESPECTEMAILID`\u000a",
        "date" : "2026-01-30 00:19:13 +0530",
        "id" : "d40c7cc0b87c46fff6d4993e6bd088461452db09",
        "msg" : "feat: Refactored feedback property names for clarity and consistency.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/build.gradle.kts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/build.gradle.kts"
        ],
        "commitId" : "6d249989f5de189a7a2a9efda5faa9581d947a09",
        "timestamp" : 1769754663000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/noreply",
          "fullName" : "noreply"
        },
        "authorEmail" : "noreply@github.com",
        "comment" : "Update build.gradle.kts\u000a",
        "date" : "2026-01-30 12:01:03 +0530",
        "id" : "6d249989f5de189a7a2a9efda5faa9581d947a09",
        "msg" : "Update build.gradle.kts",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/build.gradle.kts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "6114a11cce90d520c07570b8502128178db91c0d",
        "timestamp" : 1769754866000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/noreply",
          "fullName" : "noreply"
        },
        "authorEmail" : "noreply@github.com",
        "comment" : "Update AppKoinModule.kt\u000a",
        "date" : "2026-01-30 12:04:26 +0530",
        "id" : "6114a11cce90d520c07570b8502128178db91c0d",
        "msg" : "Update AppKoinModule.kt",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/feedback/GetFeedbackInfoUseCaseImpl.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/CreateTicketUseCase.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCaseAndroid.kt",
          "respect-lib-shared/build.gradle.kts",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackTicket.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/ZammadTicketResponse.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/build.gradle.kts",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/model/FeedbackTicket.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/GetFeedbackInfoUseCase.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/feedback/CreateTicketUseCaseImpl.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
        ],
        "commitId" : "a3eef313e4a16ce1ae3718a622c9691e3c799ecf",
        "timestamp" : 1769766902000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Integrate Zammad for feedback submission and refactor configuration\u000a\u000aIntegrated the feedback submission feature with the Zammad ticketing system. When a user submits feedback, a ticket is now created in Zammad, and the resulting ticket ID is passed to the confirmation screen.\u000a\u000aKey changes include:\u000a- A new `CreateTicketUseCase` is introduced to handle the API call to Zammad.\u000a- The `ShareFeedbackViewModel` now uses this use case to create a ticket and navigates to a success screen with the new ticket ID.\u000a- Configuration properties for Zammad (URL, token) and contact details (phone, email) have been moved from the `respect-app-compose` module to the `respect-lib-shared` module. This centralizes feedback-related settings.\u000a- The `EmailLauncherUseCase` and `WhatsAppLauncherUseCase` were updated to use the newly centralized contact information.\u000a",
        "date" : "2026-01-30 15:25:02 +0530",
        "id" : "a3eef313e4a16ce1ae3718a622c9691e3c799ecf",
        "msg" : "feat: Integrate Zammad for feedback submission and refactor configuration",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/feedback/CreateTicketUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/GetFeedbackInfoUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackTicket.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/ZammadTicketResponse.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/feedback/GetFeedbackInfoUseCaseImpl.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/CreateTicketUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/sharefeedback/model/FeedbackTicket.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
        ],
        "commitId" : "ebdf205e7743ca2e21c120d1984761739dd04ca5",
        "timestamp" : 1769771208000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Display Zammad ticket ID on feedback submission screen\u000a\u000aAdds the Zammad ticket ID to the \"Feedback Submitted\" screen, making it visible to the user for reference. This ID is displayed in a new `Text` element and tagged for testing purposes.\u000a",
        "date" : "2026-01-30 16:36:48 +0530",
        "id" : "ebdf205e7743ca2e21c120d1984761739dd04ca5",
        "msg" : "feat: Display Zammad ticket ID on feedback submission screen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
        ],
        "commitId" : "a2cb2fbb73001a7b5f887356164076ff6e989a18",
        "timestamp" : 1769773017000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "removed feedback changes from 003\u000a",
        "date" : "2026-01-30 15:36:57 +0400",
        "id" : "a2cb2fbb73001a7b5f887356164076ff6e989a18",
        "msg" : "removed feedback changes from 003",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
        ],
        "commitId" : "5849e1aed1e8698fa63ba334ee223d849ef5301b",
        "timestamp" : 1769774917000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Hide Zammad ticket ID on feedback submission screen\u000a\u000aThe Zammad ticket ID displayed on the feedback submitted screen is now hidden from the user by setting its color to transparent. This change is implemented for UI testing purposes while keeping the element accessible to test automation frameworks via its `testTag`.\u000a",
        "date" : "2026-01-30 17:38:37 +0530",
        "id" : "5849e1aed1e8698fa63ba334ee223d849ef5301b",
        "msg" : "feat: Hide Zammad ticket ID on feedback submission screen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
        ],
        "commitId" : "86f6745273eb22e1251f02daf1e266c0c5736737",
        "timestamp" : 1769776840000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Remove redundant quotes in error message string\u000a",
        "date" : "2026-01-30 18:10:40 +0530",
        "id" : "86f6745273eb22e1251f02daf1e266c0c5736737",
        "msg" : "Refactor: Remove redundant quotes in error message string",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "8caa1048eab1633dd01cd31c8a8f104fcad63093",
        "timestamp" : 1769777869000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Clear error message on submit\u000a\u000aClears the previous error message when the user clicks the submit button again.\u000a",
        "date" : "2026-01-30 18:27:49 +0530",
        "id" : "8caa1048eab1633dd01cd31c8a8f104fcad63093",
        "msg" : "Refactor: Clear error message on submit",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/004_user_send_feedback_test.yaml"
        ],
        "commitId" : "d0e2d7ec240fc7f1951cee7210d7150525be5ae9",
        "timestamp" : 1769781347000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "removed feedback changes from 003\u000a",
        "date" : "2026-01-30 17:55:47 +0400",
        "id" : "d0e2d7ec240fc7f1951cee7210d7150525be5ae9",
        "msg" : "removed feedback changes from 003",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/004_user_send_feedback_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/004_user_send_feedback_test.yaml"
        ],
        "commitId" : "29fbd62eb54bba1d39d538910c8f8c50a9b0c97c",
        "timestamp" : 1769781800000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "removed\u000a",
        "date" : "2026-01-30 18:03:20 +0400",
        "id" : "29fbd62eb54bba1d39d538910c8f8c50a9b0c97c",
        "msg" : "removed",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/004_user_send_feedback_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
        ],
        "commitId" : "0f9f5b501a3a25ccdfa9febd0272e1f5201c195e",
        "timestamp" : 1769784011000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Update feedback response string\u000a",
        "date" : "2026-01-30 20:10:11 +0530",
        "id" : "0f9f5b501a3a25ccdfa9febd0272e1f5201c195e",
        "msg" : "feat: Update feedback response string",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/004_user_send_feedback_test.yaml",
          ".maestro/flows/subflows/school_admin_login_flow.yaml"
        ],
        "commitId" : "754411a3fcb3d999a188224f65df0e41e8e66ba9",
        "timestamp" : 1769784936000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated\u000a",
        "date" : "2026-01-30 18:55:36 +0400",
        "id" : "754411a3fcb3d999a188224f65df0e41e8e66ba9",
        "msg" : "updated",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/school_admin_login_flow.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/004_user_send_feedback_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/log/respect-server.2026-01-14.0.log",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "354e0b785a540e804b184351474377766fe21e51",
        "timestamp" : 1769788996000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "refactor: Removed unused log file and import.\u000a.\u000a",
        "date" : "2026-01-30 21:33:16 +0530",
        "id" : "354e0b785a540e804b184351474377766fe21e51",
        "msg" : "refactor: Removed unused log file and import.",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/log/respect-server.2026-01-14.0.log"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
        ],
        "commitId" : "e22305478068d670d68822d4c6e8d375bab70cdf",
        "timestamp" : 1769843403000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Update feedback form strings for clarity\u000a",
        "date" : "2026-01-31 12:40:03 +0530",
        "id" : "e22305478068d670d68822d4c6e8d375bab70cdf",
        "msg" : "feat: Update feedback form strings for clarity",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "e855eabd17ca05860f6b5ff2cf2b67b2ceeb56d3",
        "timestamp" : 1769844451000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Hide the user account icon on the \"Share Feedback\" and \"Feedback Submitted\" screens.\u000a",
        "date" : "2026-01-31 12:57:31 +0530",
        "id" : "e855eabd17ca05860f6b5ff2cf2b67b2ceeb56d3",
        "msg" : "Hide the user account icon on the \"Share Feedback\" and \"Feedback Submitted\" screens.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/004_user_send_feedback_test.yaml",
          "ci-run-maestro.sh",
          ".gitignore",
          ".maestro/flows/scripts/verifyZammadTicket.js"
        ],
        "commitId" : "9084cca9336ae8ee8f51955f8fcd5d6ead04cfb3",
        "timestamp" : 1769867489000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated API call\u000a",
        "date" : "2026-01-31 17:51:29 +0400",
        "id" : "9084cca9336ae8ee8f51955f8fcd5d6ead04cfb3",
        "msg" : "updated API call",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/004_user_send_feedback_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          },
          {
            "editType" : "edit",
            "file" : ".gitignore"
          },
          {
            "editType" : "add",
            "file" : ".maestro/flows/scripts/verifyZammadTicket.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/004_user_send_feedback_test.yaml"
        ],
        "commitId" : "b1b03b57aedeb7d35ddd5ad90270beedacc0eb9b",
        "timestamp" : 1769877996000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated API call\u000a",
        "date" : "2026-01-31 20:46:36 +0400",
        "id" : "b1b03b57aedeb7d35ddd5ad90270beedacc0eb9b",
        "msg" : "updated API call",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/004_user_send_feedback_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh"
        ],
        "commitId" : "317d4704bd268cec82ce1c8b7f8e7c267ab0b36e",
        "timestamp" : 1769878627000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated maestro.sh\u000a",
        "date" : "2026-01-31 20:57:07 +0400",
        "id" : "317d4704bd268cec82ce1c8b7f8e7c267ab0b36e",
        "msg" : "updated maestro.sh",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/004_user_send_feedback_test.yaml"
        ],
        "commitId" : "349b70c30db7eedf9f969ca33e2e06c9a0efde71",
        "timestamp" : 1769880034000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated 004 test\u000a",
        "date" : "2026-01-31 21:20:34 +0400",
        "id" : "349b70c30db7eedf9f969ca33e2e06c9a0efde71",
        "msg" : "updated 004 test",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/004_user_send_feedback_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCaseAndroid.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "4a93ed2c98d5bd33258c90cc65f387b920e055ff",
        "timestamp" : 1769962973000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "The `FeedbackCategory` enum has been refactored This change is reflected in the `ShareFeedbackScreen`\u000a\u000aAdditionally, Android-specific logging (`android.util.Log`) has been replaced with a common `print` statement in the `EmailLauncherUseCaseAndroid`, `WebLauncherUseCaseAndroid`, and `WhatsAppLauncherUseCaseAndroid` files.\u000a",
        "date" : "2026-02-01 21:52:53 +0530",
        "id" : "4a93ed2c98d5bd33258c90cc65f387b920e055ff",
        "msg" : "The `FeedbackCategory` enum has been refactored This change is reflected in the `ShareFeedbackScreen`",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
        ],
        "commitId" : "855e013ba71c3822d5f76bb199e8fb24d378aad2",
        "timestamp" : 1769963036000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "The `FeedbackCategory` enum has been refactored This change is reflected in the `ShareFeedbackScreen`\u000a",
        "date" : "2026-02-01 21:53:56 +0530",
        "id" : "855e013ba71c3822d5f76bb199e8fb24d378aad2",
        "msg" : "The `FeedbackCategory` enum has been refactored This change is reflected in the `ShareFeedbackScreen`",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt",
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackTicket.kt"
        ],
        "commitId" : "403b774ff4f1b9cc79f18870da6719f0549820bf",
        "timestamp" : 1769964674000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Cleaned up feedback submission code\u000a",
        "date" : "2026-02-01 22:21:14 +0530",
        "id" : "403b774ff4f1b9cc79f18870da6719f0549820bf",
        "msg" : "Refactor: Cleaned up feedback submission code",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackTicket.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "bdb14a81f1c90639d7515747ac671926e0b2055f",
        "timestamp" : 1770011640000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Cleaned up feedback submission code\u000a",
        "date" : "2026-02-02 11:24:00 +0530",
        "id" : "bdb14a81f1c90639d7515747ac671926e0b2055f",
        "msg" : "Refactor: Cleaned up feedback submission code",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
        ],
        "commitId" : "f8040ad5fb40a4f4708663b95c23300d73f5bf13",
        "timestamp" : 1770019216000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "refactor: Improve Share Feedback screen code structure and accessibility\u000a\u000a`FeedbackCategory` enum is simplified\u000a The `FeedbackItem` composable has been renamed to `QuickContactItem` for better clarity, as it represents quick contact methods.\u000a",
        "date" : "2026-02-02 13:30:16 +0530",
        "id" : "f8040ad5fb40a4f4708663b95c23300d73f5bf13",
        "msg" : "refactor: Improve Share Feedback screen code structure and accessibility",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/004_user_send_feedback_test.yaml",
          "ci-run-maestro.sh",
          ".maestro/flows/scripts/verifyZammadTicket.js"
        ],
        "commitId" : "5891a0f12ff1049d67065ec87b6e98f10e8262bf",
        "timestamp" : 1770025661000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated properties file path\u000a",
        "date" : "2026-02-02 13:47:41 +0400",
        "id" : "5891a0f12ff1049d67065ec87b6e98f10e8262bf",
        "msg" : "updated properties file path",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/scripts/verifyZammadTicket.js"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/004_user_send_feedback_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh",
          ".maestro/flows/scripts/verifyZammadTicket.js"
        ],
        "commitId" : "7655ee448f1f9f2445f2080b1adc20f3a84d51e6",
        "timestamp" : 1770026876000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated properties file path\u000a",
        "date" : "2026-02-02 14:07:56 +0400",
        "id" : "7655ee448f1f9f2445f2080b1adc20f3a84d51e6",
        "msg" : "updated properties file path",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/scripts/verifyZammadTicket.js"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh"
        ],
        "commitId" : "d13a8050ff36cbb93c2827a982baaa00fc74399a",
        "timestamp" : 1770027265000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated\u000a",
        "date" : "2026-02-02 14:14:25 +0400",
        "id" : "d13a8050ff36cbb93c2827a982baaa00fc74399a",
        "msg" : "updated",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh"
        ],
        "commitId" : "9986ef65b07678a6bc7c8d62432759ce8df4e30e",
        "timestamp" : 1770027709000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated maestro.sh file\u000a",
        "date" : "2026-02-02 14:21:49 +0400",
        "id" : "9986ef65b07678a6bc7c8d62432759ce8df4e30e",
        "msg" : "updated maestro.sh file",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-repository/log/respect-server.2026-02-01.0.log",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/log/respect-server.2026-01-29.0.log",
          "respect-lib-shared/log/respect-server.2026-01-30.0.log",
          "respect-datalayer-repository/log/respect-server.2026-01-30.0.log",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt",
          "respect-lib-shared/log/respect-server.2026-02-01.0.log"
        ],
        "commitId" : "c7493171df92798b9878f58d42464ae7e5a2d273",
        "timestamp" : 1770030819000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "chore: Add server logs to gitignore.\u000a",
        "date" : "2026-02-02 16:43:39 +0530",
        "id" : "c7493171df92798b9878f58d42464ae7e5a2d273",
        "msg" : "chore: Add server logs to gitignore.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-datalayer-repository/log/respect-server.2026-01-30.0.log"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-repository/log/respect-server.2026-02-01.0.log"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/log/respect-server.2026-01-29.0.log"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/log/respect-server.2026-02-01.0.log"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/log/respect-server.2026-01-30.0.log"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-repository/log/respect-server.2026-02-01.0.log",
          "respect-lib-shared/log/respect-server.2026-01-30.0.log",
          "respect-lib-shared/log/respect-server.2026-01-29.0.log",
          "respect-datalayer-repository/log/respect-server.2026-01-30.0.log",
          "respect-lib-shared/log/respect-server.2026-02-01.0.log"
        ],
        "commitId" : "e7192fbf75581cea38dd37065654ef5bd82ce622",
        "timestamp" : 1770031029000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "chore: Add server logs to gitignore.\u000a",
        "date" : "2026-02-02 16:47:09 +0530",
        "id" : "e7192fbf75581cea38dd37065654ef5bd82ce622",
        "msg" : "chore: Add server logs to gitignore.",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-datalayer-repository/log/respect-server.2026-02-01.0.log"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/log/respect-server.2026-02-01.0.log"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/log/respect-server.2026-01-30.0.log"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer-repository/log/respect-server.2026-01-30.0.log"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/log/respect-server.2026-01-29.0.log"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/subflows/add_person_create_account.yaml"
        ],
        "commitId" : "237f0ba51ef6e1a0f3275dc1abcaeef6dc90a7f3",
        "timestamp" : 1770036570000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated maestro.sh file\u000a",
        "date" : "2026-02-02 16:49:30 +0400",
        "id" : "237f0ba51ef6e1a0f3275dc1abcaeef6dc90a7f3",
        "msg" : "updated maestro.sh file",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/add_person_create_account.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh",
          ".maestro/flows/scripts/verifyZammadTicket.js"
        ],
        "commitId" : "b7c056400c60b78afd3f8111d33c8f10c84d74c4",
        "timestamp" : 1770038470000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated case\u000a",
        "date" : "2026-02-02 17:21:10 +0400",
        "id" : "b7c056400c60b78afd3f8111d33c8f10c84d74c4",
        "msg" : "updated case",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/scripts/verifyZammadTicket.js"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh"
        ],
        "commitId" : "49bab904229b75089fb7ba2029521e69d56453b7",
        "timestamp" : 1770039051000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated url\u000a",
        "date" : "2026-02-02 17:30:51 +0400",
        "id" : "49bab904229b75089fb7ba2029521e69d56453b7",
        "msg" : "updated url",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh",
          ".maestro/flows/scripts/verifyZammadTicket.js"
        ],
        "commitId" : "7a9ee1538b38f910f1f12bb88efd5d77d422bce8",
        "timestamp" : 1770040889000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "test cleanup\u000a",
        "date" : "2026-02-02 18:01:29 +0400",
        "id" : "7a9ee1538b38f910f1f12bb88efd5d77d422bce8",
        "msg" : "test cleanup",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/scripts/verifyZammadTicket.js"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/sharelink/LaunchSendEmailUseCase.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCaseAndroid.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/sendinvite/LaunchSendEmailAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/inviteperson/InvitePersonViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCase.kt"
        ],
        "commitId" : "d1818a9b0c5d5383004aa9d621e6a8caef66583c",
        "timestamp" : 1770098488000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Consolidate email launching logic into LaunchSendEmailUseCase.\u000a\u000aRemoved the specific `EmailLauncherUseCase` and its Android implementation. The existing `LaunchSendEmailUseCase` has been updated to handle all email launching scenarios by making the `body` and `emailId` parameters optional.\u000a\u000aThis change consolidates redundant code, allowing a single use case to manage sending emails with or without a pre-filled recipient and body. ViewModels have been updated to use the unified `LaunchSendEmailUseCase`.\u000a",
        "date" : "2026-02-03 11:31:28 +0530",
        "id" : "d1818a9b0c5d5383004aa9d621e6a8caef66583c",
        "msg" : "Refactor: Consolidate email launching logic into LaunchSendEmailUseCase.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/sendinvite/LaunchSendEmailAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/sharelink/LaunchSendEmailUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/inviteperson/InvitePersonViewModel.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/EmailLauncherUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
        ],
        "commitId" : "d7b438efa496d1f9d5fa09b2990f9230a302fb0f",
        "timestamp" : 1770287058000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: using material theme\u000a",
        "date" : "2026-02-05 15:54:18 +0530",
        "id" : "d7b438efa496d1f9d5fa09b2990f9230a302fb0f",
        "msg" : "feat: using material theme",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/README.md",
          "respect-test-end-to-end/test-description/006_user_signup_using_passkey_test_description.md",
          ".maestro/flows/004_user_send_feedback_test.yaml",
          "respect-test-end-to-end/test-description/006_002_user_send_feedback_test.md",
          ".maestro/flows/006_002_user_send_feedback_test.yaml",
          "respect-test-end-to-end/test-description/007_001_user_signup_using_passkey_test_description.md"
        ],
        "commitId" : "6982b9b5345b93fedb75a913eb056a49e72b7674",
        "timestamp" : 1771503783000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "test - updated test description\u000a",
        "date" : "2026-02-19 16:23:03 +0400",
        "id" : "6982b9b5345b93fedb75a913eb056a49e72b7674",
        "msg" : "test - updated test description",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/README.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/006_user_signup_using_passkey_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : ".maestro/flows/004_user_send_feedback_test.yaml"
          },
          {
            "editType" : "add",
            "file" : ".maestro/flows/006_002_user_send_feedback_test.yaml"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/006_002_user_send_feedback_test.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/007_001_user_signup_using_passkey_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt"
        ],
        "commitId" : "5e2515742c9f53c22a77484606cb7ca95d007c24",
        "timestamp" : 1771580037000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/noreply",
          "fullName" : "noreply"
        },
        "authorEmail" : "noreply@github.com",
        "comment" : "Update FeedbackCategory.kt\u000a",
        "date" : "2026-02-20 15:03:57 +0530",
        "id" : "5e2515742c9f53c22a77484606cb7ca95d007c24",
        "msg" : "Update FeedbackCategory.kt",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt"
        ],
        "commitId" : "5a8fb4d83be8d2a2f8489cc4ee19ba23d734562c",
        "timestamp" : 1783676454000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Remove\u000a",
        "date" : "2026-07-10 15:10:54 +0530",
        "id" : "5a8fb4d83be8d2a2f8489cc4ee19ba23d734562c",
        "msg" : "Remove",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCase.kt"
        ],
        "commitId" : "a796d8ab55a5df5b0b225da8deb01be7bb163893",
        "timestamp" : 1783922760000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Remove Zammad\u000a",
        "date" : "2026-07-13 11:36:00 +0530",
        "id" : "a796d8ab55a5df5b0b225da8deb01be7bb163893",
        "msg" : "Remove Zammad",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/FeedbackSubmittedViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/FeedbackSubmittedScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/CreateTicketUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/GetFeedbackInfoUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackTicket.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/ZammadTicketResponse.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "97509c492864da4662d4bcb64fbbfcda0f020c63",
        "timestamp" : 1783923200000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Remove Zammad\u000a",
        "date" : "2026-07-13 11:43:20 +0530",
        "id" : "97509c492864da4662d4bcb64fbbfcda0f020c63",
        "msg" : "Remove Zammad",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/CreateTicketUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackCategory.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/FeedbackTicket.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/GetFeedbackInfoUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/feedback/ZammadTicketResponse.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/build.gradle.kts",
          ".gitignore",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
        ],
        "commitId" : "d98711800f348fc1690513759541a36a2d61d2bc",
        "timestamp" : 1783923904000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Remove Zammad\u000a",
        "date" : "2026-07-13 11:55:04 +0530",
        "id" : "d98711800f348fc1690513759541a36a2d61d2bc",
        "msg" : "Remove Zammad",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : ".gitignore"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/006_002_user_send_feedback_test.md",
          "respect-test-end-to-end/test-description/007_001_user_signup_using_passkey_test_description.md"
        ],
        "commitId" : "f6c964bebe10d61d6cace43d6cd910a817782def",
        "timestamp" : 1783924225000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor\u000a",
        "date" : "2026-07-13 12:00:25 +0530",
        "id" : "f6c964bebe10d61d6cace43d6cd910a817782def",
        "msg" : "Refactor",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/006_002_user_send_feedback_test.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/007_001_user_signup_using_passkey_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/feedback/CreateTicketUseCaseImpl.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/feedback/GetFeedbackInfoUseCaseImpl.kt"
        ],
        "commitId" : "8c8cb741855106360e06c809a3885755c81afb79",
        "timestamp" : 1783924589000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor\u000a",
        "date" : "2026-07-13 12:06:29 +0530",
        "id" : "8c8cb741855106360e06c809a3885755c81afb79",
        "msg" : "Refactor",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/feedback/CreateTicketUseCaseImpl.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/feedback/GetFeedbackInfoUseCaseImpl.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/006_user_send_feedback_test.yaml",
          ".maestro/flows/006_002_user_send_feedback_test.yaml"
        ],
        "commitId" : "6920dea79eaff2307747eea0ce0b31e678185d0f",
        "timestamp" : 1784019126000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Remove `006_002_user_send_feedback_test.yaml` and replace it with a refactored `006_user_send_feedback_test.yaml` Maestro flow.\u000a",
        "date" : "2026-07-14 12:52:06 +0400",
        "id" : "6920dea79eaff2307747eea0ce0b31e678185d0f",
        "msg" : "Remove `006_002_user_send_feedback_test.yaml` and replace it with a refactored `006_user_send_feedback_test.yaml` Maestro flow.",
        "paths" : [
          {
            "editType" : "delete",
            "file" : ".maestro/flows/006_002_user_send_feedback_test.yaml"
          },
          {
            "editType" : "add",
            "file" : ".maestro/flows/006_user_send_feedback_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/006_user_send_feedback_test.yaml"
        ],
        "commitId" : "cfb9502d3e896693ceb9725973b27d9dd4924249",
        "timestamp" : 1784020140000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Update the `006_user_send_feedback_test.yaml` Maestro flow to change the visibility assertion from \"UstadMobile/Respect\" to \"Welcome to discussions!\" following the \"Public forum\" tap action.\u000a",
        "date" : "2026-07-14 13:09:00 +0400",
        "id" : "cfb9502d3e896693ceb9725973b27d9dd4924249",
        "msg" : "Update the `006_user_send_feedback_test.yaml` Maestro flow to change the visibility assertion from \"UstadMobile/Respect\" to \"Welcome to discussions!\" following the \"Public forum\" tap action.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/006_user_send_feedback_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js",
          ".maestro/video-downloader/ci-run-cypress.sh"
        ],
        "commitId" : "7cb902c86e60d47fcaa495751b9661df266087f6",
        "timestamp" : 1784027938000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "changes in `.maestro/video-downloader/ci-run-cypress.sh` and `.maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js`.\u000a",
        "date" : "2026-07-14 15:18:58 +0400",
        "id" : "7cb902c86e60d47fcaa495751b9661df266087f6",
        "msg" : "changes in `.maestro/video-downloader/ci-run-cypress.sh` and `.maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js`.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/ci-run-cypress.sh"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js",
          ".maestro/video-downloader/ci-run-cypress.sh"
        ],
        "commitId" : "42c3990eae1df7450415bbe343a3b47a2fe86601",
        "timestamp" : 1784030533000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Summarize the changes in `.maestro/video-downloader/ci-run-cypress.sh` and `.maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js`.\u000a",
        "date" : "2026-07-14 16:02:13 +0400",
        "id" : "42c3990eae1df7450415bbe343a3b47a2fe86601",
        "msg" : "Summarize the changes in `.maestro/video-downloader/ci-run-cypress.sh` and `.maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js`.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/ci-run-cypress.sh"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/scripts/verifyZammadTicket.js"
        ],
        "commitId" : "470a8f86048bebaea6ad37e332a2643882fb3706",
        "timestamp" : 1784030708000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Delete `.maestro/flows/scripts/verifyZammadTicket.js` and its associated logic for validating Zammad environment variables and verifying support ticket creation via the API.\u000a",
        "date" : "2026-07-14 16:05:08 +0400",
        "id" : "470a8f86048bebaea6ad37e332a2643882fb3706",
        "msg" : "Delete `.maestro/flows/scripts/verifyZammadTicket.js` and its associated logic for validating Zammad environment variables and verifying support ticket creation via the API.",
        "paths" : [
          {
            "editType" : "delete",
            "file" : ".maestro/flows/scripts/verifyZammadTicket.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js",
          ".maestro/video-downloader/ci-run-cypress.sh"
        ],
        "commitId" : "7b2d6625eaaed04d55771f949cffdf73f592e76e",
        "timestamp" : 1784031006000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Improve the robustness and reliability of the Maestro video downloader script and Cypress extraction logic.\u000a",
        "date" : "2026-07-14 16:10:06 +0400",
        "id" : "7b2d6625eaaed04d55771f949cffdf73f592e76e",
        "msg" : "Improve the robustness and reliability of the Maestro video downloader script and Cypress extraction logic.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/ci-run-cypress.sh"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh",
          ".maestro/flows/001_002_add_user_direct_test.yaml",
          ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml",
          ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml"
        ],
        "commitId" : "596c98835491f4252e7ad3cbc9ccd873c60c567e",
        "timestamp" : 1784031285000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Add `test` tag to Maestro flows and update `ci-run-maestro.sh` to exclude them from CI runs.\u000a",
        "date" : "2026-07-14 16:14:45 +0400",
        "id" : "596c98835491f4252e7ad3cbc9ccd873c60c567e",
        "msg" : "Add `test` tag to Maestro flows and update `ci-run-maestro.sh` to exclude them from CI runs.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_002_add_user_direct_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/cypress.config.js"
        ],
        "commitId" : "7ccafc8cfee40fe841b8760e130bb3c1318ca100",
        "timestamp" : 1784033008000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Add a logging task to the Cypress configuration for the video downloader.\u000a",
        "date" : "2026-07-14 16:43:28 +0400",
        "id" : "7ccafc8cfee40fe841b8760e130bb3c1318ca100",
        "msg" : "Add a logging task to the Cypress configuration for the video downloader.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/cypress.config.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh",
          ".maestro/flows/001_002_add_user_direct_test.yaml",
          ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml",
          ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml"
        ],
        "commitId" : "93c8ccec19e6ce6b015e2b7088bf01ff96a83083",
        "timestamp" : 1784034484000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Remove `test` tags from Maestro flows and update CI script to include all tests.\u000a",
        "date" : "2026-07-14 17:08:04 +0400",
        "id" : "93c8ccec19e6ce6b015e2b7088bf01ff96a83083",
        "msg" : "Remove `test` tags from Maestro flows and update CI script to include all tests.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_002_add_user_direct_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/package.json",
          ".maestro/video-downloader/ci-run-cypress.sh"
        ],
        "commitId" : "21c5a8affaeab4ae284f0253444697195d601497",
        "timestamp" : 1784102409000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Update `cypress` version to 15.18.1 and clean up comments in the CI script.\u000a",
        "date" : "2026-07-15 12:00:09 +0400",
        "id" : "21c5a8affaeab4ae284f0253444697195d601497",
        "msg" : "Update `cypress` version to 15.18.1 and clean up comments in the CI script.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/package.json"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/ci-run-cypress.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/ci-run-cypress.sh"
        ],
        "commitId" : "5c35c4497aca0b829f2abcc18552777b96228bbd",
        "timestamp" : 1784119814000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Add debug logging for Node.js, npm, and environment path in `ci-run-cypress.sh`.\u000a",
        "date" : "2026-07-15 16:50:14 +0400",
        "id" : "5c35c4497aca0b829f2abcc18552777b96228bbd",
        "msg" : "Add debug logging for Node.js, npm, and environment path in `ci-run-cypress.sh`.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/ci-run-cypress.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/ci-run-cypress.sh"
        ],
        "commitId" : "4b9bc829eb844efb49c096ea75a5cbbb80184a4d",
        "timestamp" : 1784136523000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Update `ci-run-cypress.sh` to use Node.js version 20.20.2 via NVM.\u000a",
        "date" : "2026-07-15 21:28:43 +0400",
        "id" : "4b9bc829eb844efb49c096ea75a5cbbb80184a4d",
        "msg" : "Update `ci-run-cypress.sh` to use Node.js version 20.20.2 via NVM.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/ci-run-cypress.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/ci-run-cypress.sh"
        ],
        "commitId" : "70fa0fa6824295bc4c8dc8b53987c08a1c1ca927",
        "timestamp" : 1784138448000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Remove Node version management commands from the Cypress CI script.\u000a",
        "date" : "2026-07-15 22:00:48 +0400",
        "id" : "70fa0fa6824295bc4c8dc8b53987c08a1c1ca927",
        "msg" : "Remove Node version management commands from the Cypress CI script.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/ci-run-cypress.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/ci-run-cypress.sh"
        ],
        "commitId" : "da4c1bf3617c55aa899f59ba53cde274f2d2b18f",
        "timestamp" : 1784183145000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Configure Node.js version 20.20.2 using NVM in the Cypress CI script.\u000a",
        "date" : "2026-07-16 10:25:45 +0400",
        "id" : "da4c1bf3617c55aa899f59ba53cde274f2d2b18f",
        "msg" : "Configure Node.js version 20.20.2 using NVM in the Cypress CI script.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/ci-run-cypress.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js"
        ],
        "commitId" : "4f9b5317048ff593436053170658a531554bd0f4",
        "timestamp" : 1784202446000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Update `extract-maestro-video-urls.cy.js` to include a pause during OTP polling and improve code comments.\u000a",
        "date" : "2026-07-16 15:47:26 +0400",
        "id" : "4f9b5317048ff593436053170658a531554bd0f4",
        "msg" : "Update `extract-maestro-video-urls.cy.js` to include a pause during OTP polling and improve code comments.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/video-downloader/cypress/e2e/extract-maestro-video-urls.cy.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/002_browse_lessons_test.yaml",
          ".maestro/flows/scripts/school_init.js",
          ".maestro/flows/001_002_add_user_direct_test.yaml",
          ".maestro/flows/subflows/teardown.yaml",
          ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml",
          "respect-lib-opds-model/build.gradle.kts",
          "gradle.properties",
          ".maestro/flows/001_003_login_using_school_link_test.yaml",
          ".maestro/README.md",
          ".maestro/flows/scripts/teardown.js",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml",
          "ci-run-maestro.sh",
          "README_ADD_YOUR_APP.md",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/e2eartifactupload/E2EArtifactUploadUseCaseClient.kt"
        ],
        "commitId" : "64127779cc82e240cb749968595f32363e65c11e",
        "timestamp" : 1784478624000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Updates for improved local on-prem testing\u000a\u000aFix ci-run-maestro to run shutdowns properly (change to get database copies had broken this)\u000a\u000aImprove e2e artifact uploader to wait for connectivity (avoid potential fail when airplane mode was on and connectivity is not yet ready)\u000a\u000aImprove ci-run-maestro scripts to allow for extra args/tags\u000a",
        "date" : "2026-07-19 20:30:24 +0400",
        "id" : "64127779cc82e240cb749968595f32363e65c11e",
        "msg" : "Updates for improved local on-prem testing",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_003_login_using_school_link_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/002_browse_lessons_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/README.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/e2eartifactupload/E2EArtifactUploadUseCaseClient.kt"
          },
          {
            "editType" : "edit",
            "file" : "README_ADD_YOUR_APP.md"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_002_add_user_direct_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/scripts/teardown.js"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          },
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/teardown.yaml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/scripts/school_init.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt",
          "respect-lib-xapi-nanohttpd/src/commonMain/kotlin/world/respect/lib/xapi/nanohttpd/XapiNanoHttpdApp.kt",
          ".maestro/flows/002_browse_lessons_test.yaml",
          "respect-app-compose/src/androidMain/kotlin/world/respect/WebViewActivity.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "ci-run-maestro.sh",
          "respect-lib-xapi-nanohttpd/build.gradle.kts"
        ],
        "commitId" : "4bf198b5b4957b58d0f8ba6e597f88daf76c4067",
        "timestamp" : 1784553628000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Maestro device offline reproduction with additional logging.\u000a",
        "date" : "2026-07-20 17:20:28 +0400",
        "id" : "4bf198b5b4957b58d0f8ba6e597f88daf76c4067",
        "msg" : "Maestro device offline reproduction with additional logging.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-nanohttpd/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/002_browse_lessons_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-nanohttpd/src/commonMain/kotlin/world/respect/lib/xapi/nanohttpd/XapiNanoHttpdApp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/WebViewActivity.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/lesson001.json",
          "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/launchable-app.json",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/licenses/GetLicenseLabelUseCase.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumSubject.kt"
        ],
        "commitId" : "d037651d1f686fda144c3a6195f9aaeda576ceb7",
        "timestamp" : 1784626851000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/anugraha",
          "fullName" : "Anugraha"
        },
        "authorEmail" : "anugraha@sutara.org",
        "comment" : "update learning unit detail screen initial commit\u000a",
        "date" : "2026-07-21 15:10:51 +0530",
        "id" : "d037651d1f686fda144c3a6195f9aaeda576ceb7",
        "msg" : "update learning unit detail screen initial commit",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/licenses/GetLicenseLabelUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/lesson001.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumSubject.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/launchable-app.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
        ],
        "commitId" : "93c593d02a95c94c261a59acb5c91fa96636226f",
        "timestamp" : 1784627342000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Add highlight card functionality and related links in AppsDetailScreen\u000a",
        "date" : "2026-07-21 15:19:02 +0530",
        "id" : "93c593d02a95c94c261a59acb5c91fa96636226f",
        "msg" : "Add highlight card functionality and related links in AppsDetailScreen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ci-run-maestro.sh"
        ],
        "commitId" : "9ed993bc3a371f9ea9d89f459a14fbe56ea6f9c3",
        "timestamp" : 1784627738000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Remove extra character in wrong place in ci-run-maestro.sh script.\u000a",
        "date" : "2026-07-21 13:55:38 +0400",
        "id" : "9ed993bc3a371f9ea9d89f459a14fbe56ea6f9c3",
        "msg" : "Remove extra character in wrong place in ci-run-maestro.sh script.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/Application.kt",
          "ci-run-maestro.sh",
          "ci-run-test-server.sh",
          "respect-server/src/main/kotlin/world/respect/server/AppConfigExt.kt"
        ],
        "commitId" : "bf151ed7ab83bb26b5e5459e195a239c7f2c3b22",
        "timestamp" : 1784663485000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update version of TestServerController.\u000a",
        "date" : "2026-07-21 23:51:25 +0400",
        "id" : "bf151ed7ab83bb26b5e5459e195a239c7f2c3b22",
        "msg" : "Update version of TestServerController.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/AppConfigExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-test-server.sh"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-maestro.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/README.md",
          "ci-run-maestro.sh",
          "ci-run-test-server.sh",
          "ci-run-e2e-tests.sh"
        ],
        "commitId" : "a73780ed5a127e5a62b391ebdbefc3145f29f2e3",
        "timestamp" : 1784709847000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Rename ci-run-maestro script to ci-run-e2e-tests.sh\u000a\u000aUpdate to latest testserver controller\u000aTidy up all e2e output into single build/ci-e2e directory.\u000a",
        "date" : "2026-07-22 12:44:07 +0400",
        "id" : "a73780ed5a127e5a62b391ebdbefc3145f29f2e3",
        "msg" : "Rename ci-run-maestro script to ci-run-e2e-tests.sh",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ci-run-test-server.sh"
          },
          {
            "editType" : "delete",
            "file" : "ci-run-maestro.sh"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/README.md"
          },
          {
            "editType" : "add",
            "file" : "ci-run-e2e-tests.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/subflows/e2e_artifact_upload.yaml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/testing/SendDbToServerScreen.kt"
        ],
        "commitId" : "5d66aa3c0cac9af39086085837fe255c5fc4cd7d",
        "timestamp" : 1784722521000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update SendDbToServerScreen and e2e_artifact_upload to avoid artifact upload failure when no db created yet blocking server shutdown.\u000a",
        "date" : "2026-07-22 16:15:21 +0400",
        "id" : "5d66aa3c0cac9af39086085837fe255c5fc4cd7d",
        "msg" : "Update SendDbToServerScreen and e2e_artifact_upload to avoid artifact upload failure when no db created yet blocking server shutdown.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/e2e_artifact_upload.yaml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/testing/SendDbToServerScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/Application.kt"
        ],
        "commitId" : "1eaedfd76f545707878e38ec564d7cde54044898",
        "timestamp" : 1784724318000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix Application.kt to create required data directory\u000a",
        "date" : "2026-07-22 16:45:18 +0400",
        "id" : "1eaedfd76f545707878e38ec564d7cde54044898",
        "msg" : "Fix Application.kt to create required data directory",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/Application.kt",
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared-se/src/commonMain/kotlin/world/respect/sharedse/domain/account/authenticatepassword/AuthenticatePasswordUseCaseDbImpl.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/gettokenanduser/GetTokenAndUserProfileWithCredentialUseCaseClient.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/login/LoginViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/exception/ExceptionWithUiText.kt",
          "respect-lib-util/src/commonMain/kotlin/world/respect/libutil/util/throwable/ExceptionWithHttpStatusCode.kt"
        ],
        "commitId" : "cb6afd6a1d76eb2c1a8fc2a7db0ba5573eaeb260",
        "timestamp" : 1784732644000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update login to use auto-retry and show appropriate error messages.\u000a",
        "date" : "2026-07-22 19:04:04 +0400",
        "id" : "cb6afd6a1d76eb2c1a8fc2a7db0ba5573eaeb260",
        "msg" : "Update login to use auto-retry and show appropriate error messages.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/exception/ExceptionWithUiText.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/login/LoginViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-util/src/commonMain/kotlin/world/respect/libutil/util/throwable/ExceptionWithHttpStatusCode.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared-se/src/commonMain/kotlin/world/respect/sharedse/domain/account/authenticatepassword/AuthenticatePasswordUseCaseDbImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/gettokenanduser/GetTokenAndUserProfileWithCredentialUseCaseClient.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/LogTags.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/list/PersonListViewModel.kt"
        ],
        "commitId" : "1737734685efcc2457b5612ab841e824e10625bc",
        "timestamp" : 1784796984000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update PersonListViewModel: don't load from datasource when not needed on clicking an item in the list in browse mode.\u000a",
        "date" : "2026-07-23 12:56:24 +0400",
        "id" : "1737734685efcc2457b5612ab841e824e10625bc",
        "msg" : "Update PersonListViewModel: don't load from datasource when not needed on clicking an item in the list in browse mode.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/list/PersonListViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/LogTags.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/Constants.kt"
        ],
        "commitId" : "ef2f4319013473b008b4df5d8be46bd243fdc1ac",
        "timestamp" : 1784797367000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Removed unused Constants.kt (from Android Studio project template).\u000a",
        "date" : "2026-07-23 13:02:47 +0400",
        "id" : "ef2f4319013473b008b4df5d8be46bd243fdc1ac",
        "msg" : "Removed unused Constants.kt (from Android Studio project template).",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/Constants.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/opds/adapters/TestOpdsPublicationEntityAdapter.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/adapters/OpdsPublicationEntityAdapter.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/daos/ReadiumSubjectEntityDao.kt",
          "respect-lib-opds-model/src/jvmTest/resources/lesson001.json",
          "respect-datalayer-repository/src/jvmTest/kotlin/world/respect/datalayer/repository/opds/OpdsRespectRepositoryIntegrationTest.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectGenderExposedDropDownMenuField.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/UstadExposedDropDownMenuField.kt",
          "respect-datalayer-db/src/jvmTest/resources/world/respect/datalayer/db/opds/adapters/lesson001.json",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/OpdsPublicationDataSourceDb.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/adapters/ReadiumSubjectEntityAdapters.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/adapters/OpdsFeedAdapter.kt",
          "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/opds/TestOpdsStorage.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/OpdsFeedDataSourceDb.kt",
          "respect-lib-opds-model/src/jvmTest/kotlin/world/respect/lib/opds/model/OpdsSerializerTest.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/RespectSchoolDatabase.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumSubject.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/adapters/OpdsGroupAdapter.kt"
        ],
        "commitId" : "ec6a56271e863c32822010b12d4cb234e05d8eb8",
        "timestamp" : 1784874064000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix Opds Subject storage to/from database.\u000a",
        "date" : "2026-07-24 10:21:04 +0400",
        "id" : "ec6a56271e863c32822010b12d4cb234e05d8eb8",
        "msg" : "Fix Opds Subject storage to/from database.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/UstadExposedDropDownMenuField.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumSubject.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/adapters/OpdsGroupAdapter.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/daos/ReadiumSubjectEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/OpdsPublicationDataSourceDb.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/opds/TestOpdsStorage.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/opds/adapters/TestOpdsPublicationEntityAdapter.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/jvmTest/resources/lesson001.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/jvmTest/kotlin/world/respect/datalayer/repository/opds/OpdsRespectRepositoryIntegrationTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectGenderExposedDropDownMenuField.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/jvmTest/kotlin/world/respect/lib/opds/model/OpdsSerializerTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/adapters/OpdsFeedAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/jvmTest/resources/world/respect/datalayer/db/opds/adapters/lesson001.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/OpdsFeedDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/adapters/OpdsPublicationEntityAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/RespectSchoolDatabase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/opds/adapters/ReadiumSubjectEntityAdapters.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/detail/AssignmentDetailScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectDataLoadHost.kt"
        ],
        "commitId" : "d66af6b934f7177119ba8b2260bd8e9b86d91e9a",
        "timestamp" : 1784882764000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add RespectDataLoadHost component.\u000a",
        "date" : "2026-07-24 12:46:04 +0400",
        "id" : "d66af6b934f7177119ba8b2260bd8e9b86d91e9a",
        "msg" : "Add RespectDataLoadHost component.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/detail/AssignmentDetailScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectDataLoadHost.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectDataLoadHost.kt",
          "respect-lib-dataloadstate/src/commonMain/kotlin/world/respect/lib/dataloadstate/ext/DataLoadStateExt.kt"
        ],
        "commitId" : "60f52d7a12e3f8c3d2207c4a94df1d2bbb82f774",
        "timestamp" : 1784885405000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update RespectDataLoadHost and DataLoadExtension functions to handle not found scenarios.\u000a",
        "date" : "2026-07-24 13:30:05 +0400",
        "id" : "60f52d7a12e3f8c3d2207c4a94df1d2bbb82f774",
        "msg" : "Update RespectDataLoadHost and DataLoadExtension functions to handle not found scenarios.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectDataLoadHost.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-dataloadstate/src/commonMain/kotlin/world/respect/lib/dataloadstate/ext/DataLoadStateExt.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
        ],
        "commitId" : "5a8fdb010ad03680c4f6559a5f0fb090c310e2cd",
        "timestamp" : 1785068189000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Minor adjustments to learning unit detail screen.\u000a",
        "date" : "2026-07-26 16:16:29 +0400",
        "id" : "5a8fdb010ad03680c4f6559a5f0fb090c310e2cd",
        "msg" : "Minor adjustments to learning unit detail screen.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/Application.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoConstants.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/ext/DemoAppUrlExt.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
        ],
        "commitId" : "f44a7ef464c4114d0da4cbd16d20c3c8b760c027",
        "timestamp" : 1785070113000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "ADd demo app route.\u000a",
        "date" : "2026-07-26 16:48:33 +0400",
        "id" : "f44a7ef464c4114d0da4cbd16d20c3c8b760c027",
        "msg" : "ADd demo app route.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/ext/DemoAppUrlExt.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoConstants.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/ext/DemoAppUrlExt.kt",
          "respect-server/src/main/resources/demoapp/app_icon.png"
        ],
        "commitId" : "59c3c6039b76e19c269ac371cd5c519b09bd851d",
        "timestamp" : 1785073901000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Set icon on demo app\u000a",
        "date" : "2026-07-26 17:51:41 +0400",
        "id" : "59c3c6039b76e19c269ac371cd5c519b09bd851d",
        "msg" : "Set icon on demo app",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/ext/DemoAppUrlExt.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/demoapp/app_icon.png"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/Application.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
        ],
        "commitId" : "5f3bd1a2f30109d8c34ff7f45df3bd4f1d320627",
        "timestamp" : 1785075828000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add demo launchable app to respect-server.\u000a",
        "date" : "2026-07-26 18:23:48 +0400",
        "id" : "5f3bd1a2f30109d8c34ff7f45df3bd4f1d320627",
        "msg" : "Add demo launchable app to respect-server.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/lesson001.json",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/default-catalog.json",
          "respect-app-compose/src/androidMain/res/raw/license_label_json",
          "respect-app-compose/src/androidMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCaseAndroid.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/Lesson-manifest.json",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/composeResources/drawable/ic_google_play_badge.png",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/license/LicenseLabelEntry.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCase.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/launchable-app.json"
        ],
        "commitId" : "58255a68b86a0a9275cf71b7a69c3014e4d3fcc7",
        "timestamp" : 1785130290000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Added Highlight card, Google play nad license label functionality and update AppsDetailScreen\u000a",
        "date" : "2026-07-27 11:01:30 +0530",
        "id" : "58255a68b86a0a9275cf71b7a69c3014e4d3fcc7",
        "msg" : "Added Highlight card, Google play nad license label functionality and update AppsDetailScreen",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/res/raw/license_label_json"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/launchable-app.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/default-catalog.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/lesson001.json"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/Lesson-manifest.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/composeResources/drawable/ic_google_play_badge.png"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/license/LicenseLabelEntry.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/Application.kt",
          "respect-server/src/main/resources/demoapp/credits.txt",
          "respect-server/src/main/resources/demoapp/grade.jpg",
          "respect-server/src/main/resources/demoapp/books.png",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
        ],
        "commitId" : "6a2cbabf73b261ee3a265a50f5f97eb773fee32e",
        "timestamp" : 1785132247000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add icons for collections in demo app.\u000a",
        "date" : "2026-07-27 10:04:07 +0400",
        "id" : "6a2cbabf73b261ee3a265a50f5f97eb773fee32e",
        "msg" : "Add icons for collections in demo app.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/demoapp/credits.txt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/demoapp/books.png"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/demoapp/grade.jpg"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
        ],
        "commitId" : "8a30a972b9513ccf12065e76d6f6cc345a79d2ef",
        "timestamp" : 1785133145000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Added Highlight card, Google play nad license label functionality and update AppsDetailScreen\u000a",
        "date" : "2026-07-27 11:49:05 +0530",
        "id" : "8a30a972b9513ccf12065e76d6f6cc345a79d2ef",
        "msg" : "Added Highlight card, Google play nad license label functionality and update AppsDetailScreen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "gradle/libs.versions.toml",
          "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXml.kt",
          "respect-lib-xapi-core/src/jvmTest/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXmlTest.kt"
        ],
        "commitId" : "08f251ef76f44a7050f44c4828105ebf5ab90d60",
        "timestamp" : 1785136862000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Pre-modularization.\u000a",
        "date" : "2026-07-27 11:21:02 +0400",
        "id" : "08f251ef76f44a7050f44c4828105ebf5ab90d60",
        "msg" : "Pre-modularization.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXml.kt"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-xapi-core/src/jvmTest/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXmlTest.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/icon.png",
          "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/lesson001.json",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/examples/index.json"
        ],
        "commitId" : "80699b573cad23b3d2139277402fb7cefa570c51",
        "timestamp" : 1785136894000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/anugraha",
          "fullName" : "Anugraha"
        },
        "authorEmail" : "anugraha@sutara.org",
        "comment" : "update lesson detail screen with license and subject tag\u000a",
        "date" : "2026-07-27 12:51:34 +0530",
        "id" : "80699b573cad23b3d2139277402fb7cefa570c51",
        "msg" : "update lesson detail screen with license and subject tag",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/lesson001.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/icon.png"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/examples/index.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
        ],
        "commitId" : "8db3c8bd46886e0b937ff8e037aac2589aa6bf16",
        "timestamp" : 1785138118000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Update license label in AppsDetailScreen and modify string resource for clarity\u000a",
        "date" : "2026-07-27 13:11:58 +0530",
        "id" : "8db3c8bd46886e0b937ff8e037aac2589aa6bf16",
        "msg" : "Update license label in AppsDetailScreen and modify string resource for clarity",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/licenses/GetLicenseLabelUseCase.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
        ],
        "commitId" : "a81d67535308ffd0a3f0627b307d332459d58e9c",
        "timestamp" : 1785141561000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/anugraha",
          "fullName" : "Anugraha"
        },
        "authorEmail" : "anugraha@sutara.org",
        "comment" : "merge dev-learning-unit branch to update-learning-unit-detail-screen to use getLicenseLabelUseCase\u000a",
        "date" : "2026-07-27 14:09:21 +0530",
        "id" : "a81d67535308ffd0a3f0627b307d332459d58e9c",
        "msg" : "merge dev-learning-unit branch to update-learning-unit-detail-screen to use getLicenseLabelUseCase",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/licenses/GetLicenseLabelUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
        ],
        "commitId" : "054b9391ccac065cb466b3e4139475f85571e303",
        "timestamp" : 1785142645000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/anugraha",
          "fullName" : "Anugraha"
        },
        "authorEmail" : "anugraha@sutara.org",
        "comment" : "refactor\u000a",
        "date" : "2026-07-27 14:27:25 +0530",
        "id" : "054b9391ccac065cb466b3e4139475f85571e303",
        "msg" : "refactor",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/launchable-app.json",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
        ],
        "commitId" : "ac3317c8908ac07a72c25812c0e20d7d9748f145",
        "timestamp" : 1785149507000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Enhance AppsDetailScreen with app description and update license button text for clarity\u000a",
        "date" : "2026-07-27 16:21:47 +0530",
        "id" : "ac3317c8908ac07a72c25812c0e20d7d9748f145",
        "msg" : "Enhance AppsDetailScreen with app description and update license button text for clarity",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/launchable-app.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
        ],
        "commitId" : "b896f8fc02e435f8b036a8d750a90ed9e7725a67",
        "timestamp" : 1785149808000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/anugraha",
          "fullName" : "Anugraha"
        },
        "authorEmail" : "anugraha@sutara.org",
        "comment" : "Refactor LearningUnitDetail Screen\u000a",
        "date" : "2026-07-27 16:26:48 +0530",
        "id" : "b896f8fc02e435f8b036a8d750a90ed9e7725a67",
        "msg" : "Refactor LearningUnitDetail Screen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app-android/src/main/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-test-resources/build.gradle.kts",
          "respect-lib-primarykeygen/build.gradle.kts",
          "app-android/build.gradle.kts",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/report/query/RunReportUseCaseDatabaseImpl.kt",
          "respect-lib-ihttp-okhttp/build.gradle.kts",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectImageSelectButton.kt",
          "respect-lib-ihttp-core/build.gradle.kts",
          "respect-datalayer-http/build.gradle.kts",
          "respect-lib-xapi-ipc-client/build.gradle.kts",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/report/list/ReportTemplateListScreen.kt",
          "gradle/libs.versions.toml",
          "respect-lib-util/build.gradle.kts",
          "respect-lib-dataloadstate/build.gradle.kts",
          "respect-credentials/src/commonMain/kotlin/world/respect/credentials/passkey/request/CreatePublicKeyCredentialCreationOptionsJsonUseCase.kt",
          "app-android/src/main/AndroidManifest.xml",
          "respect-lib-xapi-ipc-server/build.gradle.kts",
          "respect-lib-xxhash/build.gradle.kts",
          "respect-lib-ihttp-iostreams/build.gradle.kts",
          "respect-lib-xapi-core/build.gradle.kts",
          "respect-app-compose/src/androidMain/AndroidManifest.xml",
          "respect-credentials/build.gradle.kts",
          "respect-lib-xapi-ipc-shared/build.gradle.kts",
          "respect-datalayer-db/build.gradle.kts",
          "respect-lib-serializers/build.gradle.kts",
          "respect-app-compose/proguard-rules.pro",
          "app-android/proguard-rules.pro",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/RespectImageSelectButton.android.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/report/detail/ReportDetailViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/WebViewActivity.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/report/list/ReportListViewModel.kt",
          "app-android/src/main/kotlin/world/respect/RespectApp.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/images/RespectImage.android.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/report/list/ReportListScreen.kt",
          "respect-lib-test/build.gradle.kts",
          "respect-lib-cache/build.gradle.kts",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/app/AppIcon.android.kt",
          "respect-server/build.gradle.kts",
          "respect-lib-shared/build.gradle.kts",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/report/query/RunReportUseCase.kt",
          "gradle/wrapper/gradle-wrapper.properties",
          "respect-lib-ihttp-nanohttpd/build.gradle.kts",
          "respect-datalayer/build.gradle.kts",
          "app-android/src/main/kotlin/world/respect/AbstractAppActivity.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppActivity.kt",
          "respect-app-compose/build.gradle.kts",
          "respect-datalayer-repository/build.gradle.kts",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AbstractAppActivity.kt",
          "app-android/src/main/kotlin/world/respect/MainActivity.kt",
          "settings.gradle.kts",
          "respect-app-compose/src/desktopMain/kotlin/world/respect/app/components/RespectImageSelectButton.desktop.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/LocalAppLocale.android.kt",
          "respect-lib-opds-model/build.gradle.kts",
          "respect-app-compose/src/androidMain/kotlin/world/respect/RespectApp.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/report/list/ReportTemplateListViewModel.kt",
          "gradle.properties",
          "respect-lib-shared-se/build.gradle.kts",
          "respect-app-compose/src/androidMain/kotlin/world/respect/MainActivity.kt",
          "respect-lib-xapi-nanohttpd/build.gradle.kts"
        ],
        "commitId" : "934467558254bcb1d49d234badef303bc70c02da",
        "timestamp" : 1785161561000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update to AGP9 and Kotlin 2.4.10\u000a",
        "date" : "2026-07-27 18:12:41 +0400",
        "id" : "934467558254bcb1d49d234badef303bc70c02da",
        "msg" : "Update to AGP9 and Kotlin 2.4.10",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-ihttp-nanohttpd/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "app-android/src/main/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xxhash/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-ihttp-iostreams/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-util/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared-se/build.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/proguard-rules.pro"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/report/query/RunReportUseCaseDatabaseImpl.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AbstractAppActivity.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/RespectApp.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppActivity.kt"
          },
          {
            "editType" : "add",
            "file" : "app-android/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/report/list/ReportListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/report/list/ReportTemplateListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-credentials/src/commonMain/kotlin/world/respect/credentials/passkey/request/CreatePublicKeyCredentialCreationOptionsJsonUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/desktopMain/kotlin/world/respect/app/components/RespectImageSelectButton.desktop.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-test-resources/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-ipc-server/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-core/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "app-android/src/main/kotlin/world/respect/MainActivity.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-ipc-client/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/build.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/AndroidManifest.xml"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/LocalAppLocale.android.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-dataloadstate/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-ihttp-okhttp/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-primarykeygen/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "app-android/src/main/kotlin/world/respect/RespectApp.kt"
          },
          {
            "editType" : "add",
            "file" : "app-android/src/main/AndroidManifest.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/report/query/RunReportUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectImageSelectButton.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-credentials/build.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/MainActivity.kt"
          },
          {
            "editType" : "edit",
            "file" : "gradle/wrapper/gradle-wrapper.properties"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-ipc-shared/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/app/AppIcon.android.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/report/list/ReportTemplateListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/report/list/ReportListViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "app-android/src/main/kotlin/world/respect/AbstractAppActivity.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/build.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/RespectImageSelectButton.android.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/report/detail/ReportDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-test/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-ihttp-core/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/images/RespectImage.android.kt"
          },
          {
            "editType" : "add",
            "file" : "app-android/proguard-rules.pro"
          },
          {
            "editType" : "edit",
            "file" : "settings.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/WebViewActivity.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-nanohttpd/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-serializers/build.gradle.kts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-server/src/main/resources/http/respect-ds/case_valid/default-catalog.json",
          "respect-server/src/main/resources/http/respect-ds/case_valid/Lesson-manifest.json",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
        ],
        "commitId" : "269eaa043a99bfd64bcd9d19e936f93c45e459f1",
        "timestamp" : 1785217886000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor AppsDetailScreen and ViewModel for improved clarity and functionality; update app titles and string resources\u000a",
        "date" : "2026-07-28 11:21:26 +0530",
        "id" : "269eaa043a99bfd64bcd9d19e936f93c45e459f1",
        "msg" : "Refactor AppsDetailScreen and ViewModel for improved clarity and functionality; update app titles and string resources",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/default-catalog.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/Lesson-manifest.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/002_browse_lessons_test.yaml",
          ".maestro/flows/002_002_browse_demo_app_test.yaml",
          ".maestro/flows/002_001_browse_lessons_test.yaml"
        ],
        "commitId" : "c5014adca1b80bcb5264408dae036543de7a908a",
        "timestamp" : 1785223636000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Rename `002_browse_lessons_test.yaml` to `002_001_browse_lessons_test.yaml` and add a new Maestro test flow `002_002_browse_demo_app_test.yaml` to verify the \"Demo Launchable App\" functionality, including metadata verification and lesson navigation.\u000a",
        "date" : "2026-07-28 11:27:16 +0400",
        "id" : "c5014adca1b80bcb5264408dae036543de7a908a",
        "msg" : "Rename `002_browse_lessons_test.yaml` to `002_001_browse_lessons_test.yaml` and add a new Maestro test flow `002_002_browse_demo_app_test.yaml` to verify the \"Demo Launchable App\" functionality, including metadata verification and lesson navigation.",
        "paths" : [
          {
            "editType" : "add",
            "file" : ".maestro/flows/002_001_browse_lessons_test.yaml"
          },
          {
            "editType" : "add",
            "file" : ".maestro/flows/002_002_browse_demo_app_test.yaml"
          },
          {
            "editType" : "delete",
            "file" : ".maestro/flows/002_browse_lessons_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".gitignore"
        ],
        "commitId" : "5cd915bfed64510e1b7314bdcca1ce950719d11c",
        "timestamp" : 1785223688000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Update `.gitignore` to ignore the `.maestro/flows/.maestro/screenshots` directory.\u000a",
        "date" : "2026-07-28 11:28:08 +0400",
        "id" : "5cd915bfed64510e1b7314bdcca1ce950719d11c",
        "msg" : "Update `.gitignore` to ignore the `.maestro/flows/.maestro/screenshots` directory.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".gitignore"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/README.md",
          "app-android/src/main/AndroidManifest.xml",
          "ci-run-e2e-tests.sh"
        ],
        "commitId" : "50f42284321439808b17dea37136d8db2cf9510d",
        "timestamp" : 1785224026000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update e2e testing script and doc to use new APK location.\u000a",
        "date" : "2026-07-28 11:33:46 +0400",
        "id" : "50f42284321439808b17dea37136d8db2cf9510d",
        "msg" : "Update e2e testing script and doc to use new APK location.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/README.md"
          },
          {
            "editType" : "edit",
            "file" : "ci-run-e2e-tests.sh"
          },
          {
            "editType" : "edit",
            "file" : "app-android/src/main/AndroidManifest.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/002_browse_lessons_test.yaml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectImageSelectButton.kt",
          "gradle.properties"
        ],
        "commitId" : "73d45e9fa1c3d68e110c9417186f87388b6dccff",
        "timestamp" : 1785225773000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Remove \"app name\" visible assertion.\u000a",
        "date" : "2026-07-28 12:02:53 +0400",
        "id" : "73d45e9fa1c3d68e110c9417186f87388b6dccff",
        "msg" : "Remove \"app name\" visible assertion.",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectImageSelectButton.kt"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/002_browse_lessons_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/Lesson-manifest.json"
        ],
        "commitId" : "bae250ea65979db20bce91ae0981f856c07809cc",
        "timestamp" : 1785226373000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/anugraha",
          "fullName" : "Anugraha"
        },
        "authorEmail" : "anugraha@sutara.org",
        "comment" : "refactor\u000a",
        "date" : "2026-07-28 13:42:53 +0530",
        "id" : "bae250ea65979db20bce91ae0981f856c07809cc",
        "msg" : "refactor",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/Lesson-manifest.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/002_001_browse_lessons_test.yaml"
        ],
        "commitId" : "859748e11a1c61957ff5daa2826771389481af33",
        "timestamp" : 1785227913000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Update assertion and tap action text from \"Add App\" to \"Add to school apps\" in `002_001_browse_lessons_test.yaml`.\u000a",
        "date" : "2026-07-28 12:38:33 +0400",
        "id" : "859748e11a1c61957ff5daa2826771389481af33",
        "msg" : "Update assertion and tap action text from \"Add App\" to \"Add to school apps\" in `002_001_browse_lessons_test.yaml`.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/002_001_browse_lessons_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/subflows/admin_add_app.yaml"
        ],
        "commitId" : "b9f9d9f99dac5ab75741a02b4161b476fded5ae0",
        "timestamp" : 1785228192000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Update `admin_add_app.yaml` subflow to tap on \"Add to school apps\" instead of \"Add App\".\u000a",
        "date" : "2026-07-28 12:43:12 +0400",
        "id" : "b9f9d9f99dac5ab75741a02b4161b476fded5ae0",
        "msg" : "Update `admin_add_app.yaml` subflow to tap on \"Add to school apps\" instead of \"Add App\".",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/admin_add_app.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCaseAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
        ],
        "commitId" : "85a95a045a8e4bd43c432322afb8aa38cf7ae3a1",
        "timestamp" : 1785235590000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Merge app and learning unit detail updates.\u000a",
        "date" : "2026-07-28 14:46:30 +0400",
        "id" : "85a95a045a8e4bd43c432322afb8aa38cf7ae3a1",
        "msg" : "Merge app and learning unit detail updates.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCaseAndroid.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app-android/src/main/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/openexternallink/OpenExternalLinkUseCase.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCase.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/OpenExternalLinkUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/LaunchSendWhatsAppUseCase.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/sendinvite/LaunchSendEmailAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/inviteperson/InvitePersonViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/LaunchSendWhatsAppUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/sharelink/LaunchSendEmailUseCase.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCase.kt"
        ],
        "commitId" : "616a6725b58b1d329e9b43fa2aa1a01c5bbfd745",
        "timestamp" : 1785239747000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Tidyup share feedback.\u000a",
        "date" : "2026-07-28 15:55:47 +0400",
        "id" : "616a6725b58b1d329e9b43fa2aa1a01c5bbfd745",
        "msg" : "Tidyup share feedback.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/sharefeedback/ShareFeedbackScreen.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/openexternallink/OpenExternalLinkUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/launchers/LaunchSendWhatsAppUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/sharefeedback/ShareFeedbackViewModel.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WhatsAppLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "app-android/src/main/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/sendinvite/LaunchSendEmailAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/OpenExternalLinkUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/inviteperson/InvitePersonViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/LaunchSendWhatsAppUseCaseAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchers/WebLauncherUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/sharelink/LaunchSendEmailUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/002_002_browse_demo_app_test.yaml"
        ],
        "commitId" : "6b99719b19c906fb87b5ead61368c4658c3f76a7",
        "timestamp" : 1785240511000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix 002-002 browse to remove extra space that causes maestro test to fail. Remove assertion that relies on content of an external site.\u000a",
        "date" : "2026-07-28 16:08:31 +0400",
        "id" : "6b99719b19c906fb87b5ead61368c4658c3f76a7",
        "msg" : "Fix 002-002 browse to remove extra space that causes maestro test to fail. Remove assertion that relies on content of an external site.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/002_002_browse_demo_app_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/002_002_browse_demo_app_test.yaml"
        ],
        "commitId" : "b28e900ed5810fdbb8b8b668f53e3a68d16090df",
        "timestamp" : 1785242715000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix 002_002 remove incorrect assert visible and fix expected license info.\u000a",
        "date" : "2026-07-28 16:45:15 +0400",
        "id" : "b28e900ed5810fdbb8b8b668f53e3a68d16090df",
        "msg" : "Fix 002_002 remove incorrect assert visible and fix expected license info.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/002_002_browse_demo_app_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/006_user_send_feedback_test.yaml"
        ],
        "commitId" : "21bf77a143458be553aea314cb2be726fb7bec2f",
        "timestamp" : 1785320719000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix feedback maestro flow\u000a Remove unnecessary user creation and login not related to the scope of this test.\u000a",
        "date" : "2026-07-29 14:25:19 +0400",
        "id" : "21bf77a143458be553aea314cb2be726fb7bec2f",
        "msg" : "Fix feedback maestro flow",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/006_user_send_feedback_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "README.md"
        ],
        "commitId" : "97ac20242d7390216f788048a1b7854592ce390c",
        "timestamp" : 1785405360000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/noreply",
          "fullName" : "noreply"
        },
        "authorEmail" : "noreply@github.com",
        "comment" : "Update README.md\u000a\u000aUpdate README.md to specify using the latest stable channel version of Android Studio\u000a",
        "date" : "2026-07-30 13:56:00 +0400",
        "id" : "97ac20242d7390216f788048a1b7854592ce390c",
        "msg" : "Update README.md",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "README.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "app-android/src/main/kotlin/world/respect/AppKoinModule.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectAppDatabase/6.json",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          ".maestro/flows/002_001_browse_lessons_test.yaml",
          ".maestro/flows/001_002_add_user_direct_test.yaml",
          ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/geticonforxapiactivity/GetPublicationForXapiActivityUseCase.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCaseAndroid.kt",
          "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/model/XapiVerb.kt",
          ".maestro/flows/002_002_browse_demo_app_test.yaml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchapp/LaunchAppUseCaseAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CommonSortOptions.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectAppDatabase/5.json",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt",
          ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml",
          "respect-lib-shared/src/commonMain/composeResources/drawable/no_bookmark.xml",
          "respect-server/src/main/resources/http/respect-ds/case_valid/js/xapi_statement_maker.js",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/bookmark/AddBookmarkUseCase.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCase.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/bookmark/BookmarkListScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/LearningUnitListScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/bookmark/RemoveBookmarkUseCase.kt",
          "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/OpenEelXapiConstants.kt",
          "respect-server/src/main/resources/http/respect-ds/case_valid/examples/statementmaker/index.html",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          ".maestro/flows/001_003_login_using_school_link_test.yaml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/app/appstate/Snack.kt",
          ".maestro/flows/subflows/admin_add_app.yaml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/App.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/WebViewActivity.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/PublicationListItem.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/bookmark/BookmarkListViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/home/HomeScreen.kt"
        ],
        "commitId" : "beec082677ecfe343236c083f1545d158453e63f",
        "timestamp" : 1785408254000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/noreply",
          "fullName" : "noreply"
        },
        "authorEmail" : "noreply@github.com",
        "comment" : "Dev bookmark xapi (#272)\u000a\u000a* Add bookmark button to lesson details\u000a\u000a* Add bookmark functionality for learning units\u000a\u000aKey changes include:\u000a- Updating the `OpdsDataSource` interface and its implementations (`OpdsDataSourceRepository`, `OpdsDataSourceDb`) to handle observing and setting bookmark status.\u000a- Adding a `BookmarkEntity` and `BookmarkDao` to the database schema to persist bookmark state.\u000a- Implementing the bookmark logic in the `LearningUnitDetailViewModel`, which now observes and updates the bookmark status.\u000a- The bookmark button in `LearningUnitDetailScreen` now dynamically changes its icon based on whether the unit is bookmarked.\u000a\u000a* feat: Add bookmark data layer\u000a\u000aIntroduced the data layer components required for managing publication bookmarks.\u000a\u000aThis includes:\u000a- A `BookmarkEntity` to store bookmark status and timestamp.\u000a- A `BookmarkDao` with functions to insert/update bookmarks, observe a single bookmark's status, and retrieve all bookmarked publications.\u000a- An implementation in `OpdsDataSourceDb` to get a flow of bookmarked `OpdsPublication` objects.\u000a- An update to `ReadiumLinkEntityDao` to find all links associated with a publication UID.\u000a\u000a* feat: Implement fetching of bookmarked publications\u000a\u000aThis commit introduces the functionality to retrieve a list of all bookmarked publications from the local database.\u000a\u000aKey changes:\u000a\u000a-   Added `getBookmarkedPublications()` to the `OpdsDataSource` interface.\u000a-   Implemented the new function in `OpdsDataSourceRepository` to delegate the call to the local data source.\u000a-   In `OpdsDataSourceDb`, the implementation now fetches bookmarked publication entities from `BookmarkDao` and maps them to `OpdsPublication` models.\u000a-   Updated the `OpdsDataSourceHttp` stub to include the new interface method.\u000a\u000a* feat: Store title and timestamp for bookmarks\u000a\u000aThis change enhances the bookmarking functionality by storing the title of the bookmarked item and implicitly tracking when it was last updated.\u000a\u000aKey changes include:\u000a- Updating the `setBookmarkStatus` function across the `OpdsDataSource` interface and its implementations (`OpdsDataSourceDb`, `OpdsDataSourceRepository`, `OpdsDataSourceHttp`) to accept a `title` parameter.\u000a- Modifying the `BookmarkDao` to no longer retrieve `OpdsPublicationEntity` objects directly. Instead, a new `observeAllBookmarks` function returns a flow of `BookmarkEntity` objects, ordered by their update timestamp.\u000a- The `LearningUnitDetailViewModel` now passes the lesson title when setting the bookmark status.\u000a- The `OpdsDataSourceDb` was updated to implement these DAO changes and now provides a `getAllBookmarks` function.\u000a\u000a* Implement fetching of all bookmarks\u000aThis commit introduces the functionality to retrieve a list of all bookmarks.\u000a\u000a* Display app name and icon on learning unit detail screen\u000a\u000a* Store subtitle and app icon for bookmarks\u000a\u000a* Store subtitle and app icon for bookmarks\u000a\u000a* Improve code formatting in OpdsDataSourceDb\u000a\u000a* Improve code formatting in OpdsDataSourceDb\u000a\u000a* Implement bookmark list screen\u000a\u000a* Implement bookmark list screen\u000a\u000a* Implement bookmark list screen\u000a\u000a* Implement bookmark list screen\u000a\u000a* Implement bookmark list screen\u000a\u000a* Implement bookmark list screen\u000a\u000a* Refactor bookmarking logic to toggle status\u000a\u000aThis commit refactors the bookmarking functionality. Instead of explicitly passing a boolean to set the bookmark status, the `setBookmarkStatus` function now toggles the state. If a bookmark exists, it's removed; otherwise, a new one is created.\u000a\u000aThis change simplifies the bookmarking logic across the data layers and the view model. Additionally, the bookmark list screen now allows for the removal of bookmarks.\u000a\u000a* Refactor bookmarking logic to toggle status\u000a\u000aThis commit refactors the bookmarking functionality. Instead of explicitly passing a boolean to set the bookmark status, the `setBookmarkStatus` function now toggles the state. If a bookmark exists, it's removed; otherwise, a new one is created.\u000a\u000aThis change simplifies the bookmarking logic across the data layers and the view model. Additionally, the bookmark list screen now allows for the removal of bookmarks.\u000a\u000a* Delete respect-datalayer-db/schemas/world.respect.datalayer.db.RespectAppDatabase/2.json\u000a\u000a* Refactor bookmarking logic to toggle status\u000a\u000aThis commit refactors the bookmarking functionality. Instead of explicitly passing a boolean to set the bookmark status, the `setBookmarkStatus` function now toggles the state. If a bookmark exists, it's removed; otherwise, a new one is created.\u000a\u000aThis change simplifies the bookmarking logic across the data layers and the view model. Additionally, the bookmark list screen now allows for the removal of bookmarks.\u000a\u000a* Refactor bookmarking logic to toggle status\u000a\u000a* Refactor: Enhance bookmark data and enable navigation\u000a\u000a* Seperation of bookmark implementation\u000a\u000a* Seperation of bookmark implementation\u000a\u000a* Update bookmark data model to include learning unit URL\u000a\u000a* Update bookmark\u000a\u000a* Move bookmarking logic from respect app data source to school data source\u000a\u000a* Update bookmark logic to use enum to delete\u000a\u000a* Rename bookmark observation methods to getBookmarkStatus and getAllBookmarks\u000a\u000a* Rename bookmark observation methods to getBookmarkStatus and getAllBookmarks\u000a\u000a* Refactor bookmarking logic to use Bookmark model and toggle status\u000a\u000a* Refactor bookmarking logic to use Bookmark model and toggle status\u000a\u000a* Refactor bookmarking logic to use Bookmark model and toggle status\u000a\u000a* Refactor bookmarking logic to use Bookmark model and toggle status\u000a\u000a* Rename Bookmark field learningUnitUrl to learningUnitManifestUrl\u000a\u000aThis commit renames the `learningUnitUrl` property in the `Bookmark` data class to `learningUnitManifestUrl` for better clarity and consistency with other parts of the codebase.\u000a\u000aThe changes include:\u000a- Updating the `Bookmark` model definition.\u000a- Updating the `BookmarkAdapter` mapping logic to reflect the rename.\u000a- Adjusting usages in `LearningUnitDetailViewModel` and `BookmarkListViewModel`.\u000a- Updating the database access logic in `BookmarkDataSourceDb`.\u000a- Cleaning up unused imports.\u000a\u000a* Rename Bookmark field learningUnitUrl to learningUnitManifestUrl\u000a\u000a* Added playlist test\u000a\u000a* Move bookmark-related database components to the school package\u000a\u000a* Move bookmark-related database components to the school package\u000a\u000a* Added bookmark test\u000a\u000a* Add user identification to bookmark database components\u000a\u000a* Add user identification to bookmark database components\u000a\u000a* Add user identification to bookmark database components\u000a\u000a* Update bookmark storage logic\u000a\u000a* Implement bookmark toggling and update database components\u000a\u000a* Refactor bookmark data layer to use unique identifiers and timestamps\u000a\u000a* Refactor bookmark data layer to use composite primary keys and remove UID generation logic\u000a\u000a* Refactor bookmark data layer to use composite primary keys and remove UID generation logic\u000a\u000a* Clean up code and refactor bookmark icon logic\u000a\u000a* Implement bookmark data layer including HTTP, DB, and Repository components\u000a\u000a* Update Bookmark model and data layer to support titles, subtitles, and images.\u000a\u000a- Add `title`, `subtitle`, and `imageUrl` properties to the `Bookmark` model.\u000a- Implement `BookmarkEntities` and `PublicationWithDetails` in the DB layer to handle relational data for bookmarks and OPDS publications.\u000a- Update `BookmarkDao` and `BookmarkDataSourceDb` to return bookmarks with their associated publication details.\u000a- Refactor `BookmarkListScreen` to display bookmark images and text content.\u000a- Add navigation logic to `AppLauncherViewModel` for navigating to the bookmark list.\u000a- Minor clean up and documentation updates in OPDS and Bookmark entities.\u000a\u000a* Remove title, subtitle, and image fields from Bookmark model and DAO logic\u000a\u000a* Add localized title support to bookmarks and update database relations\u000a\u000a* Refactor LearningUnitDetailViewModel and clean up unused imports and whitespace.\u000a\u000a* Update Bookmark model and data layer to include subtitles and improve app detail handling in LearningUnitDetailScreen.\u000a\u000a* Remove properties\u000a\u000a* Update BookmarkListViewModel to use LoadingUiState and clean up imports\u000a\u000a* Update BookmarkListViewModel to use LoadingUiState and clean up imports\u000a\u000a* Update BookmarkListViewModel to use LoadingUiState and clean up imports\u000a\u000a* Update BookmarkListViewModel to use LoadingUiState and clean up imports\u000a\u000a* Clean up formatting in BookmarkDao\u000a\u000a* Clean up formatting in BookmarkAdapter.kt\u000a\u000a* Clean up\u000a\u000a* Clean up\u000a\u000a* Clean up\u000a\u000a* Clean up LearningUnitDetailViewModel constructor and improve code formatting\u000a\u000a* Add image URL support to Bookmark model and UI components\u000a\u000a* Add BookmarkEntity to database schema and implement navigation to bookmark list from app launcher.\u000a\u000a* Add BookmarkEntity to database schema and implement navigation to bookmark list from app launcher.\u000a\u000a* Add BookmarkEntity to database schema and implement navigation to bookmark list from app launcher.\u000a\u000a* Added lesson002 and updated test\u000a\u000a* Implement bookmark navigation and fix data synchronization in BookmarkListViewModel\u000a\u000a* Update bookmark implementation to include application manifest URLs and app metadata.\u000a\u000a* commented bookmark code for playlist screen\u000a\u000a* commented bookmark code for playlist screen\u000a\u000a* Update bookmark implementation to include application manifest URLs and app metadata.\u000a\u000a* Update bookmark data layer, database entities, and cleanup ViewModel logic\u000a\u000a* Rename findBookmarks to findBookmarksWithMissingPublication and update loading logic in BookmarkListViewModel\u000a\u000a* Implement getBookmarkLastModified and findByUidList in BookmarkDao and BookmarkDataSourceDb\u000a\u000a* Register Bookmark components in RespectSchoolDatabase and update OPDS package imports\u000a\u000a* Register Bookmark components in RespectSchoolDatabase and update OPDS package imports\u000a\u000a* Add language, grade, and type fields to Bookmark model and display them in BookmarkListScreen\u000a\u000a* Update navigation labels to \"Home\" and integrate BookmarkListScreen into HomeScreen\u000a\u000a- Rename \"Apps\" navigation label to \"Home\" across `App.kt`, `AppLauncherViewModel`, and `BookmarkListViewModel`.\u000a- Update `HomeScreen` to include a new \"Bookmarks\" tab alongside the existing \"Apps\" tab.\u000a- Refactor `BookmarkListScreen` UI: remove redundant styling boxes/borders around icons and adjust icon sizing.\u000a- Update `strings.xml` to include new \"home\" and \"bookmarks\" resources and update the bookmark empty state message.\u000a- Update Maestro flow test to reflect UI text changes.\u000a\u000a* Update navigation labels to \"Home\" and integrate BookmarkListScreen into HomeScreen\u000a\u000a* Add NO_BOOKMARK to RespectImage and update EmptyBookmarkState UI in BookmarkListScreen\u000a\u000a* Add NO_BOOKMARK to RespectImage and update EmptyBookmarkState UI in BookmarkListScreen\u000a\u000a* Add NO_BOOKMARK to RespectImage and update EmptyBookmarkState UI in BookmarkListScreen\u000a\u000a* Add NO_BOOKMARK to RespectImage and update EmptyBookmarkState UI in BookmarkListScreen\u000a\u000a* Update UI layout and styling in BookmarkListScreen.kt\u000a\u000a* Update UI layout and styling in BookmarkListScreen.kt\u000a\u000a* Move no_bookmark image to shared resources and update BookmarkListScreen usage\u000a\u000a* Implement `listAsFlow` in `BookmarkDataSource` and update `BookmarkListViewModel` to reactive flow\u000a\u000aInstead Of using Paging Source I am using List as Flow because-App loading per item getting messy with paging\u000a\u000a* Implement paging support for BookmarkDataSource across DB, HTTP, and Repository layers\u000a\u000a* Remove redundant comments in BookmarkListViewModel\u000a\u000a* Introduce `BookmarkDetails` to associate bookmarks with their corresponding application data and refactor `BookmarkListViewModel` to load these details concurrently.\u000a\u000a* Update Maestro flows\u000a\u000a* test - update Maestro flow for lesson browsing\u000a\u000a* Update Maestro test flows\u000a\u000a*   **002_browse_lessons_test.yaml**: Updated the \"Bookmark\" tap index from 1 to 0 and commented out several assertion and undo steps.\u000a\u000a* Update Maestro test flows\u000a\u000a* Update Maestro test flows\u000a\u000a* Update BookmarkDataSource and related components to support includeDeleted parameter and fix BookmarkDao query\u000a\u000a* Update SnackBar implementation to support actions and implement undo functionality for bookmark removal\u000a\u000a*   Modify `App.kt` to handle `SnackbarResult` and trigger the snackbar's `onAction` callback.\u000a*   Update `BookmarkListViewModel` to use `SnackBarDispatcher` and provide an \"Undo\" action when removing a bookmark.\u000a*   Add `remove_bookmark` and `undo` string resources.\u000a\u000a* Implement `UiText.asString()` extension and update `Snack` to support `UiText` actions\u000a\u000a* Use default snackbar duration in App.kt\u000a\u000a* test is failing as Snack bar appears but due to duration by the time tapOn Undo is triggered it disappears\u000a\u000a* test: Update browse lessons Maestro flow with additional assertions\u000a\u000a* test: update browse lessons Maestro flow\u000a\u000a* Updated `002_browse_lessons_test.yaml` Maestro flow\u000a\u000a* test: update Maestro browse lessons flow\u000a\u000a* test is failing as Snack bar appears but due to duration by the time tapOn Undo is triggered it disappears\u000a\u000a* Format code and apply style improvements across bookmark and data layer components\u000a\u000a* Update icon URI handling in Bookmark and LearningUnit detail screens and resolve publication URLs in ViewModels\u000a\u000a* Update snackbar message handling to support StringUiText and StringResourceUiText in App.kt\u000a\u000a* Update snackbar message handling to support StringUiText and StringResourceUiText in App.kt\u000a\u000a* Update bookmark query field and remote sync logic.\u000a\u000a* Refactor data loading state and clean up bookmark-related logic.\u000a\u000a- Move `DataLoadState`, `DataLoadParams`, and related extensions from `world.respect.datalayer` to `world.respect.lib.dataloadstate`.\u000a- Remove `UiText.asString()` extension in favor of explicit `when` branches in the `App` composable.\u000a- Remove `AssignmentDataSource` and related references across the data layer and server routes.\u000a- Replace `getTitle()` with `langMapString()` for title resolution in `BookmarkListScreen` and `LearningUnitDetailScreen`.\u000a- Fix parameter mapping in `LearningUnitDetailViewModel` to use `learningUnitManifestUrl` and update bookmark storage logic.\u000a- Clean up unused imports and duplicate string resources.\u000a\u000a* Add `gradle-daemon-jvm.properties` to specify Java 21 for the Gradle daemon.\u000a\u000a* Add `gradle-daemon-jvm.properties` to specify Java 21 for the Gradle daemon.\u000a\u000a* Add `gradle-daemon-jvm.properties` to specify Java 21 for the Gradle daemon.\u000a\u000a* removed bookmark data source\u000a\u000a* Refactor bookmark management to use xapi statements instead of a dedicated `BookmarkDataSource`.\u000a\u000a- Remove `BookmarkDataSourceRepository` and its associated server-side route.\u000a- Update `LearningUnitDetailViewModel` to fetch and store bookmark status using `xapiResource.statements` with the `ID_BOOKMARKED` verb.\u000a- Update `BookmarkListViewModel` and `BookmarkListScreen` to display and manage bookmarks based on xapi statements and linked `OpdsPublication` data.\u000a- Add `ID_BOOKMARKED` constant to `XapiVerb`.\u000a- Update Maestro UI tests to reflect changes in sample data names and bookmark behavior.\u000a\u000a* Sort bookmark statements by timestamp in `BookmarkListViewModel` and remove unused imports and test steps.\u000a\u000a* Remove redundant newline in `002_browse_lessons_test.yaml`.\u000a\u000a* Update Maestro flow assertions to use \"Home\" instead of \"Apps\".\u000a\u000a* Update Maestro flow assertions to use \"Home\" instead of \"Apps\".\u000a\u000a* Reorganize Maestro YAML files between flows and test directories.\u000a\u000a* Update lesson visibility assertion in `002_browse_lessons_test.yaml`.\u000a\u000a* Add `BookmarkEntity` table to `RespectSchoolDatabase` schema and move Maestro test files to the `flows` directory.\u000a\u000a* Update school self-registration test and remove unused admin subflow.\u000a\u000a* Update school self-registration test and remove unused admin subflow.\u000a\u000a* Update `002_browse_lessons_test.yaml` to use `${output.TEST_APP_URL}` variable.\u000a\u000a* Update `002_browse_lessons_test.yaml` to use `${output.TEST_APP_URL}` variable.\u000a\u000a* Update `002_browse_lessons_test.yaml` to use `${output.TEST_APP_URL}` variable.\u000a\u000a* Add database schema files for versions 1 through 8 of `RespectAppDatabase`.\u000a\u000a* Add database schema files for versions 1 through 8 of `RespectAppDatabase`.\u000a\u000a* Refine code formatting and whitespace.\u000a\u000a* Refine code formatting and whitespace.\u000a\u000a* Refine imports in `SchoolDataSourceDb.kt` and remove trailing whitespace in `OpdsPublicationEntityAdapter.kt`.\u000a\u000a* Remove extraneous blank lines from documentation comments in `OpdsPublicationEntity.kt`.\u000a\u000a* Introduce `AddBookmarkUseCase` and `RemoveBookmarkUseCase` to centralize bookmarking logic and refactor view models to use these use cases.\u000a\u000a- Deleted legacy `Bookmark` model from `datalayer`.\u000a- Added `AddBookmarkUseCase` and `RemoveBookmarkUseCase` in `respect-lib-shared`.\u000a- Refactored `LearningUnitDetailViewModel` and `BookmarkListViewModel` to use the new use cases and improve error handling via snackbars.\u000a- Updated `AppKoinModule.kt` to provide the new use cases within the account scope.\u000a- Refined UI styles and string resources in `BookmarkListScreen`, `LearningUnitDetailScreen`, and `strings.xml`.\u000a- Fixed typo from `accountMananger` to `accountManager` in `LearningUnitDetailViewModel`.\u000a\u000a* Remove unused `FontWeight` import in `LearningUnitDetailScreen`.\u000a\u000a* Include `appManifestUrl` in `LearningUnitDetail` route and xAPI bookmark statements.\u000a\u000a- Update `LearningUnitDetail` route to include and persist `appManifestUrl`.\u000a- Pass `appManifestUrl` through `AddBookmarkUseCase` and store it within the xAPI statement's `context.contextActivities.parent` field.\u000a- Update `LearningUnitDetailViewModel` to fetch application data using `appManifestUrl` from the route.\u000a- Enhance `BookmarkListViewModel` to extract `appManifestUrl` from bookmark statements when navigating to unit details.\u000a- Simplify UI in `LearningUnitDetailScreen` by removing the subtitle from the supporting content row.\u000a\u000a* Refactor `BookmarkListScreen` to use `PublicationListItem` and add `trailingContent` support to `PublicationListItem`.\u000a\u000a* Remove `grade1` test case data, including `lesson002` HTML, JSON, and media assets.\u000a\u000a* Replace duplicated getString code with new getUiTextString function\u000a\u000a* Move PublicationListItem into its own file\u000a\u000a* Update `.maestro/flows/002_browse_lessons_test.yaml` to include a test flow for downloading a lesson and verifying its functionality in offline mode.\u000a\u000a* Refactor bookmark handling to utilize new XAPI constants and improve context management\u000a\u000a* Refactor AddBookmarkUseCase and LearningUnitDetailViewModel to remove appManifestUrl handling\u000a\u000a* Refactor AddBookmarkUseCase and LearningUnitDetailViewModel to remove appManifestUrl handling\u000a\u000a* Enhance AddBookmarkUseCase to include title in bookmark xAPI statement\u000a\u000a* Refactor BookmarkListViewModel and LearningUnitDetailViewModel to remove appManifestUrl handling and improve bookmark state management\u000a\u000a* Add sorting functionality to BookmarkListViewModel and UI for bookmarks\u000a\u000a* Add sorting functionality to BookmarkListViewModel and UI for bookmarks\u000a\u000a* Refactor LearningUnitDetailScreen to use Column layout for improved UI structure and add app icon\u000a\u000a* Add error handling and user feedback for bookmark operations\u000a\u000a* Add test tags to top navigation items for improved UI testing\u000a\u000a* Update `.maestro/flows/002_browse_lessons_test.yaml` to use element IDs instead of text-based indexing for navigating to the home screen and asserting home visibility.\u000a\u000a* Update Maestro test flows to use resource IDs for home navigation visibility assertions.\u000a\u000a* Update `admin_add_app.yaml` to use the resource ID `nav_home` for the home navigation tap action instead of the \"Home\" text label.\u000a\u000a* Tidyup of bookmark saving to/from xAPI.\u000a\u000a* Update `.maestro/flows/002_browse_lessons_test.yaml` to refine the navigation flow. Replace the back button action with specific navigation to the home screen and \"Apps\" section to access the \"Statement Maker\" feature.\u000a\u000a* Refactored\u000aThe screen now:\u000aExtracts the activityId\u000aPasses it as Url(activityId)to uiState.taskInfoFlow()\u000aCollects the returned flow\u000aRenders the PublicationListItem\u000a\u000a* Minor tidyup on homescreen.kt\u000a\u000a* Add bookmark button back to learning unit detail screen.\u000a\u000a* Bookmark cleanup\u000a\u000a1) Use remember on bookmarklistscreen when collecting flow\u000a2) bookmarklistviewmodel to filter current active user.\u000a\u000a* Fix 002_001 browse lessons test flow.\u000a\u000a* Tidyup bookmarks\u000a\u000a1) Learning detail screen updated to use a shared flow to avoid unnecessarily reloading app detail\u000a2) Use separate buttons enabled setting for bookmark button on learning unit detail to avoid potential end to end test flakiness: it is a separate load/API call.\u000a\u000a* Resolve OpdsPublication in BookmarkListViewModel to ensure icon will display as expected if it is a relative href.\u000a\u000a* Update demo app test to reflect navigation changes from \"Apps\" to \"Home\"\u000a\u000a* Correct license link on DemoLaunchableAppManifestRoute.kt\u000a\u000a* Update demo app test to use navigation ID for \"Home\"\u000a\u000a* Replace tapOn home with using test tag\u000a\u000a* Add additional logging to WebViewActivity and lesson launch to attempt to diagnose learning unit not opening flakey results on Maestro testing.\u000a\u000a* Add more logging on xapi_statement_maker.js .\u000a\u000a* Revert database JSON schema change: BookmarkEntity was not added when using xapi so no change.\u000a\u000a---------\u000a\u000aCo-authored-by: pooja <pooja@ustadmobile.com>\u000aCo-authored-by: Mike Dawson <mike@ustadmobile.com>\u000a",
        "date" : "2026-07-30 14:44:14 +0400",
        "id" : "beec082677ecfe343236c083f1545d158453e63f",
        "msg" : "Dev bookmark xapi (#272)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_003_login_using_school_link_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_002_add_user_direct_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : "app-android/src/main/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/bookmark/BookmarkListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/home/HomeScreen.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectAppDatabase/5.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/App.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/geticonforxapiactivity/GetPublicationForXapiActivityUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/OpenEelXapiConstants.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/WebViewActivity.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/LearningUnitListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/launchapp/LaunchAppUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/app/appstate/Snack.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/bookmark/BookmarkListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/examples/statementmaker/index.html"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/shared/domain/license/GetLicenseLabelUseCaseAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/bookmark/AddBookmarkUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CommonSortOptions.kt"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/002_001_browse_lessons_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/composeResources/drawable/no_bookmark.xml"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/bookmark/RemoveBookmarkUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/model/XapiVerb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/js/xapi_statement_maker.js"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectAppDatabase/6.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/002_002_browse_demo_app_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/PublicationListItem.kt"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/admin_add_app.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/subflows/admin_add_new_student_to_class.yaml",
          ".maestro/flows/subflows/add_person_create_account.yaml",
          ".maestro/flows/subflows/admin_add_student.yaml",
          ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml",
          ".maestro/flows/002_001_browse_lessons_test.yaml",
          ".maestro/flows/subflows/admin_add_new_teacher_to_class.yaml",
          ".maestro/flows/001_002_add_user_direct_test.yaml",
          ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
        ],
        "commitId" : "7dcdde677d98a6a3b10e72d4c0a1150c2f68e93a",
        "timestamp" : 1785415095000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Improve Maestro test stability\u000a",
        "date" : "2026-07-30 16:38:15 +0400",
        "id" : "7dcdde677d98a6a3b10e72d4c0a1150c2f68e93a",
        "msg" : "Improve Maestro test stability",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_001_invite_users_using_qr_code_or_link_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/add_person_create_account.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/admin_add_new_student_to_class.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/admin_add_new_teacher_to_class.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/admin_add_student.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/003_admin_user_assigns_assignment_to_a_class_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/002_001_browse_lessons_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/001_002_add_user_direct_test.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-xapi-core/src/jvmTest/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXmlDocumentTest.kt",
          "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXml.kt",
          "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/rusticilaunch/model/TinCanXmlDocument.kt",
          "respect-lib-xapi-core/src/jvmTest/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXmlTest.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt",
          "respect-lib-xapi-core/build.gradle.kts"
        ],
        "commitId" : "e4042afc191b6ed7220d1d18d661a9a6354175f2",
        "timestamp" : 1785484704000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add XmlUtil and TinCanXmlDocument for deserialization.\u000a",
        "date" : "2026-07-31 11:58:24 +0400",
        "id" : "e4042afc191b6ed7220d1d18d661a9a6354175f2",
        "msg" : "Add XmlUtil and TinCanXmlDocument for deserialization.",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXml.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-xapi-core/src/commonMain/kotlin/world/respect/lib/xapi/rusticilaunch/model/TinCanXmlDocument.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-xapi-core/src/jvmTest/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXmlTest.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-xapi-core/src/jvmTest/kotlin/world/respect/lib/xapi/rusticilaunch/TinCanXmlDocumentTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-xapi-core/build.gradle.kts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
        ],
        "commitId" : "faa61f31a71b8ee63ff42eeb83663138a65bdf35",
        "timestamp" : 1785493292000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update PinPublicationPrepareUseCase to include the manifest itself and images.\u000a",
        "date" : "2026-07-31 14:21:32 +0400",
        "id" : "faa61f31a71b8ee63ff42eeb83663138a65bdf35",
        "msg" : "Update PinPublicationPrepareUseCase to include the manifest itself and images.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptor.kt",
          "app-android/src/main/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/connectivitymonitor/ConnectivityMonitorAndroid.kt"
        ],
        "commitId" : "81ec123a349ff08a6f530ab152003c911a9e9f21",
        "timestamp" : 1785495341000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Improve logging for UstadCacheInterceptor and ConnectivityMonitorAndroid.kt\u000a",
        "date" : "2026-07-31 14:55:41 +0400",
        "id" : "81ec123a349ff08a6f530ab152003c911a9e9f21",
        "msg" : "Improve logging for UstadCacheInterceptor and ConnectivityMonitorAndroid.kt",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptor.kt"
          },
          {
            "editType" : "edit",
            "file" : "app-android/src/main/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/connectivitymonitor/ConnectivityMonitorAndroid.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptor.kt"
        ],
        "commitId" : "b866879743dfc1c1cc1b471ce1af3d6c40988cf7",
        "timestamp" : 1785497367000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add logging on UstadCacheInterceptor even when not applying further processing.\u000a",
        "date" : "2026-07-31 15:29:27 +0400",
        "id" : "b866879743dfc1c1cc1b471ce1af3d6c40988cf7",
        "msg" : "Add logging on UstadCacheInterceptor even when not applying further processing.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptor.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/README.md",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt",
          "ci-run-e2e-tests.sh",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptorTest.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/util/ChannelExt.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
        ],
        "commitId" : "d290141a45d04b62ac859482d07c3c209b5ee129",
        "timestamp" : 1785526145000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update UstadCache to use a Channel to batch and execute database updates instead of an interval.\u000a\u000aThe interval approach led to flakey test results when the app was killed before updates were committed to the database.\u000a",
        "date" : "2026-07-31 23:29:05 +0400",
        "id" : "d290141a45d04b62ac859482d07c3c209b5ee129",
        "msg" : "Update UstadCache to use a Channel to batch and execute database updates instead of an interval.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ci-run-e2e-tests.sh"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/README.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptorTest.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/util/ChannelExt.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/Application.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/gettokenanduser/GetTokenAndUserProfileWithCredentialUseCase.kt",
          "respect-lib-shared-se/src/commonMain/kotlin/world/respect/sharedse/domain/account/authenticatepassword/AuthenticatePasswordUseCaseDbImpl.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/login/LoginViewModel.kt"
        ],
        "commitId" : "62688c7fe742af0eaf0396c76297482ed4c3b9b7",
        "timestamp" : 1785596640000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Improvements to reduce potential flakiness in Login and improve authentication logging.\u000a",
        "date" : "2026-08-01 19:04:00 +0400",
        "id" : "62688c7fe742af0eaf0396c76297482ed4c3b9b7",
        "msg" : "Improvements to reduce potential flakiness in Login and improve authentication logging.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/gettokenanduser/GetTokenAndUserProfileWithCredentialUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared-se/src/commonMain/kotlin/world/respect/sharedse/domain/account/authenticatepassword/AuthenticatePasswordUseCaseDbImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/login/LoginViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app-android/src/main/AndroidManifest.xml",
          "respect-lib-ihttp-core/build.gradle.kts",
          "respect-lib-ihttp-iostreams/build.gradle.kts",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/scanqrcode/ScanQRCodeScreen.kt",
          "gradle/wrapper/gradle-wrapper.properties",
          "gradle/libs.versions.toml",
          "gradle.properties"
        ],
        "commitId" : "52845f44836ba14427dd22dbeb7169292931effa",
        "timestamp" : 1785599456000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Dependency version updates.\u000a",
        "date" : "2026-08-01 19:50:56 +0400",
        "id" : "52845f44836ba14427dd22dbeb7169292931effa",
        "msg" : "Dependency version updates.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-ihttp-core/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/scanqrcode/ScanQRCodeScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-ihttp-iostreams/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "gradle/wrapper/gradle-wrapper.properties"
          },
          {
            "editType" : "edit",
            "file" : "app-android/src/main/AndroidManifest.xml"
          },
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppManifestUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerAppMain.kt",
          ".fleet/receipt.json"
        ],
        "commitId" : "d7157c9c817fac9e8bcb805ebf15fc52fe49ca20",
        "timestamp" : 1785658867000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Start adding support to output the demo launchable app to static files.\u000a",
        "date" : "2026-08-02 12:21:07 +0400",
        "id" : "d7157c9c817fac9e8bcb805ebf15fc52fe49ca20",
        "msg" : "Start adding support to output the demo launchable app to static files.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppManifestRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerAppMain.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppManifestUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : ".fleet/receipt.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app-android/src/main/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/xapi/getxapilaunchurl/GetXapiLaunchUrlUseCaseAndroid.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt"
        ],
        "commitId" : "8718980f1acc18880a8f5860b17f1f38b650a2d4",
        "timestamp" : 1785677631000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial usage of TinCan.xml in GetXapiLaunchUrlUseCaseAndroid.kt\u000a",
        "date" : "2026-08-02 17:33:51 +0400",
        "id" : "8718980f1acc18880a8f5860b17f1f38b650a2d4",
        "msg" : "Initial usage of TinCan.xml in GetXapiLaunchUrlUseCaseAndroid.kt",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app-android/src/main/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/xapi/getxapilaunchurl/GetXapiLaunchUrlUseCaseAndroid.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppGradeCollectionsUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppCollectionUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
        ],
        "commitId" : "e368404e6e10845cf46fd83f74fa1bd09f85d5f2",
        "timestamp" : 1785761011000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Work in progress: add support to write demo app as static files.\u000a",
        "date" : "2026-08-03 16:43:31 +0400",
        "id" : "e368404e6e10845cf46fd83f74fa1bd09f85d5f2",
        "msg" : "Work in progress: add support to write demo app as static files.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppGradeCollectionsUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppCollectionUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppGradeCollectionsUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonManifestUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
        ],
        "commitId" : "cecbcf5e3f9a94c4ac4ef8b7e30e384650174d53",
        "timestamp" : 1785763491000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Write demo app lesson manifest as file or use in Ktor route.\u000a",
        "date" : "2026-08-03 17:24:51 +0400",
        "id" : "cecbcf5e3f9a94c4ac4ef8b7e30e384650174d53",
        "msg" : "Write demo app lesson manifest as file or use in Ktor route.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppCollectionsRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppGradeCollectionsUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonManifestUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonTinCanXmlUseCase.kt"
        ],
        "commitId" : "8059b6c0a51b479add3cbbb459a152cecc25c9ef",
        "timestamp" : 1785764487000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add tincan.xml to demo app output on Ktor server route and static files output.\u000a",
        "date" : "2026-08-03 17:41:27 +0400",
        "id" : "8059b6c0a51b479add3cbbb459a152cecc25c9ef",
        "msg" : "Add tincan.xml to demo app output on Ktor server route and static files output.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonTinCanXmlUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonHtmlUseCase.kt",
          "respect-server/src/main/resources/demoapp/lesson_xapi.js",
          "respect-server/src/main/resources/demoapp/xapi_module.js",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonTinCanXmlUseCase.kt"
        ],
        "commitId" : "d8f6a6e312a91f79baa03a8bd84a4bb2863aa1a8",
        "timestamp" : 1785768904000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial implementation of demo app lesson html to send an xAPI statement\u000a",
        "date" : "2026-08-03 18:55:04 +0400",
        "id" : "d8f6a6e312a91f79baa03a8bd84a4bb2863aa1a8",
        "msg" : "Initial implementation of demo app lesson html to send an xAPI statement",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/demoapp/xapi_module.js"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonTinCanXmlUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/demoapp/lesson_xapi.js"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonHtmlUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonHtmlUseCase.kt",
          "respect-server/src/main/resources/demoapp/lesson_xapi.js"
        ],
        "commitId" : "572d15fa891059c81f165a06c4e5ae43ac642d94",
        "timestamp" : 1785825117000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update demo app HTML/JS version to mirror the native Android version.\u000a",
        "date" : "2026-08-04 10:31:57 +0400",
        "id" : "572d15fa891059c81f165a06c4e5ae43ac642d94",
        "msg" : "Update demo app HTML/JS version to mirror the native Android version.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonHtmlUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/resources/demoapp/lesson_xapi.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonHtmlUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonManifestUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt"
        ],
        "commitId" : "9e1b3205dbce484e928b772e5eac1bed84ee8cfd",
        "timestamp" : 1785830138000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update save demo app to files to include lesson HTML and Javascript.\u000a",
        "date" : "2026-08-04 11:55:38 +0400",
        "id" : "9e1b3205dbce484e928b772e5eac1bed84ee8cfd",
        "msg" : "Update save demo app to files to include lesson HTML and Javascript.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonManifestUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonHtmlUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLearningUnitManifestUseCase.kt",
          "respect-server/src/main/resources/demoapp/lesson_xapi.js",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonManifestUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonTinCanXmlUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppGradeCollectionsUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLearningUnitRoute.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonHtmlUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt",
          "respect-server/src/main/resources/demoapp/learning_unit_xapi.js",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLearningUnitTinCanXmlUseCase.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLearningUnitHtmlUseCase.kt"
        ],
        "commitId" : "f4d67923b38730e4a50ab4a0927ee683dd13fa67",
        "timestamp" : 1785832822000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update demo naming to follow terminology.\u000a",
        "date" : "2026-08-04 12:40:22 +0400",
        "id" : "f4d67923b38730e4a50ab4a0927ee683dd13fa67",
        "msg" : "Update demo naming to follow terminology.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppGradeCollectionsUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLearningUnitHtmlUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonTinCanXmlUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLearningUnitRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-server/src/main/kotlin/world/respect/server/demoapp/DemoLaunchableAppLessonRoute.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLearningUnitManifestUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-server/src/main/resources/demoapp/lesson_xapi.js"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/demoapp/learning_unit_xapi.js"
          },
          {
            "editType" : "delete",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonHtmlUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLessonManifestUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLearningUnitTinCanXmlUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppGradeCollectionsUseCase.kt",
          "app-android/src/main/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-cache/build.gradle.kts",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt",
          "gradle.properties",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLearningUnitHtmlUseCase.kt"
        ],
        "commitId" : "a6c16515f9f9a61aeaa1dff61e0ed840d5cc7973",
        "timestamp" : 1785846944000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix demo app links. Bump version.\u000a",
        "date" : "2026-08-04 16:35:44 +0400",
        "id" : "a6c16515f9f9a61aeaa1dff61e0ed840d5cc7973",
        "msg" : "Fix demo app links. Bump version.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "app-android/src/main/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppLearningUnitHtmlUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/MakeDemoAppGradeCollectionsUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app-android/src/main/kotlin/world/respect/AppKoinModule.kt",
          "app-android/build.gradle.kts",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
        ],
        "commitId" : "1bec94de8fef638f449fcbfe56713770973b71c8",
        "timestamp" : 1785848961000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "Add `GEOLOCATION_API_ENDPOINT` build config field and update `GetCountryForUrlUseCaseImpl` to use the injected endpoint and new API path.\u000a",
        "date" : "2026-08-04 18:39:21 +0530",
        "id" : "1bec94de8fef638f449fcbfe56713770973b71c8",
        "msg" : "Add `GEOLOCATION_API_ENDPOINT` build config field and update `GetCountryForUrlUseCaseImpl` to use the injected endpoint and new API path.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "app-android/src/main/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "app-android/build.gradle.kts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/util/ChannelExt.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
        ],
        "commitId" : "6ecd77ce786b44bfc313964f961c30aed8dfbbd4",
        "timestamp" : 1785849404000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix potential for flakiness in UstadCacheJvmTest where update had not yet been committed to the database.\u000a",
        "date" : "2026-08-04 17:16:44 +0400",
        "id" : "6ecd77ce786b44bfc313964f961c30aed8dfbbd4",
        "msg" : "Fix potential for flakiness in UstadCacheJvmTest where update had not yet been committed to the database.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/util/ChannelExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/tincan.xml"
        ],
        "commitId" : "bf36064888e0aa724bf76c980a9f07eefd487016",
        "timestamp" : 1785850366000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add tincan.xml for exampels/lesson 001\u000a",
        "date" : "2026-08-04 17:32:46 +0400",
        "id" : "bf36064888e0aa724bf76c980a9f07eefd487016",
        "msg" : "Add tincan.xml for exampels/lesson 001",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/http/respect-ds/case_valid/examples/lesson001/tincan.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt",
          "app-android/build.gradle.kts",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
        ],
        "commitId" : "4386799be9c5738c67c4e41f7b089fa306498448",
        "timestamp" : 1785857096000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "fix\u000a",
        "date" : "2026-08-04 20:54:56 +0530",
        "id" : "4386799be9c5738c67c4e41f7b089fa306498448",
        "msg" : "fix",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app-android/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/resources/demoapp/index.html",
          "respect-server/src/main/kotlin/world/respect/server/Application.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt"
        ],
        "commitId" : "7ebdf88d54478a92f00d1bcb30538849be59a10f",
        "timestamp" : 1785913257000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add index.html for demo app.\u000a",
        "date" : "2026-08-05 11:00:57 +0400",
        "id" : "7ebdf88d54478a92f00d1bcb30538849be59a10f",
        "msg" : "Add index.html for demo app.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-server/src/main/resources/demoapp/index.html"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/demoapp/SaveDemoAppToStaticFilesUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "README_ADD_YOUR_APP.md",
          "respect-lib-opds-model/README_LAUNCHABLE_APP.md"
        ],
        "commitId" : "b14d70228ade3d0a0282bced3d341c9b8a984f93",
        "timestamp" : 1785914385000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Make terminology consistent: use collection instead of catalog.\u000a",
        "date" : "2026-08-05 11:19:45 +0400",
        "id" : "b14d70228ade3d0a0282bced3d341c9b8a984f93",
        "msg" : "Make terminology consistent: use collection instead of catalog.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "README_ADD_YOUR_APP.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/README_LAUNCHABLE_APP.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "README_ADD_YOUR_APP.md"
        ],
        "commitId" : "d997498330fa70ab311cd65d2f24b5153d73d06a",
        "timestamp" : 1785918823000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Make learning unit consistent with demo.openeel.org.\u000a",
        "date" : "2026-08-05 12:33:43 +0400",
        "id" : "d997498330fa70ab311cd65d2f24b5153d73d06a",
        "msg" : "Make learning unit consistent with demo.openeel.org.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "README_ADD_YOUR_APP.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt"
        ],
        "commitId" : "6dfef8e4a6ddbf8e01c8925f31bae2ab65add74f",
        "timestamp" : 1785922180000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add retry logic to SchoolDirectoryEntryDataSourceHttp.kt\u000a",
        "date" : "2026-08-05 13:29:40 +0400",
        "id" : "6dfef8e4a6ddbf8e01c8925f31bae2ab65add74f",
        "msg" : "Add retry logic to SchoolDirectoryEntryDataSourceHttp.kt",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/writequeue/RemoteWriteQueue.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppBar.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/WriteQueueItemEntityDao.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/writequeue/RemoteWriteQueueDbImpl.kt"
        ],
        "commitId" : "e29231d5cf47ca457cbc1c28690ebb7eeb85ab04",
        "timestamp" : 1785927677000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add text component that can be monitored in Maestro tests to wait for all pending remote writes to be completed.\u000a",
        "date" : "2026-08-05 15:01:17 +0400",
        "id" : "e29231d5cf47ca457cbc1c28690ebb7eeb85ab04",
        "msg" : "Add text component that can be monitored in Maestro tests to wait for all pending remote writes to be completed.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/writequeue/RemoteWriteQueueDbImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/writequeue/RemoteWriteQueue.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppBar.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/WriteQueueItemEntityDao.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/distributed/DistributedCacheHashtableIntegrationTest.kt"
        ],
        "commitId" : "91a9a7096117da5433c92a5129b6ac297918040d",
        "timestamp" : 1785930490000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update UstadCacheImpl.kt and test to improve handling closing the database/cache\u000a",
        "date" : "2026-08-05 15:48:10 +0400",
        "id" : "91a9a7096117da5433c92a5129b6ac297918040d",
        "msg" : "Update UstadCacheImpl.kt and test to improve handling closing the database/cache",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/distributed/DistributedCacheHashtableIntegrationTest.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/subflows/teardown.yaml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppBar.kt"
        ],
        "commitId" : "0402fc938ae40bc5e9a5b8a496a5afa41e7f6407",
        "timestamp" : 1785931455000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Make maestro tests wait for all pending remote writs to complete.\u000a\u000aAdd a small hidden text element with the pending remote write count that a maestro test can wait for (avoid clearing the app before saved data is written to server).\u000a",
        "date" : "2026-08-05 16:04:15 +0400",
        "id" : "0402fc938ae40bc5e9a5b8a496a5afa41e7f6407",
        "msg" : "Make maestro tests wait for all pending remote writs to complete.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/teardown.yaml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppBar.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/util/UstadCacheExt.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptorTest.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/AbstractCacheInterceptorTest.kt"
        ],
        "commitId" : "6fd710da694f06f076eb3e389ac7f145690f9d63",
        "timestamp" : 1785952438000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Reduce use of cache database closing due to apparent bug in Room Sqlite bundled driver.\u000a\u000aUpdate UstadCacheInterceptorTest to close mockwebserver after each run.\u000a",
        "date" : "2026-08-05 21:53:58 +0400",
        "id" : "6fd710da694f06f076eb3e389ac7f145690f9d63",
        "msg" : "Reduce use of cache database closing due to apparent bug in Room Sqlite bundled driver.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptorTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/AbstractCacheInterceptorTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/util/UstadCacheExt.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "gradle.properties"
        ],
        "commitId" : "74b3e6c5e4f5642ca08c7d494992ad27607f75c7",
        "timestamp" : 1785953030000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Bump version\u000a",
        "date" : "2026-08-05 22:03:50 +0400",
        "id" : "74b3e6c5e4f5642ca08c7d494992ad27607f75c7",
        "msg" : "Bump version",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "gradle.properties"
        ],
        "commitId" : "d6a65d188370e080d078ee87dcf2ec054d03309e",
        "timestamp" : 1785953050000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Bump version\u000a",
        "date" : "2026-08-05 22:04:10 +0400",
        "id" : "d6a65d188370e080d078ee87dcf2ec054d03309e",
        "msg" : "Bump version",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/subflows/e2e_artifact_upload.yaml",
          ".maestro/flows/subflows/teardown.yaml"
        ],
        "commitId" : "74df52d811dbfecc0f22f2df7a33faa78eb8c0f3",
        "timestamp" : 1785996886000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "moved the command to Wait for all pending remote writes from teardown to e2e_artifact_upload.yaml\u000a",
        "date" : "2026-08-06 10:14:46 +0400",
        "id" : "74df52d811dbfecc0f22f2df7a33faa78eb8c0f3",
        "msg" : "moved the command to Wait for all pending remote writes from teardown to e2e_artifact_upload.yaml",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/e2e_artifact_upload.yaml"
          },
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/teardown.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".maestro/flows/subflows/e2e_artifact_upload.yaml"
        ],
        "commitId" : "abf298829e847550c020cbfb63f03272a0f66b4a",
        "timestamp" : 1786000260000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Waiting for pending remote writes to complete is done after setting the device back to online.\u000a",
        "date" : "2026-08-06 11:11:00 +0400",
        "id" : "abf298829e847550c020cbfb63f03272a0f66b4a",
        "msg" : "Waiting for pending remote writes to complete is done after setting the device back to online.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".maestro/flows/subflows/e2e_artifact_upload.yaml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt",
          "app-android/src/main/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/opds/getxapiactivityid/GetXapiActivityForPublicationUseCase.kt",
          "gradle.properties"
        ],
        "commitId" : "7172569c153a05ff49006cb9a94a64443443575c",
        "timestamp" : 1786003014000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update to use activity id as per tincan.xml when addinga learning unit to an assignment. Bump version.\u000a",
        "date" : "2026-08-06 11:56:54 +0400",
        "id" : "7172569c153a05ff49006cb9a94a64443443575c",
        "msg" : "Update to use activity id as per tincan.xml when addinga learning unit to an assignment. Bump version.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/opds/getxapiactivityid/GetXapiActivityForPublicationUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "app-android/src/main/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/util/ChannelExt.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
        ],
        "commitId" : "12fdd918e68b5bb65cbf3e7118c21a5e92a98651",
        "timestamp" : 1786003662000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Remove concurrency issue: update cache commit backlog size only after db transaction has finished.\u000a",
        "date" : "2026-08-06 12:07:42 +0400",
        "id" : "12fdd918e68b5bb65cbf3e7118c21a5e92a98651",
        "msg" : "Remove concurrency issue: update cache commit backlog size only after db transaction has finished.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/util/ChannelExt.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
        ],
        "commitId" : "fcbe0ced3524bf02db779ed27cfd7b875a632a24",
        "timestamp" : 1786018385000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
          "fullName" : "lipsa.behera"
        },
        "authorEmail" : "lipsa.behera@sutara.org",
        "comment" : "fix\u000a",
        "date" : "2026-08-06 17:43:05 +0530",
        "id" : "fcbe0ced3524bf02db779ed27cfd7b875a632a24",
        "msg" : "fix",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt",
          "app-android/src/main/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/geolookup/GetCountryForUrlUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryCodeToFlagEmoji.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RememberCountryFlagEmoji.kt",
          "app-android/build.gradle.kts",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/geolookup/GetCountryForUrlUseCaseImpl.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt",
          "respect-lib-shared/build.gradle.kts",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
        ],
        "commitId" : "ef805d54e6f20b3572f3c636dcbde9e832ca93cc",
        "timestamp" : 1786278826000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "GeoIp lookup tidyup\u000a",
        "date" : "2026-08-09 16:33:46 +0400",
        "id" : "ef805d54e6f20b3572f3c636dcbde9e832ca93cc",
        "msg" : "GeoIp lookup tidyup",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/geolookup/GetCountryForUrlUseCaseImpl.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryCodeToFlagEmoji.kt"
          },
          {
            "editType" : "edit",
            "file" : "app-android/build.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/country/GetCountryForUrlUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListItem.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "app-android/src/main/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/CountryDetection.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/CountryFlag.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RememberCountryFlagEmoji.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/geolookup/GetCountryForUrlUseCase.kt"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/anugraha",
      "fullName" : "Anugraha"
    },
    {
      "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/lipsa.behera",
      "fullName" : "lipsa.behera"
    },
    {
      "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/noreply",
      "fullName" : "noreply"
    },
    {
      "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
      "fullName" : "Mike Dawson"
    },
    {
      "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
      "fullName" : "Pooja Ravi"
    },
    {
      "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
      "fullName" : "mandvi.verma"
    }
  ]
}