{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.model.Cause$UserIdCause",
          "shortDescription" : "Started by user Pooja Ravi",
          "userId" : "pooja",
          "userName" : "Pooja Ravi"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/main-maestro-cloud-run" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 10,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "4c7679e7b9c80b89ea503c28608711ef175a6ba3",
            "branch" : [
              {
                "SHA1" : "4c7679e7b9c80b89ea503c28608711ef175a6ba3",
                "name" : "refs/remotes/origin/main-maestro-cloud-run"
              }
            ]
          },
          "revision" : {
            "SHA1" : "4c7679e7b9c80b89ea503c28608711ef175a6ba3",
            "branch" : [
              {
                "SHA1" : "4c7679e7b9c80b89ea503c28608711ef175a6ba3",
                "name" : "refs/remotes/origin/main-maestro-cloud-run"
              }
            ]
          }
        },
        "refs/remotes/origin/main" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 19,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "fde9d744516345a749d8bc5161a6ba686ecc3465",
            "branch" : [
              {
                "SHA1" : "fde9d744516345a749d8bc5161a6ba686ecc3465",
                "name" : "refs/remotes/origin/main"
              }
            ]
          },
          "revision" : {
            "SHA1" : "fde9d744516345a749d8bc5161a6ba686ecc3465",
            "branch" : [
              {
                "SHA1" : "fde9d744516345a749d8bc5161a6ba686ecc3465",
                "name" : "refs/remotes/origin/main"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "fde9d744516345a749d8bc5161a6ba686ecc3465",
        "branch" : [
          {
            "SHA1" : "fde9d744516345a749d8bc5161a6ba686ecc3465",
            "name" : "refs/remotes/origin/main"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/UstadMobile/Respect.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#19",
  "duration" : 325415,
  "estimatedDuration" : 1608818,
  "executor" : None,
  "fullDisplayName" : "RESPECT-end-to-end #19",
  "id" : "19",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 19,
  "queueId" : 4058,
  "result" : "FAILURE",
  "timestamp" : 1761875798152,
  "url" : "https://devserver3.ustadmobile.com/jenkins/job/RESPECT-end-to-end/19/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsBelongsTo.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/ReadiumSubjectEntityAdapters.kt",
          "respect-lib-serializers/README.md",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-datalayer-repository/src/jvmTest/kotlin/world/respect/datalayer/repository/opds/OpdsRespectRepositoryIntegrationTest.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/LangMap.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/rostering/model/OneRosterOrgGUIDRef.kt",
          "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/SingleItemToListTransformerSerializer.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsSeries.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumSubject.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsPrice.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsFeedMetadata.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumLink.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumMetadata.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/rostering/model/OneRosterUser.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumLinkPropertiesEncrypted.kt",
          "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/UriStringSerializer.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsFeedAdapter.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsFeedMetadataEntityAdapter.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumContributorObject.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsPublication.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/app/appstate/DisplayString.kt",
          "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/opds/adapters/TestOpdsPublicationEntityAdapter.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/TransferJobDao.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsFacet.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/validator/ValidateLinkUseCase.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/shared/adapters/LangMapAdapter.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsBelongsTo.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/SingleItemToListTransformerSerializer.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJobItemStatus.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/rostering/model/OneRosterResourceGUIDRef.kt",
          "respect-lib-serializers/build.gradle.kts",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/opds/validator/ValidateOpdsPublicationUseCase.kt",
          "respect-lib-shared/src/jvmTest/kotlin/world/respect/OpdsSerializationTest.kt",
          "respect-cli/src/main/java/world/respect/clitools/RespectCLI.kt",
          "respect-lib-shared/src/jvmTest/kotlin/world/respect/domain/validator/TestValidationScenarios.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumMetadata.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/LangMapExt.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/respectappmanifest/validator/RespectAppManifestValidator.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsFacet.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/ReadiumLinkEntityAdapter.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsGroupAdapter.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/opds/validator/ValidateLinkUseCaseImpl.kt",
          "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/InstantISO8601Serializer.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/UstadCacheDb.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumSubject.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/UriStringSerializer.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsFacetAdapter.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/LangMapExt.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/OpdsDataSource.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/opds/validator/OpdsFeedValidator.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsGroup.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJobItem.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/StringOrObjectSerializer.kt",
          "respect-lib-cache/build.gradle.kts",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsPublicationEntityAdapter.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/TransferJobItemDao.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumLinkProperties.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/opds/validator/OpdsPublicationValidator.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/OpdsDataSourceLocal.kt",
          "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/StringValue.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJob.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsGroup.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/LocalDateOrDateTime.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsAcquisition.kt",
          "respect-datalayer/build.gradle.kts",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/opds/OpdsDataSourceRepository.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/opds/OpdsDataSourceHttp.kt",
          "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/StringListSerializer.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/StringListSerializer.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/compatibleapps/model/RespectAppManifest.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublication.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/LangMap.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsFeed.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationUseCase.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/LearningUnitListScreen.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumLinkProperties.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/InstantISO8601Serializer.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsFeedMetadata.kt",
          "respect-lib-opds-model/README.md",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumLinkPropertiesEncrypted.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/OpdsDataSourceDb.kt",
          "settings.gradle.kts",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPrice.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsAcquisition.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsFeed.kt",
          "respect-lib-opds-model/build.gradle.kts",
          "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/LocalDateOrDateTime.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsSeries.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/StringValue.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumLink.kt",
          "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/StringOrObjectSerializer.kt",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumContributorObject.kt"
        ],
        "commitId" : "29ef2ae5512c0557e98682858bda1aa8f2a13b92",
        "timestamp" : 1753018528000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add downloader to lib-cache: work in progress. Move opds model into its own module so it can be used by lib cache.\u000a",
        "date" : "2025-07-20 16:35:28 +0300",
        "id" : "29ef2ae5512c0557e98682858bda1aa8f2a13b92",
        "msg" : "Add downloader to lib-cache: work in progress. Move opds model into its own module so it can be used by lib cache.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJobItem.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/opds/adapters/TestOpdsPublicationEntityAdapter.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumLinkProperties.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsPublication.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsFeed.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/rostering/model/OneRosterResourceGUIDRef.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmTest/kotlin/world/respect/OpdsSerializationTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsPublicationEntityAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/opds/OpdsDataSourceHttp.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsBelongsTo.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/LocalDateOrDateTime.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsAcquisition.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/opds/validator/ValidateOpdsPublicationUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/OpdsDataSourceLocal.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsFeed.kt"
          },
          {
            "editType" : "edit",
            "file" : "settings.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/LangMapExt.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-serializers/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/ReadiumSubjectEntityAdapters.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumLinkPropertiesEncrypted.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-cli/src/main/java/world/respect/clitools/RespectCLI.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsFeedMetadataEntityAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/opds/OpdsDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmTest/kotlin/world/respect/domain/validator/TestValidationScenarios.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumLinkPropertiesEncrypted.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/UriStringSerializer.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumSubject.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/SingleItemToListTransformerSerializer.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/StringOrObjectSerializer.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/build.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumMetadata.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/build.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsSeries.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/OpdsDataSourceDb.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/StringValue.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/LangMap.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/rostering/model/OneRosterOrgGUIDRef.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPrice.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumContributorObject.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/app/appstate/DisplayString.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsPrice.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsSeries.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/StringValue.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsFacetAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/jvmTest/kotlin/world/respect/datalayer/repository/opds/OpdsRespectRepositoryIntegrationTest.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/TransferJobItemDao.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/InstantISO8601Serializer.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsFeedAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/opds/validator/OpdsPublicationValidator.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsFeedMetadata.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/InstantISO8601Serializer.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/StringListSerializer.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumLinkProperties.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/LearningUnitListScreen.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumSubject.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/compatibleapps/model/RespectAppManifest.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublication.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/LangMap.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/LangMapExt.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/TransferJobDao.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsFeedMetadata.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsAcquisition.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/shared/adapters/LangMapAdapter.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/UriStringSerializer.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumLink.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/respectappmanifest/validator/RespectAppManifestValidator.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/README.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsFacet.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumMetadata.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/rostering/model/OneRosterUser.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/ReadiumLinkEntityAdapter.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJob.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/ReadiumLink.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/StringListSerializer.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/SingleItemToListTransformerSerializer.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/OpdsDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/validator/ValidateLinkUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsFacet.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/opds/model/OpdsGroup.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/opds/adapters/OpdsGroupAdapter.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJobItemStatus.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/ReadiumContributorObject.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-serializers/README.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsBelongsTo.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/opds/validator/OpdsFeedValidator.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/UstadCacheDb.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsGroup.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/opds/validator/ValidateLinkUseCaseImpl.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/shared/serialization/LocalDateOrDateTime.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-serializers/src/commonMain/kotlin/world/respect/lib/serializers/StringOrObjectSerializer.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJobItem.kt",
          "respect-lib-cache/build.gradle.kts",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/TransferJobDao.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJob.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/TransferJobItemDao.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseAndroid.kt",
          "gradle/libs.versions.toml",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/RetentionLock.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJob.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationPrepareUseCase.kt",
          "respect-lib-cache/schemas/com.ustadmobile.libcache.db.UstadCacheDb/15.json",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/EnqueueRunDownloadJobUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJobItem.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationGetManifestInfoWorker.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/DbTypeConverters.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/UstadCacheDb.kt"
        ],
        "commitId" : "23fbf2cdad2a362ad6a717465ec4895d6196aa8a",
        "timestamp" : 1753027500000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Work in progress: add structure for pinning and downloading a publication.\u000a",
        "date" : "2025-07-20 19:05:00 +0300",
        "id" : "23fbf2cdad2a362ad6a717465ec4895d6196aa8a",
        "msg" : "Work in progress: add structure for pinning and downloading a publication.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/DbTypeConverters.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/schemas/com.ustadmobile.libcache.db.UstadCacheDb/15.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt"
          },
          {
            "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/db/UstadCacheDb.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJob.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJobItem.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/RetentionLock.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJob.kt"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/EnqueueRunDownloadJobUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/TransferJobDao.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJobItem.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationGetManifestInfoWorker.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/TransferJobItemDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/build.gradle.kts"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationPrepareUseCase.kt",
          "respect-lib-cache/schemas/com.ustadmobile.libcache.db.UstadCacheDb/15.json",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJob.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJobItem.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseAndroid.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
        ],
        "commitId" : "7267910b1c8a2858b98fa77626e617ca4fc23cd2",
        "timestamp" : 1753031120000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Rename fields on DownloadJob and DownloadJobItem.\u000a",
        "date" : "2025-07-20 20:05:20 +0300",
        "id" : "7267910b1c8a2858b98fa77626e617ca4fc23cd2",
        "msg" : "Rename fields on DownloadJob and DownloadJobItem.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/schemas/com.ustadmobile.libcache.db.UstadCacheDb/15.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJob.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJobItem.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationPrepareUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/schemas/com.ustadmobile.libcache.db.UstadCacheDb/15.json",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJob.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/PinnedPublicationDao.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/UstadCacheDb.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/PinnedPublication.kt"
        ],
        "commitId" : "9804a6e0b5cb2b587b10469e7130cb9bb14473bf",
        "timestamp" : 1753032980000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Download publication work in progress - add pinned publication entity\u000a",
        "date" : "2025-07-20 20:36:20 +0300",
        "id" : "9804a6e0b5cb2b587b10469e7130cb9bb14473bf",
        "msg" : "Download publication work in progress - add pinned publication entity",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/UstadCacheDb.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/PinnedPublicationDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/schemas/com.ustadmobile.libcache.db.UstadCacheDb/15.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/DownloadJob.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/PinnedPublication.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/DownloadProgressUpdate.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/DownloadStatusUpdate.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/DownloadJobItemStatusUpdater.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseImpl.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/EnqueueRunDownloadJobUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt",
          "respect-lib-util/src/commonMain/kotlin/world/respect/libutil/ext/ListExt.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/OkCallExt.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
        ],
        "commitId" : "2a5022502524a661f9da0eae77a4c0afeb7b6049",
        "timestamp" : 1753037247000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Port/adaptation of download implementation from Ustad Mobile to enable pinning web publications to be available offline.\u000a",
        "date" : "2025-07-20 21:47:27 +0300",
        "id" : "2a5022502524a661f9da0eae77a4c0afeb7b6049",
        "msg" : "Port/adaptation of download implementation from Ustad Mobile to enable pinning web publications to be available offline.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/DownloadProgressUpdate.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/DownloadJobItemStatusUpdater.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/EnqueueRunDownloadJobUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseImpl.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-util/src/commonMain/kotlin/world/respect/libutil/ext/ListExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/DownloadStatusUpdate.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/OkCallExt.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/jvmTest/resources/publication/lesson001/lesson001.html",
          "respect-lib-cache/build.gradle.kts",
          "respect-lib-cache/src/jvmTest/resources/publication/lesson001/audio.ogg",
          "respect-lib-cache/src/jvmTest/resources/publication/lesson001/lesson001.json",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.kt",
          "respect-lib-cache/src/jvmTest/resources/publication/lesson001/video.mp4",
          "respect-lib-serializers/build.gradle.kts",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/AbstractCacheInterceptorTest.kt",
          "respect-lib-opds-model/build.gradle.kts",
          "respect-lib-util/build.gradle.kts",
          "respect-lib-cache/src/jvmTest/resources/publication/lesson001/cover.png",
          "respect-lib-cache/src/jvmTest/resources/publication/lesson001/script.js",
          "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseJvm.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptorTest.kt"
        ],
        "commitId" : "37e74031cfa80873b7fab8499d8555535720971d",
        "timestamp" : 1753078871000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial integration test for downloader.\u000a",
        "date" : "2025-07-21 09:21:11 +0300",
        "id" : "37e74031cfa80873b7fab8499d8555535720971d",
        "msg" : "Initial integration test for downloader.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-serializers/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmTest/resources/publication/lesson001/audio.ogg"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseJvm.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmTest/resources/publication/lesson001/video.mp4"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-util/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmTest/resources/publication/lesson001/lesson001.json"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/AbstractCacheInterceptorTest.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmTest/resources/publication/lesson001/cover.png"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-opds-model/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptorTest.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmTest/resources/publication/lesson001/script.js"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmTest/resources/publication/lesson001/lesson001.html"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationPrepareUseCase.kt",
          "respect-lib-cache/build.gradle.kts",
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.kt",
          "gradle/libs.versions.toml",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptor.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
        ],
        "commitId" : "8a510b56b487499da7d20714ce16092bd3d1dc4f",
        "timestamp" : 1753084482000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial integration test for downloader: passes to download/pin an entire publication.\u000a",
        "date" : "2025-07-21 10:54:42 +0300",
        "id" : "8a510b56b487499da7d20714ce16092bd3d1dc4f",
        "msg" : "Initial integration test for downloader: passes to download/pin an entire publication.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptor.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCaseWorker.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseAndroid.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationGetManifestInfoWorker.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
        ],
        "commitId" : "4559562ec025db532391eac7c3b02d8835d8a0a9",
        "timestamp" : 1754993008000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Work in progress adding pin publication job\u000a",
        "date" : "2025-08-12 14:03:28 +0400",
        "id" : "4559562ec025db532391eac7c3b02d8835d8a0a9",
        "msg" : "Work in progress adding pin publication job",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationGetManifestInfoWorker.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCaseWorker.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/README.md",
          "respect-test-end-to-end/test-description/005_admin_user_creates_a_report_test_description.md",
          "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md",
          "respect-test-end-to-end/test-description/004_admin_user_adds_classes_test_description.md",
          "respect-test-end-to-end/test-description/001_003_child_user_join_class_using_invitecode_test_description.md",
          "respect-test-end-to-end/test-description/002_browse_lessons_test_description.md",
          "respect-test-end-to-end/test-description/001_browse_lessons_test_description.md",
          "respect-test-end-to-end/test-description/006_admin_user_adds_person_account_test_description.md",
          "respect-test-end-to-end/test-description/001_001_user_login_to _app_with_school_name_test_description.md",
          "respect-test-end-to-end/test-description/001_002_Parent_user_join_class_using_invitecode_test_description.md",
          "respect-test-end-to-end/android-maestro/run_test.sh"
        ],
        "commitId" : "9863b3985b93c1f9a5704c96a21e2d6dd23988c8",
        "timestamp" : 1756294646000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "respect-e2e test scenarios\u000a",
        "date" : "2025-08-27 15:37:26 +0400",
        "id" : "9863b3985b93c1f9a5704c96a21e2d6dd23988c8",
        "msg" : "respect-e2e test scenarios",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/002_browse_lessons_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/005_admin_user_creates_a_report_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/README.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/001_001_user_login_to _app_with_school_name_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/001_browse_lessons_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/android-maestro/run_test.sh"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/001_003_child_user_join_class_using_invitecode_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/004_admin_user_adds_classes_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/006_admin_user_adds_person_account_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/001_002_Parent_user_join_class_using_invitecode_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/001_002_user_login_to _app_with_school_link_provided_by_admin_test_description.md",
          "respect-test-end-to-end/README.md",
          "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md",
          "respect-test-end-to-end/test-description/005_admin_user_creates_a_report_test_description.md",
          "respect-test-end-to-end/test-description/001_003_child_user_join_class_using_invitecode_test_description.md",
          "respect-test-end-to-end/test-description/002_browse_lessons_test_description.md",
          "respect-test-end-to-end/test-description/006_admin_user_adds_person_account_test_description.md",
          "respect-test-end-to-end/test-description/001_004_child_user_join_class_using_invitecode_test_description.md",
          "respect-test-end-to-end/android-maestro/e2e-tests/001_browse_lessons_test.yaml",
          "respect-test-end-to-end/test-description/001_003_Parent_user_join_class_using_invitecode_test_description.md",
          "respect-test-end-to-end/test-description/001_002_Parent_user_join_class_using_invitecode_test_description.md",
          "respect-test-end-to-end/android-maestro/run_test.sh"
        ],
        "commitId" : "52f060aad9315ef6bebe3293b967c9f2a12b86ae",
        "timestamp" : 1756388628000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "modified test scripts\u000a",
        "date" : "2025-08-28 17:43:48 +0400",
        "id" : "52f060aad9315ef6bebe3293b967c9f2a12b86ae",
        "msg" : "modified test scripts",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/android-maestro/run_test.sh"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/002_browse_lessons_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/android-maestro/e2e-tests/001_browse_lessons_test.yaml"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/README.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/001_002_user_login_to _app_with_school_link_provided_by_admin_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/001_003_Parent_user_join_class_using_invitecode_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/001_003_child_user_join_class_using_invitecode_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/005_admin_user_creates_a_report_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/006_admin_user_adds_person_account_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/001_004_child_user_join_class_using_invitecode_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/001_002_Parent_user_join_class_using_invitecode_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/README.md"
        ],
        "commitId" : "4a070498160820112b6a16111e9c91b5dc5325fb",
        "timestamp" : 1756388805000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "corrected links\u000a",
        "date" : "2025-08-28 17:46:45 +0400",
        "id" : "4a070498160820112b6a16111e9c91b5dc5325fb",
        "msg" : "corrected links",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/README.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/README.md",
          "respect-test-end-to-end/android-maestro/run_test.sh"
        ],
        "commitId" : "46696c06e1c661e671c41ec764a534c1b80eeed9",
        "timestamp" : 1756388991000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "clean up\u000a",
        "date" : "2025-08-28 17:49:51 +0400",
        "id" : "46696c06e1c661e671c41ec764a534c1b80eeed9",
        "msg" : "clean up",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/android-maestro/run_test.sh"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/README.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/android-maestro/run_test.sh"
        ],
        "commitId" : "839385647599d11cbaa26f744d0c0aa38e91d8b7",
        "timestamp" : 1756389148000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Renamed REALM to SCHOOL\u000a",
        "date" : "2025-08-28 17:52:28 +0400",
        "id" : "839385647599d11cbaa26f744d0c0aa38e91d8b7",
        "msg" : "Renamed REALM to SCHOOL",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/android-maestro/run_test.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/001_003_Parent_user_join_class_using_invitecode_test_description.md"
        ],
        "commitId" : "51854c8fdf28df8094657eb97c2d1d97527bdcbc",
        "timestamp" : 1756728855000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "fix\u000a",
        "date" : "2025-09-01 16:14:15 +0400",
        "id" : "51854c8fdf28df8094657eb97c2d1d97527bdcbc",
        "msg" : "fix",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/001_003_Parent_user_join_class_using_invitecode_test_description.md"
          }
        ]
      },
      {
        "_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/schooldirectory/list/SchoolDirectoryListViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.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/commonMain/kotlin/world/respect/app/view/settings/SettingScreen.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/settings/SettingViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/list/SchoolDirectoryListScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.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"
        ],
        "commitId" : "a38f3ec9fe4ec8aca9aa3e09c8e9e78942bb0152",
        "timestamp" : 1758873829000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Implement Settings and School Directory screens\u000a\u000aThis commit introduces the initial framework for the Settings and School Directory features.\u000a\u000aKey changes:\u000a\u000a**Navigation & ViewModels:**\u000a- Added new navigation routes: `SettingScreen`, `SchoolDirectoryList`, and `SchoolDirectoryEdit` in `AppRoutes.kt`.\u000a- Created corresponding ViewModels: `SettingViewModel`, `SchoolDirectoryListViewModel`, and `SchoolDirectoryEditViewModel`.\u000a    - `SettingViewModel`:\u000a        - Sets the app bar title to \"Settings\".\u000a        - Hides the bottom navigation.\u000a        - Provides `onClickSchoolDirectory` to navigate to `SchoolDirectoryList`.\u000a    - `SchoolDirectoryListViewModel`:\u000a        - Sets the app bar title to \"School Directory\".\u000a        - Hides the bottom navigation.\u000a        - Configures a FAB (Floating Action Button) to add a new directory, navigating to `SchoolDirectoryEdit`.\u000a    - `SchoolDirectoryEditViewModel`:\u000a        - Sets the app bar title to \"Add Directory\" (or \"Edit Directory\" - to be implemented).\u000a        - Hides the bottom navigation.\u000a- Registered these new ViewModels in `AppKoinModule.kt`.\u000a- Integrated these new routes and ViewModels into `AppNavHost.kt`.\u000a\u000a**UI Screens (Composable):**\u000a- Created `SettingScreen.kt`:\u000a    - Displays a list of settings options (currently only \"School Directory\").\u000a    - Uses a `LazyColumn` and `SettingListItem` composable.\u000a    - `SettingListItem` displays an icon and title for each option and handles clicks.\u000a- Created `SchoolDirectoryListScreen.kt`:\u000a    - Provides a basic `LazyColumn` structure for displaying school directory items (implementation pending).\u000a- Created `SchoolDirectoryEditScreen.kt`:\u000a    - Provides a placeholder structure for adding/editing school directory entries (implementation pending).\u000a\u000a**Account List Integration:**\u000a- Added a \"Settings\" option to `AccountListScreen.kt`.\u000a    - This option uses `Icons.Default.Settings` and navigates to `SettingScreen` when clicked.\u000a- Added `onClickSettings()` function to `AccountListViewModel.kt` to handle this navigation.\u000a\u000a**String Resources:**\u000a- Added new string resources in `strings.xml`:\u000a    - `settings`: \"Settings\"\u000a    - `school_directory`: \"School Directory\"\u000a    - `add_directory`: \"Add Directory\"\u000a    - `edit_directory`: \"Edit Directory\"\u000a",
        "date" : "2025-09-26 13:33:49 +0530",
        "id" : "a38f3ec9fe4ec8aca9aa3e09c8e9e78942bb0152",
        "msg" : "feat: Implement Settings and School Directory screens",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/list/SchoolDirectoryListScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/settings/SettingViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/settings/SettingScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.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/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt"
          },
          {
            "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/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt"
        ],
        "commitId" : "7d6ceaeaeb8fc9989ccc86204d23081e7e807c75",
        "timestamp" : 1758874050000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Implement Settings and School Directory screens\u000a\u000aThis commit introduces the initial framework for the Settings and School Directory features.\u000a\u000aKey changes:\u000a\u000a**Navigation & ViewModels:**\u000a- Added new navigation routes: `SettingScreen`, `SchoolDirectoryList`, and `SchoolDirectoryEdit` in `AppRoutes.kt`.\u000a- Created corresponding ViewModels: `SettingViewModel`, `SchoolDirectoryListViewModel`, and `SchoolDirectoryEditViewModel`.\u000a    - `SettingViewModel`:\u000a        - Sets the app bar title to \"Settings\".\u000a        - Hides the bottom navigation.\u000a        - Provides `onClickSchoolDirectory` to navigate to `SchoolDirectoryList`.\u000a    - `SchoolDirectoryListViewModel`:\u000a        - Sets the app bar title to \"School Directory\".\u000a        - Hides the bottom navigation.\u000a        - Configures a FAB (Floating Action Button) to add a new directory, navigating to `SchoolDirectoryEdit`.\u000a    - `SchoolDirectoryEditViewModel`:\u000a        - Sets the app bar title to \"Add Directory\" (or \"Edit Directory\" - to be implemented).\u000a        - Hides the bottom navigation.\u000a- Registered these new ViewModels in `AppKoinModule.kt`.\u000a- Integrated these new routes and ViewModels into `AppNavHost.kt`.\u000a\u000a**UI Screens (Composable):**\u000a- Created `SettingScreen.kt`:\u000a    - Displays a list of settings options (currently only \"School Directory\").\u000a    - Uses a `LazyColumn` and `SettingListItem` composable.\u000a    - `SettingListItem` displays an icon and title for each option and handles clicks.\u000a- Created `SchoolDirectoryListScreen.kt`:\u000a    - Provides a basic `LazyColumn` structure for displaying school directory items (implementation pending).\u000a- Created `SchoolDirectoryEditScreen.kt`:\u000a    - Provides a placeholder structure for adding/editing school directory entries (implementation pending).\u000a\u000a**Account List Integration:**\u000a- Added a \"Settings\" option to `AccountListScreen.kt`.\u000a    - This option uses `Icons.Default.Settings` and navigates to `SettingScreen` when clicked.\u000a- Added `onClickSettings()` function to `AccountListViewModel.kt` to handle this navigation.\u000a\u000a**String Resources:**\u000a- Added new string resources in `strings.xml`:\u000a    - `settings`: \"Settings\"\u000a    - `school_directory`: \"School Directory\"\u000a    - `add_directory`: \"Add Directory\"\u000a    - `edit_directory`: \"Edit Directory\"\u000a",
        "date" : "2025-09-26 13:37:30 +0530",
        "id" : "7d6ceaeaeb8fc9989ccc86204d23081e7e807c75",
        "msg" : "feat: Implement Settings and School Directory screens",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.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/schooldirectory/list/SchoolDirectoryListViewModel.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/list/SchoolDirectoryListScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
        ],
        "commitId" : "d67e61f911e9e34d0fc6316c69f71b6e0da5a724",
        "timestamp" : 1758878725000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Feat: Implement delete directory functionality\u000a\u000aThis commit introduces the ability to delete school directories.\u000a\u000aKey changes:\u000a- Added `deleteDirectory` function to `SchoolDirectoryDataSource` interface and its implementations (`SchoolDirectoryDataSourceDb`, `SchoolDirectoryDataSourceHttp`, `SchoolDirectoryDataSourceRepository`).\u000a- In `SchoolDirectoryDataSourceDb`, `deleteDirectory` calls `deleteByUrl` on `SchoolDirectoryEntityDao`.\u000a- Added `deleteByUrl` query to `SchoolDirectoryEntityDao` to delete a directory by its URL.\u000a- `SchoolDirectoryListViewModel` now:\u000a    - Injects `RespectAppDataSource`.\u000a    - Loads school directories on initialization.\u000a    - Provides an `onDeleteDirectory` function which calls `deleteDirectory` on the data source and reloads the list.\u000a    - Updates `SchoolDirectoryListUIState` to hold a list of `RespectSchoolDirectory` objects instead of `String`.\u000a- `SchoolDirectoryListScreen` now:\u000a    - Displays a list of `SchoolDirectoryListItem` composables.\u000a    - Passes the `onDeleteDirectory` function from the ViewModel to each item.\u000a- Introduced `SchoolDirectoryListItem` composable:\u000a    - Displays the directory's base URL.\u000a    - Includes a delete icon button that triggers the `onDeleteClick` callback.\u000a- Added a new string resource `delete_directory`.\u000a",
        "date" : "2025-09-26 14:55:25 +0530",
        "id" : "d67e61f911e9e34d0fc6316c69f71b6e0da5a724",
        "msg" : "Feat: Implement delete directory functionality",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.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/schooldirectory/list/SchoolDirectoryListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
        ],
        "commitId" : "1669ddb47a49652cf109a35508d686f114e854d0",
        "timestamp" : 1758883877000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Feat: Initial setup for SchoolDirectoryEdit screen\u000a\u000aThis commit introduces the basic structure for the school directory editing feature.\u000a\u000aKey changes:\u000a- Added `SchoolDirectoryEditViewModel` with an initial `SchoolDirectoryEditUIState`.\u000a    - `SchoolDirectoryEditUIState` now includes `schoolDirectoryUrlError` and `schoolDirectory` (a `DataLoadState` for `SchoolDirectoryEntry`).\u000a    - Added a `fieldsEnabled` computed property to `SchoolDirectoryEditUIState` based on the `schoolDirectory` loading state.\u000a    - `SchoolDirectoryEditViewModel` now implements `KoinScopeComponent` and injects `RespectAppDataSource`.\u000a    - The ViewModel initializes the app UI state to set the top app bar title to \"Add Directory\" and hide the bottom navigation.\u000a    - Added an `onClearError` function to clear `schoolDirectoryUrlError` in the UI state.\u000a- Created `SchoolDirectoryEditScreen.kt` with an initial layout.\u000a    - The screen displays an `OutlinedTextField` for entering a link.\u000a    - The text field's label is \"Enter link\" and has supporting text \"Required\".\u000a    - The text field's enabled state is controlled by `uiState.fieldsEnabled`.\u000a    - The text field's error state is controlled by `uiState.schoolDirectoryUrlError`.\u000a    - Added `onClearError` callback to the screen.\u000a",
        "date" : "2025-09-26 16:21:17 +0530",
        "id" : "1669ddb47a49652cf109a35508d686f114e854d0",
        "msg" : "Feat: Initial setup for SchoolDirectoryEdit screen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/list/SchoolDirectoryListScreen.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntryEntityDao.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
        ],
        "commitId" : "17a87c28b8138996ce185c2598ee1231ba4fa2b9",
        "timestamp" : 1758887775000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Move deleteDirectory functionality to SchoolDirectoryEntryDataSource\u000a\u000aThis commit refactors the `deleteDirectory` functionality from `SchoolDirectoryDataSource` to `SchoolDirectoryEntryDataSource`.\u000a\u000aKey changes:\u000a- Removed `deleteDirectory` from `SchoolDirectoryDataSource` interface and its implementations (`SchoolDirectoryDataSourceHttp`, `SchoolDirectoryDataSourceRepository`, `SchoolDirectoryDataSourceDb`).\u000a- Removed `deleteByUrl` from `SchoolDirectoryEntityDao`.\u000a- Added `deleteDirectory` to `SchoolDirectoryEntryDataSource` interface and its implementations (`SchoolDirectoryEntryDataSourceHttp`, `SchoolDirectoryEntryDataSourceRepository`, `SchoolDirectoryEntryDataSourceDb`).\u000a- Added `deleteByUrl` to `SchoolDirectoryEntryEntityDao`.\u000a- Added `listAsPagingSource` (with a TODO) to `SchoolDirectoryEntryDataSource` and its implementations.\u000a- `SchoolDirectoryListViewModel` now uses `SchoolDirectoryEntryDataSource` to load and delete directories.\u000a- `SchoolDirectoryListUIState` now holds a list of `SchoolDirectoryEntry` instead of `RespectSchoolDirectory`.\u000a- `SchoolDirectoryListScreen` and `SchoolDirectoryListItem` updated to use `SchoolDirectoryEntry`.\u000a",
        "date" : "2025-09-26 17:26:15 +0530",
        "id" : "17a87c28b8138996ce185c2598ee1231ba4fa2b9",
        "msg" : "Refactor: Move deleteDirectory functionality to SchoolDirectoryEntryDataSource",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntryEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/list/SchoolDirectoryListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt"
        ],
        "commitId" : "e009056b50f00f8671e192a8a879267d302ebd8f",
        "timestamp" : 1758888515000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Move deleteDirectory functionality to SchoolDirectoryEntryDataSource\u000a\u000aThis commit refactors the `deleteDirectory` functionality from `SchoolDirectoryDataSource` to `SchoolDirectoryEntryDataSource`.\u000a\u000aKey changes:\u000a- Removed `deleteDirectory` from `SchoolDirectoryDataSource` interface and its implementations (`SchoolDirectoryDataSourceHttp`, `SchoolDirectoryDataSourceRepository`, `SchoolDirectoryDataSourceDb`).\u000a- Removed `deleteByUrl` from `SchoolDirectoryEntityDao`.\u000a- Added `deleteDirectory` to `SchoolDirectoryEntryDataSource` interface and its implementations (`SchoolDirectoryEntryDataSourceHttp`, `SchoolDirectoryEntryDataSourceRepository`, `SchoolDirectoryEntryDataSourceDb`).\u000a- Added `deleteByUrl` to `SchoolDirectoryEntryEntityDao`.\u000a- Added `listAsPagingSource` (with a TODO) to `SchoolDirectoryEntryDataSource` and its implementations.\u000a- `SchoolDirectoryListViewModel` now uses `SchoolDirectoryEntryDataSource` to load and delete directories.\u000a- `SchoolDirectoryListUIState` now holds a list of `SchoolDirectoryEntry` instead of `RespectSchoolDirectory`.\u000a- `SchoolDirectoryListScreen` and `SchoolDirectoryListItem` updated to use `SchoolDirectoryEntry`.\u000a",
        "date" : "2025-09-26 17:38:35 +0530",
        "id" : "e009056b50f00f8671e192a8a879267d302ebd8f",
        "msg" : "Refactor: Move deleteDirectory functionality to SchoolDirectoryEntryDataSource",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/enterlink/EnterLinkViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
        ],
        "commitId" : "b804f78f632849ec536c0777a5f1f3731f9226e4",
        "timestamp" : 1758890429000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Improve School Directory Edit screen UI and ViewModel\u000a\u000aThis commit refactors the School Directory Edit screen and its ViewModel for an improved user experience.\u000a\u000aKey changes:\u000a- In `SchoolDirectoryEditViewModel`:\u000a    - Renamed `schoolDirectoryUrlError` in `SchoolDirectoryEditUIState` to `errorMessage` and changed its type to `UiText?`.\u000a    - Added `linkUrl` to `SchoolDirectoryEditUIState` to hold the input link.\u000a    - Added `onLinkChanged` function to update `linkUrl` and clear any existing error message.\u000a    - Added `onClickNext` function to handle the \"Next\" button click, which currently parses the entered link.\u000a    - Removed `onClearError` function as error handling is now managed within `onLinkChanged`.\u000a- In `SchoolDirectoryEditScreen.kt`:\u000a    - Updated the `SchoolDirectoryEditScreen` composable to take `onLinkChanged` and `onClickNext` as parameters.\u000a    - Added a `Text` composable to display an introductory message (`app_link_provided_message`).\u000a    - The `OutlinedTextField` now uses `uiState.linkUrl` for its value and calls `onLinkChanged` on value change.\u000a    - The `OutlinedTextField` now displays a placeholder (`example_url_placeholder`) and uses `link_label` for its label.\u000a    - Error messages are now displayed using `uiState.errorMessage` and `uiTextStringResource`.\u000a    - Added a \"Next\" `Button` that calls `onClickNext` when clicked.\u000a    - General layout adjustments with `Spacer` and `padding`.\u000a- Removed an unused newline in `EnterLinkViewModel.kt`.\u000a- Minor formatting change in `SchoolDirectoryEntryDataSourceHttp.kt`.\u000a",
        "date" : "2025-09-26 18:10:29 +0530",
        "id" : "b804f78f632849ec536c0777a5f1f3731f9226e4",
        "msg" : "Refactor: Improve School Directory Edit screen UI and ViewModel",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/enterlink/EnterLinkViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
        ],
        "commitId" : "bbf9b808edf89e2a9255fdc8af239e5567b86d3d",
        "timestamp" : 1758890730000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Remove app link message from SchoolDirectoryEditScreen\u000a\u000aThis commit removes the `Text` composable that displayed the \"app_link_provided_message\" string resource from the `SchoolDirectoryEditScreen`.\u000a\u000aKey changes:\u000a- Deleted the `Text` composable responsible for showing the app link message.\u000a",
        "date" : "2025-09-26 18:15:30 +0530",
        "id" : "bbf9b808edf89e2a9255fdc8af239e5567b86d3d",
        "msg" : "Refactor: Remove app link message from SchoolDirectoryEditScreen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
        ],
        "commitId" : "cc4fcba42eeccf50aafafa43a25f90b06e583ed5",
        "timestamp" : 1758890773000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Remove unused import in SchoolDirectoryEditScreen\u000a\u000aThis commit removes an unused import for `app_link_provided_message` from `SchoolDirectoryEditScreen.kt`.\u000a",
        "date" : "2025-09-26 18:16:13 +0530",
        "id" : "cc4fcba42eeccf50aafafa43a25f90b06e583ed5",
        "msg" : "Refactor: Remove unused import in SchoolDirectoryEditScreen",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntryEntityDao.kt"
        ],
        "commitId" : "6e1a8b9c12dc6289c9fe3e9ed96accc2e337a0f7",
        "timestamp" : 1759158370000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Implement School Directory Entry Insertion and Improve UI\u000a\u000aThis commit introduces functionality to insert school directory entries and enhances the user interface for managing accounts and editing school directories.\u000a\u000aKey changes:\u000a- Added `insertDirectoryEntry` function to `SchoolDirectoryEntryDataSource`, `SchoolDirectoryEntryDataSourceDb`, `SchoolDirectoryEntryDataSourceHttp`, and `SchoolDirectoryEntryDataSourceRepository` to support adding new directory entries.\u000a- In `SchoolDirectoryEntryDataSourceDb`:\u000a    - `insertDirectoryEntry` now uses a database transaction to insert a new school directory entry.\u000a    - `deleteByUrl` in `SchoolDirectoryEntryEntityDao` and its usage in `SchoolDirectoryEntryDataSourceDb` now correctly accepts a `Url` object instead of a `String`.\u000a- In `SchoolDirectoryEditViewModel`:\u000a    - `onClickNext` now constructs a `SchoolDirectoryEntry` from the provided link.\u000a    - It inserts the new entry using `respectAppDataSource.schoolDirectoryEntryDataSource.insertDirectoryEntry`.\u000a    - Navigates to `SchoolDirectoryList` upon successful insertion.\u000a    - Implemented error handling for invalid URLs, updating the UI with an error message.\u000a- In `SchoolDirectoryListViewModel`:\u000a    - Removed the call to `loadSchoolDirectories()` after deleting a directory, as the list is likely observed and will update automatically.\u000a- In `AccountListViewModel`:\u000a    - Added a `loading` state to `AccountListUiState` to indicate when account data is being fetched.\u000a    - The `loading` state is set to `true` before starting to collect `selectedAccountAndPersonFlow` and set to `false` once the data is received.\u000a",
        "date" : "2025-09-29 20:36:10 +0530",
        "id" : "6e1a8b9c12dc6289c9fe3e9ed96accc2e337a0f7",
        "msg" : "Refactor: Implement School Directory Entry Insertion and Improve UI",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntryEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/adapters/PersonAdapters.kt",
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/PersonAdapter.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Person.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/composites/PersonListDetails.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonEntity.kt"
        ],
        "commitId" : "233a293bfd08d72b26f7e4d3daf76b8c500b1740",
        "timestamp" : 1759173221000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Add email field to Person entity and related screens\u000a\u000aThis commit introduces an email field to the `Person` entity and integrates it across various parts of the application.\u000a\u000aKey changes:\u000a- Added `email` (nullable String) property to the `Person` data model in `respect-datalayer`.\u000a- Updated `PersonEntity` in `respect-datalayer-db` to include `pEmail` (nullable String).\u000a- Modified `PersonAdapter` in `respect-datalayer-db` to map the `email` field during entity creation.\u000a- Added `email` (nullable String) property to `PersonListDetails` composite model in `respect-datalayer`.\u000a- Updated the `asListDetails()` extension function in `respect-datalayer` to include the new `email` field.\u000a- Added a new string resource `email` (\"Email\") in `respect-lib-shared`.\u000a- Integrated an `OutlinedTextField` for `email` in `PersonEditScreen` within `respect-app-compose`, allowing users to view and edit the person's email.\u000a",
        "date" : "2025-09-30 00:43:41 +0530",
        "id" : "233a293bfd08d72b26f7e4d3daf76b8c500b1740",
        "msg" : "feat: Add email field to Person entity and related screens",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/adapters/PersonAdapters.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonEntity.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/PersonAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Person.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/composites/PersonListDetails.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/OnClickPhoneNumUseCase.kt",
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/adapters/PersonAdapters.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtil.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/PersonAdapter.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Person.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/UstadPhoneNumberTextField.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonEntity.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/CountryCodeTransformation.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorUseCase.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtilExt.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.android.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumber.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/composites/PersonListDetails.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatter.kt",
          "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.desktop.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/PhoneNumberVisualTransformation.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/edit/PersonEditViewModel.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/1.json"
        ],
        "commitId" : "4e72dae3d2485dc6ced6c68e887abda89aa82d46",
        "timestamp" : 1759208758000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Feat: Add phone number field to Person entity and edit screen\u000a\u000aThis commit introduces a phone number field to the `Person` entity and integrates it into the person editing and detail screens. It also adds utility classes for phone number formatting and validation.\u000a\u000aKey changes:\u000a- Added `phoneNumber` field to `Person` data class and `PersonEntity` database entity.\u000a- Updated `PersonListDetails` to include `phoneNumber`.\u000a- Added `phone_number` string resource.\u000a- Introduced `UstadPhoneNumberTextField` composable for phone number input with country code selection and formatting.\u000a- Integrated `UstadPhoneNumberTextField` into `PersonEditScreen`.\u000a- Displayed phone number in `PersonDetailScreen`.\u000a- Added `nationalPhoneNumSet` to `PersonEditUiState` and `onNationalPhoneNumSetChanged` to `PersonEditViewModel` to track if a national number has been entered.\u000a- Created utility classes for phone number handling:\u000a    - `PhoneNumberTransformation`: Visual transformation for formatting phone numbers as they are typed.\u000a    - `CountryCodeTransformation`: Visual transformation to prefix country codes with \"+\".\u000a    - `GuessCountryCode`: Composable function to guess the initial phone country code (platform-specific implementation needed).\u000a    - `PhoneUtils`: Utility functions for phone number character validation (platform-specific implementation needed).\u000a    - Interfaces for phone number utilities (`IPhoneNumber`, `IPhoneNumberUtil`, `IAsYouTypeFormatter`, `PhoneNumValidatorUseCase`, `OnClickPhoneNumUseCase`).\u000a- Updated database schema for `PersonEntity` to include `pPhoneNumber`.\u000a",
        "date" : "2025-09-30 10:35:58 +0530",
        "id" : "4e72dae3d2485dc6ced6c68e887abda89aa82d46",
        "msg" : "Feat: Add phone number field to Person entity and edit screen",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.android.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/CountryCodeTransformation.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtilExt.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/OnClickPhoneNumUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonEntity.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/PhoneNumberVisualTransformation.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/composites/PersonListDetails.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/1.json"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.desktop.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/UstadPhoneNumberTextField.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/edit/PersonEditViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtil.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/PersonAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/adapters/PersonAdapters.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatter.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumber.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Person.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.android.kt"
        ],
        "commitId" : "5b3c4e795e585f2ae160009f2e84864c421d456d",
        "timestamp" : 1759208770000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Feat: Implement Android phone number utilities\u000a\u000aThis commit introduces utility functions for handling phone numbers on Android.\u000a\u000aKey changes:\u000a- Added `PhoneUtils.android.kt` with constants for phone number characters (`PAUSE`, `WAIT`, `WILD`).\u000a- Implemented `isNonSeparator` function to check if a character is a non-separable phone number character.\u000a- Implemented `isReallyDialable` function to check if a character is a dialable phone number character.\u000a",
        "date" : "2025-09-30 10:36:10 +0530",
        "id" : "5b3c4e795e585f2ae160009f2e84864c421d456d",
        "msg" : "Feat: Implement Android phone number utilities",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.android.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtilAndroid.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/OnClickPhoneNumberUseCaseAndroid.kt",
          "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.desktop.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumberAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorAndroid.kt",
          "respect-app-compose/build.gradle.kts",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatterAdapterAndroid.kt",
          "gradle/libs.versions.toml",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.android.kt"
        ],
        "commitId" : "c2fd32f364b874c3696f622cd2ff23b1f01453b0",
        "timestamp" : 1759216328000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Integrate phone number formatting and validation\u000a\u000aThis commit introduces phone number formatting and validation capabilities using `libphonenumber`.\u000a\u000aKey changes:\u000a- Added `libphonenumber` dependency.\u000a- Implemented `guessInitialPhoneCountryCode` for Android and desktop to determine the initial country code based on device settings (network/SIM for Android, default locale for desktop).\u000a- Created Android-specific implementations for phone number utilities:\u000a    - `IPhoneNumberUtilAndroid`: Wraps `com.google.i18n.phonenumbers.PhoneNumberUtil`.\u000a    - `PhoneNumberAndroid`: Wraps `com.google.i18n.phonenumbers.Phonenumber.PhoneNumber`.\u000a    - `IAsYouTypeFormatterAdapterAndroid`: Adapts `com.google.i18n.phonenumbers.AsYouTypeFormatter`.\u000a    - `OnClickPhoneNumberUseCaseAndroid`: Handles clicks on phone numbers by initiating a dial intent.\u000a    - `PhoneNumValidatorAndroid`: Validates phone numbers using `IPhoneNumberUtil`.\u000a- Registered `PhoneNumberUtil` and `IPhoneNumberUtilAndroid` in the Android Koin module.\u000a- Updated `PersonDetailScreen` to conditionally display phone number and email fields only if they are present.\u000a",
        "date" : "2025-09-30 12:42:08 +0530",
        "id" : "c2fd32f364b874c3696f622cd2ff23b1f01453b0",
        "msg" : "Refactor: Integrate phone number formatting and validation",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtilAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumberAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/OnClickPhoneNumberUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.desktop.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.android.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatterAdapterAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/UstadPhoneNumberTextField.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPhoneNumberTextField.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt"
        ],
        "commitId" : "695fc2f907c54be67f1ce54f95f169444479c9d7",
        "timestamp" : 1759218239000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Rename UstadPhoneNumberTextField to RespectPhoneNumberTextField\u000a\u000aThis commit renames the composable function `UstadPhoneNumberTextField` to `RespectPhoneNumberTextField`.\u000a\u000aKey changes:\u000a- Renamed `UstadPhoneNumberTextField.kt` to `RespectPhoneNumberTextField.kt`.\u000a- Updated the function name from `UstadPhoneNumberTextField` to `RespectPhoneNumberTextField`.\u000a- Removed an unused `isPreview` variable that was checking `LocalInspectionMode.current`.\u000a- Updated call sites in `PersonEditScreen.kt` to use the new composable name.\u000a",
        "date" : "2025-09-30 13:13:59 +0530",
        "id" : "695fc2f907c54be67f1ce54f95f169444479c9d7",
        "msg" : "Refactor: Rename UstadPhoneNumberTextField to RespectPhoneNumberTextField",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/UstadPhoneNumberTextField.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPhoneNumberTextField.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/extt/IntExt.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/CountryCodeTransformation.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPersonAvatar.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/PhoneNumberVisualTransformation.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/CountryCodeTransformation.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/ModifierExt.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/PhoneUtils.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/GuessCountryCode.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/IntExt.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/PhoneNumberVisualTransformation.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPhoneNumberTextField.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.kt"
        ],
        "commitId" : "a87ffb79bab7529dacb5f1a87d24d93fe0ffa2be",
        "timestamp" : 1759220063000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Organize utility files and remove unused code\u000a\u000aThis commit reorganizes utility files by moving phone number related utilities to a dedicated `phonenum` subpackage and renames the `ext` package to `extt`. Additionally, it removes the unused `ModifierExt.kt` file and cleans up unused imports in `RespectPersonAvatar.kt` and `RespectPhoneNumberTextField.kt`.\u000a\u000aKey changes:\u000a- Moved `GuessCountryCode.kt`, `PhoneUtils.kt`, `PhoneNumberVisualTransformation.kt`, and `CountryCodeTransformation.kt` from `world.respect.app.util.ext.phonenum` to `world.respect.app.util.phonenum`.\u000a- Renamed package `world.respect.app.util.ext` to `world.respect.app.util.extt`.\u000a  - Updated package declaration in `IntExt.kt`.\u000a  - Updated import path for `rgbaColor` in `RespectPersonAvatar.kt`.\u000a- Deleted `respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/ModifierExt.kt` as it was empty.\u000a- Removed unused imports in `RespectPersonAvatar.kt`:\u000a    - `androidx.compose.foundation.layout.size`\u000a    - `androidx.compose.ui.unit.dp`\u000a- Removed unused import in `RespectPhoneNumberTextField.kt`:\u000a    - `androidx.compose.ui.platform.LocalInspectionMode`\u000a",
        "date" : "2025-09-30 13:44:23 +0530",
        "id" : "a87ffb79bab7529dacb5f1a87d24d93fe0ffa2be",
        "msg" : "Refactor: Organize utility files and remove unused code",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/ModifierExt.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/CountryCodeTransformation.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/extt/IntExt.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/PhoneUtils.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPhoneNumberTextField.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/IntExt.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/CountryCodeTransformation.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/PhoneNumberVisualTransformation.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/GuessCountryCode.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/PhoneNumberVisualTransformation.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPersonAvatar.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/util/extt/IntExt.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/adapters/PersonAdapters.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorAndroid.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.android.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.android.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumber.kt",
          "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.desktop.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/composites/PersonListDetails.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumberAndroid.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPhoneNumberTextField.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatterAdapterAndroid.kt"
        ],
        "commitId" : "9a30059e3ff4c5f2bc44711b75040d390ac57fd7",
        "timestamp" : 1759221010000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Remove trailing newlines and whitespace\u000a\u000aThis commit removes unnecessary trailing newlines and whitespace from various files.\u000a\u000aKey changes:\u000a- Removed trailing newlines from `PersonListDetails.kt` and `strings.xml`.\u000a- Trimmed whitespace and newlines in `PersonEditScreen.kt`.\u000a- Adjusted newlines in `PersonAdapters.kt`.\u000a- Removed extra newlines in `GuessCountryCode.desktop.kt`, `AppKoinModule.kt`, `IntExt.kt`, `GuessCountryCode.android.kt`, `RespectPhoneNumberTextField.kt`, `PhoneUtils.android.kt`, `IPhoneNumber.kt`, `PhoneNumberAndroid.kt`, `PhoneNumValidatorAndroid.kt`, and `IAsYouTypeFormatterAdapterAndroid.kt`.\u000a- Added a `testTag` to the phone number field in `PersonEditScreen.kt`.\u000a",
        "date" : "2025-09-30 14:00:10 +0530",
        "id" : "9a30059e3ff4c5f2bc44711b75040d390ac57fd7",
        "msg" : "Refactor: Remove trailing newlines and whitespace",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumber.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/composites/PersonListDetails.kt"
          },
          {
            "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-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumberAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.android.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/extt/IntExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.desktop.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.android.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatterAdapterAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPhoneNumberTextField.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/adapters/PersonAdapters.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/list/SchoolDirectoryListScreen.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntryEntityDao.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/adapters/SchoolEntryAdapter.kt"
        ],
        "commitId" : "1e431a9ae4bc6dca0c2e81a4c7f3d42286a572a3",
        "timestamp" : 1759227420000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Simplify School Directory Data Model and Operations\u000a\u000aThis commit refactors the school directory data handling by replacing `SchoolDirectoryEntry` with `RespectSchoolDirectory` across various layers of the application. This change simplifies the data model and streamlines related operations.\u000a\u000aKey changes:\u000a- Replaced `SchoolDirectoryEntry` with `RespectSchoolDirectory` in:\u000a    - `SchoolDirectoryListViewModel` for UI state and delete operations.\u000a    - `SchoolDirectoryEditViewModel` for UI state and adding new directories.\u000a    - `SchoolDirectoryDataSource` interface for `deleteDirectory` and `insertDirectoryEntry` methods.\u000a    - `SchoolDirectoryDataSourceRepository` for local data operations.\u000a    - `SchoolDirectoryDataSourceDb` for database interactions, including moving `deleteDirectory` and `insertDirectoryEntry` from `SchoolDirectoryEntryDataSourceDb`.\u000a    - `SchoolDirectoryListScreen` composable and its item composable.\u000a- Introduced `SchoolDirectoryAdapter.kt` with `toEntities` and `toModel` extension functions for converting between `RespectSchoolDirectory` and `SchoolDirectoryEntity`.\u000a- Updated `SchoolDirectoryEntityDao`:\u000a    - Added `deleteByUrl(url: Url)` to delete a directory by its URL.\u000a    - Added `upsert(entity: SchoolDirectoryEntity)` to insert or replace a directory entity.\u000a- Removed `deleteDirectory` and `insertDirectoryEntry` methods from `SchoolDirectoryEntryDataSource` and its implementations (`SchoolDirectoryEntryDataSourceDb`, `SchoolDirectoryEntryDataSourceHttp`, `SchoolDirectoryEntryDataSourceRepository`).\u000a- Removed `deleteByUrl` from `SchoolDirectoryEntryEntityDao` as it's now handled by `SchoolDirectoryEntityDao`.\u000a- Adjusted `SchoolDirectoryDataSourceHttp` to reflect changes in the `SchoolDirectoryDataSource` interface, though implementations for delete/insert are marked as `TODO`.\u000a",
        "date" : "2025-09-30 15:47:00 +0530",
        "id" : "1e431a9ae4bc6dca0c2e81a4c7f3d42286a572a3",
        "msg" : "Refactor: Simplify School Directory Data Model and Operations",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/adapters/SchoolEntryAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntryEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/list/SchoolDirectoryListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
        ],
        "commitId" : "dea0e8fb17d933e862424b182a7e4e45f3cad820",
        "timestamp" : 1759229115000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Rename `insertDirectoryEntry` to `insertDirectory` and implement HTTP POST\u000a\u000aThis commit refactors the `SchoolDirectoryDataSource` interface and its implementations to rename the `insertDirectoryEntry` function to `insertDirectory`. It also implements the `insertDirectory` function in `SchoolDirectoryDataSourceHttp` to perform an HTTP POST request.\u000a\u000aKey changes:\u000a- Renamed `insertDirectoryEntry` to `insertDirectory` in:\u000a    - `SchoolDirectoryDataSource.kt`\u000a    - `SchoolDirectoryDataSourceDb.kt`\u000a    - `SchoolDirectoryDataSourceRepository.kt`\u000a    - `SchoolDirectoryEditViewModel.kt` (updated the call site)\u000a- Implemented `insertDirectory` in `SchoolDirectoryDataSourceHttp.kt`:\u000a    - It now makes an HTTP POST request to the endpoint `api/directory/add` on the directory's base URL.\u000a    - Sets the `Content-Type` to `application/json`.\u000a    - Sends the `RespectSchoolDirectory` object as the request body.\u000a",
        "date" : "2025-09-30 16:15:15 +0530",
        "id" : "dea0e8fb17d933e862424b182a7e4e45f3cad820",
        "msg" : "Refactor: Rename `insertDirectoryEntry` to `insertDirectory` and implement HTTP POST",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
        ],
        "commitId" : "fc6e238357e1cdb22af694f5b3347363663f69bc",
        "timestamp" : 1759232958000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Remove extraneous new line\u000a\u000aThis commit removes an unnecessary new line from the `insertDirectory` function in `SchoolDirectoryDataSourceDb.kt`.\u000a",
        "date" : "2025-09-30 17:19:18 +0530",
        "id" : "fc6e238357e1cdb22af694f5b3347363663f69bc",
        "msg" : "Remove extraneous new line",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectAppDatabase/1.json",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/adapters/SchoolDirectoryAdapter.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/adapters/SchoolEntryAdapter.kt"
        ],
        "commitId" : "87a5993c6b0a1388431e2022a35b7b8103505c1a",
        "timestamp" : 1759261782000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Update SchoolDirectoryDataSource and related components\u000a\u000aThis commit introduces several changes to the SchoolDirectoryDataSource and its related classes to improve functionality and data handling.\u000a\u000aKey changes:\u000a- **SchoolDirectoryDataSourceDb**:\u000a    - Modified `deleteByUrl` to accept `String` instead of `Url` for the URL parameter.\u000a- **Database Schema (RespectAppDatabase/1.json)**:\u000a    - Updated the `identityHash`.\u000a    - Added `cLastModified` and `cStored` fields (INTEGER, NOT NULL) to the `SchoolDirectoryEntity` table.\u000a- **SchoolDirectoryEntityDao**:\u000a    - Changed the `deleteByUrl` function parameter from `Url` to `String`.\u000a    - Added a new query function `getLastModifiedByUrl` to retrieve the `cLastModified` timestamp for a given URL.\u000a- **SchoolDirectoryListViewModel**:\u000a    - When navigating to `SchoolDirectoryEdit` after clicking add, it now pops up to `SchoolDirectoryList`.\u000a    - After deleting a directory, `loadSchoolDirectories()` is called to refresh the list.\u000a- **SchoolDirectoryEditViewModel**:\u000a    - When saving a new school directory, the `invitePrefix` is now initialized as an empty string.\u000a    - Navigation after saving now pops up to `SchoolDirectoryList` inclusively.\u000a- **SchoolDirectoryDataSourceHttp**:\u000a    - `allDirectories()` now delegates to the local data source.\u000a    - `deleteDirectory()` now delegates to the local data source.\u000a- **File Rename**:\u000a    - Renamed `SchoolEntryAdapter.kt` to `SchoolDirectoryAdapter.kt`.\u000a",
        "date" : "2025-10-01 01:19:42 +0530",
        "id" : "87a5993c6b0a1388431e2022a35b7b8103505c1a",
        "msg" : "Refactor: Update SchoolDirectoryDataSource and related components",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/adapters/SchoolDirectoryAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectAppDatabase/1.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/adapters/SchoolEntryAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-server/src/main/kotlin/world/respect/server/routes/RespectSchoolDirectoryRoute.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectAppDatabase/1.json",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/add/AddDirectoryUseCase.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt"
        ],
        "commitId" : "b5e47717bd4ff64e96b5540c3cb48ebccbf0583e",
        "timestamp" : 1759305914000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Enhance School Directory Management and Server-Side Logic\u000a\u000aThis commit introduces significant changes to how school directories are managed, both on the client and server sides. It refines the data model, updates database interactions, and adds new server endpoints for directory operations.\u000a\u000aKey changes:\u000a- **Database Schema (RespectAppDatabase/1.json)**:\u000a    - Updated the `identityHash`.\u000a    - Removed `cLastModified` and `cStored` fields from the `SchoolDirectoryEntity` table as they are no longer used.\u000a- **SchoolDirectoryEntityDao**:\u000a    - Removed the `getLastModifiedByUrl` function, as the `cLastModified` field has been removed from the entity.\u000a- **Server-Side Logic**:\u000a    - Introduced `AddDirectoryUseCase` to handle the creation of new school directories on the server. This use case generates a random invite prefix for the new directory.\u000a    - Added `AddDirectoryUseCase` to the `ServerKoinModule`.\u000a    - Created a new POST endpoint `api/directory/adddirectory` in `RespectSchoolDirectoryRoute.kt`. This endpoint accepts a `url` query parameter and uses `AddDirectoryUseCase` to create the directory.\u000a- **SchoolDirectoryDataSourceHttp**:\u000a    - `allDirectories()`:\u000a        - Now fetches all directories from the remote server endpoint `api/directory/school` using the base URL of the first locally stored directory. It throws an `IllegalStateException` if no local directory is found to determine the base URL.\u000a    - `insertDirectory(directory: RespectSchoolDirectory)`:\u000a        - Now makes a POST request to the new `api/directory/adddirectory` endpoint.\u000a        - Instead of sending the `RespectSchoolDirectory` object in the request body, it now sends the directory's `baseUrl` as a `url` query parameter.\u000a- **SchoolDirectoryDataSourceRepository**:\u000a    - `insertDirectory(directory: RespectSchoolDirectory)`:\u000a        - Now calls `remote.insertDirectory(directory)` before inserting locally, ensuring the directory is first added via the remote data source.\u000a",
        "date" : "2025-10-01 13:35:14 +0530",
        "id" : "b5e47717bd4ff64e96b5540c3cb48ebccbf0583e",
        "msg" : "Refactor: Enhance School Directory Management and Server-Side Logic",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/add/AddDirectoryUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/routes/RespectSchoolDirectoryRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectAppDatabase/1.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt"
        ],
        "commitId" : "a534f652933a0e45a81506cc897f05962aa41c10",
        "timestamp" : 1759309152000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Update School Directory data source HTTP implementation\u000a\u000aThis commit updates `SchoolDirectoryDataSourceHttp` to correctly implement `deleteDirectory` and `insertDirectory` using HTTP DELETE and POST requests respectively. It also modifies `SchoolDirectoryDataSourceRepository` to only call the local data source for `insertDirectory`.\u000a\u000aKey changes:\u000a- **SchoolDirectoryDataSourceHttp**:\u000a    - `deleteDirectory`: Now sends an HTTP DELETE request to the `api/directory/deletedirectory` endpoint. The `RespectSchoolDirectory` object is sent in the request body with `Content-Type: application/json`.\u000a    - `insertDirectory`:\u000a        - Sends an HTTP POST request to the `api/directory/add` endpoint.\u000a        - The `RespectSchoolDirectory` object is now sent in the request body instead of as a URL parameter.\u000a        - `Content-Type` is set to `application/json`.\u000a    - `allDirectories()`: No longer throws an exception if no base URL is found locally, as this was likely a leftover from previous logic.\u000a- **SchoolDirectoryDataSourceRepository**:\u000a    - `insertDirectory`: Removed the call to `remote.insertDirectory(directory)`. Directory insertion is now only handled by the local data source within the repository layer.\u000a",
        "date" : "2025-10-01 14:29:12 +0530",
        "id" : "a534f652933a0e45a81506cc897f05962aa41c10",
        "msg" : "Refactor: Update School Directory data source HTTP implementation",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryDataSourceHttp.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
        ],
        "commitId" : "e4e5e28a7df58d1a057eefd495bb19472ccce961",
        "timestamp" : 1759309609000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Remove unused PagingSource from SchoolDirectoryEntryDataSource\u000a\u000aThis commit removes the `listAsPagingSource` function and its implementations from `SchoolDirectoryEntryDataSource` and related classes, as it is no longer used.\u000a\u000aKey changes:\u000a- Removed `listAsPagingSource` from the `SchoolDirectoryEntryDataSource` interface.\u000a- Removed the `TODO` implementation of `listAsPagingSource` from:\u000a    - `SchoolDirectoryEntryDataSourceHttp.kt`\u000a    - `SchoolDirectoryEntryDataSourceRepository.kt`\u000a    - `SchoolDirectoryEntryDataSourceDb.kt`\u000a- Removed extraneous new lines in:\u000a    - `SchoolDataSource.kt`\u000a    - `SchoolDirectoryDataSource.kt`\u000a    - `SchoolDirectoryEditScreen.kt`\u000a    - `SchoolDataSourceDb.kt`\u000a- Corrected inconsistent spacing in `ServerKoinModule.kt`.\u000a",
        "date" : "2025-10-01 14:36:49 +0530",
        "id" : "e4e5e28a7df58d1a057eefd495bb19472ccce961",
        "msg" : "Refactor: Remove unused PagingSource from SchoolDirectoryEntryDataSource",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/005_admin_user_creates_a_report_test_description.md"
        ],
        "commitId" : "93bbb079b2d93fc3e2b12f59f6382689fbfab710",
        "timestamp" : 1759757700000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "change\u000a",
        "date" : "2025-10-06 17:35:00 +0400",
        "id" : "93bbb079b2d93fc3e2b12f59f6382689fbfab710",
        "msg" : "change",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/005_admin_user_creates_a_report_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/001_003_Parent_user_join_class_using_invitecode_test_description.md"
        ],
        "commitId" : "01b4293f57ebc89437d91494779b70f94a6370cc",
        "timestamp" : 1759758151000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "change\u000a",
        "date" : "2025-10-06 17:42:31 +0400",
        "id" : "01b4293f57ebc89437d91494779b70f94a6370cc",
        "msg" : "change",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/001_003_Parent_user_join_class_using_invitecode_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
        ],
        "commitId" : "00d439fe7c899a113b2ed2517666f3b315adb45c",
        "timestamp" : 1759837527000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Remove invite code logic from data sources\u000a\u000aThis commit removes the concept of fetching directory information via an invite code directly from the `SchoolDirectoryDataSource` and its database implementation.\u000a\u000aKey changes:\u000a- **SchoolDirectoryDataSource**:\u000a    - Removed the `getInviteInfo` function from the interface, as this logic is no longer handled at this layer.\u000a- **SchoolDirectoryDataSourceDb**:\u000a    - Removed the implementation of `getDirectoryByInviteCode`, which previously queried the local database for a directory matching an invite code.\u000a",
        "date" : "2025-10-07 17:15:27 +0530",
        "id" : "00d439fe7c899a113b2ed2517666f3b315adb45c",
        "msg" : "Refactor: Remove invite code logic from data sources",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
        ],
        "commitId" : "422d3d036727e6ccb27e6d19ef783245ed0a26ff",
        "timestamp" : 1759837762000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "Refactor: Remove invite code logic from data sources\u000a\u000aThis commit removes the concept of fetching directory information via an invite code directly from the `SchoolDirectoryDataSource` and its database implementation.\u000a\u000aKey changes:\u000a- **SchoolDirectoryDataSource**:\u000a    - Removed the `getInviteInfo` function from the interface, as this logic is no longer handled at this layer.\u000a- **SchoolDirectoryDataSourceDb**:\u000a    - Removed the implementation of `getDirectoryByInviteCode`, which previously queried the local database for a directory matching an invite code.\u000a",
        "date" : "2025-10-07 17:19:22 +0530",
        "id" : "422d3d036727e6ccb27e6d19ef783245ed0a26ff",
        "msg" : "Refactor: Remove invite code logic from data sources",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/EncryptPersonPasswordUseCase.kt",
          ".gitignore",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/writequeue/DrainRemoteWriteQueueUseCase.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/PersonPasswordEntityDao.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonPasswordEntity.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/PersonPasswordAdapter.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/detail/PersonDetailViewModel.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/school/PersonPasswordDataSourceHttp.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-server/src/main/kotlin/world/respect/server/routes/school/respect/PersonPasswordRoute.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/PersonPasswordDataSourceRepository.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/EncryptPersonPasswordUseCaseImpl.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasswordDataSource.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/writequeue/WriteQueueItem.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/setusernameandpassword/SetUsernameAndPasswordViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt",
          "respect-server/src/main/kotlin/world/respect/server/Application.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/PersonPassword.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/account/setpassword/SetPasswordUseDbImpl.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/setusernameandpassword/SetUsernameAndPasswordScreen.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/PersonPasswordDataSourceDb.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSourceLocal.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasswordDataSourceLocal.kt"
        ],
        "commitId" : "9000341846c6835991396c5c0bcb938a493b01e8",
        "timestamp" : 1759972472000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial implementation of functionality to set a username and password for an existing account.\u000a",
        "date" : "2025-10-08 21:14:32 -0400",
        "id" : "9000341846c6835991396c5c0bcb938a493b01e8",
        "msg" : "Initial implementation of functionality to set a username and password for an existing account.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/account/setpassword/SetPasswordUseDbImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : ".gitignore"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/PersonPasswordDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSourceLocal.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasswordDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/writequeue/DrainRemoteWriteQueueUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/EncryptPersonPasswordUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/writequeue/WriteQueueItem.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/routes/school/respect/PersonPasswordRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/PersonPasswordAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonPasswordEntity.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/setusernameandpassword/SetUsernameAndPasswordViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/PersonPasswordEntityDao.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/PersonPassword.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/EncryptPersonPasswordUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/detail/PersonDetailViewModel.kt"
          },
          {
            "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/person/setusernameandpassword/SetUsernameAndPasswordScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/PersonPasswordDataSourceDb.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/school/PersonPasswordDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasswordDataSourceLocal.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/util/RememberDateTimeFormat.jvm.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectLocalDateField.kt",
          "gradle/libs.versions.toml",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/RememberDateTimeFormat.kt"
        ],
        "commitId" : "e7ca236cffc5e54b716b8181048a6ea8c0060243",
        "timestamp" : 1759993385000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Add email and phone number to Person entity\u000a\u000aThis commit updates the `PersonEntity` to include optional fields for `pEmail` and `pPhoneNumber`.\u000a\u000aKey changes:\u000a- Updated `gradle/libs.versions.toml` to bump the Android Gradle Plugin (agp) version from `8.12.2` to `8.12.3`.\u000a- Modified the `PersonEntity` in the database schema to add `pEmail` and `pPhoneNumber` columns.\u000a- Disabled the selection of future dates in the `RespectLocalDateField` date picker.\u000a- Added explicit parameter names to the `joinDateAndTime` lambda in `rememberFormattedDateTime`.\u000a",
        "date" : "2025-10-09 12:33:05 +0530",
        "id" : "e7ca236cffc5e54b716b8181048a6ea8c0060243",
        "msg" : "feat: Add email and phone number to Person entity",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/RememberDateTimeFormat.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/util/RememberDateTimeFormat.jvm.kt"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectLocalDateField.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/log/respect-server.log"
        ],
        "commitId" : "bd8048541b5811ba2b410fc5fca566b79eaa4052",
        "timestamp" : 1759999457000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Add email and phone number to Person entity\u000a\u000aThis commit updates the `PersonEntity` to include optional fields for `pEmail` and `pPhoneNumber`.\u000a\u000aKey changes:\u000a- Updated `gradle/libs.versions.toml` to bump the Android Gradle Plugin (agp) version from `8.12.2` to `8.12.3`.\u000a- Modified the `PersonEntity` in the database schema to add `pEmail` and `pPhoneNumber` columns.\u000a- Disabled the selection of future dates in the `RespectLocalDateField` date picker.\u000a- Added explicit parameter names to the `joinDateAndTime` lambda in `rememberFormattedDateTime`.\u000a",
        "date" : "2025-10-09 14:14:17 +0530",
        "id" : "bd8048541b5811ba2b410fc5fca566b79eaa4052",
        "msg" : "feat: Add email and phone number to Person entity",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-server/log/respect-server.log"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/SetPasswordUseCase.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/PersonPasswordEntityDao.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/account/invite/RedeemInviteUseCaseDb.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/school/PersonPasswordDataSourceHttp.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/account/setpassword/SetPasswordUseDbImpl.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/PersonPasswordDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasskeyDataSource.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/PersonPasswordDataSourceRepository.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasswordDataSource.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasswordDataSourceExt.kt",
          "respect-lib-shared/src/jvmTest/kotlin/world/respect/shared/domain/account/AuthWithPasswordIntegrationTest.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/add/AddSchoolUseCase.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/personPassword/GetPersonPassword.kt",
          "respect-lib-shared/src/jvmTest/kotlin/world/respect/domain/account/invite/RedeemInviteIntegrationTest.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/manageaccount/ManageAccountViewModel.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/personPassword/GetPersonPasswordDbImpl.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/manageaccount/ManageAccountScreen.kt"
        ],
        "commitId" : "f195b1914ca9699de24493724beb19472dd6b459",
        "timestamp" : 1760338255000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update set password logic to use school data source. Remove SetPasswordUseCase.\u000a",
        "date" : "2025-10-13 10:50:55 +0400",
        "id" : "f195b1914ca9699de24493724beb19472dd6b459",
        "msg" : "Update set password logic to use school data source. Remove SetPasswordUseCase.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/PersonPasswordEntityDao.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/personPassword/GetPersonPasswordDbImpl.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasswordDataSourceExt.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/personPassword/GetPersonPassword.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/SetPasswordUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasskeyDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/PersonPasswordDataSourceDb.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/account/setpassword/SetPasswordUseDbImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmTest/kotlin/world/respect/shared/domain/account/AuthWithPasswordIntegrationTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/add/AddSchoolUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/school/PersonPasswordDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmTest/kotlin/world/respect/domain/account/invite/RedeemInviteIntegrationTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/account/invite/RedeemInviteUseCaseDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/PersonPasswordDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/PersonPasswordDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/manageaccount/ManageAccountScreen.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/person/manageaccount/ManageAccountViewModel.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/RespectLocalDateField.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/edit/PersonEditViewModel.kt"
        ],
        "commitId" : "8b7fbbee3a9da952011e4b943fcf9fdc9e06c909",
        "timestamp" : 1760348294000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mandvi.verma",
          "fullName" : "mandvi.verma"
        },
        "authorEmail" : "mandvi.verma@sutara.org",
        "comment" : "feat: Validate date of birth on save\u000a\u000aThis commit introduces validation to prevent the date of birth from being in the future. The validation is now handled in the `PersonEditViewModel` when the save button is clicked, rather than restricting the date selection in the UI.\u000a\u000aKey changes:\u000a- Removed the future date restriction from the `RespectLocalDateField` date picker, allowing users to select any date.\u000a- Added a new string resource `date_of_birth_in_future` for the error message.\u000a- Updated `PersonEditViewModel` to validate the date of birth upon saving. If the selected date is in the future, an error message is displayed and the save is aborted.\u000a- Modified `PersonEditScreen` to display the date of birth validation error message below the input field.\u000a",
        "date" : "2025-10-13 15:08:14 +0530",
        "id" : "8b7fbbee3a9da952011e4b943fcf9fdc9e06c909",
        "msg" : "feat: Validate date of birth on save",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/edit/PersonEditViewModel.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/components/RespectLocalDateField.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/EncryptPersonPasswordUseCase.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/account/authwithpassword/GetTokenAndUserProfileWithCredentialDbImpl.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/login/LoginViewModel.kt",
          "respect-server/build.gradle.kts",
          "respect-lib-shared/build.gradle.kts",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/ext/PersonExt.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/EncryptPersonPasswordUseCaseImpl.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-app-compose/build.gradle.kts",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/changepassword/ChangePasswordScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/manageaccount/ManageAccountViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/authenticatepassword/AuthenticatePasswordUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/setusernameandpassword/SetUsernameAndPasswordViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt",
          "respect-lib-shared-se/README.md",
          "respect-lib-shared-se/src/commonMain/kotlin/world/respect/sharedse/domain/account/authenticatepassword/AuthenticatePasswordUseCaseDbImpl.kt",
          "settings.gradle.kts",
          "respect-lib-shared-se/build.gradle.kts",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/changepassword/ChangePasswordViewModel.kt",
          "respect-lib-shared/src/jvmTest/kotlin/world/respect/shared/domain/account/AuthWithPasswordIntegrationTest.kt",
          "respect-lib-shared/src/jvmTest/kotlin/world/respect/domain/account/invite/RedeemInviteIntegrationTest.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/manageaccount/ManageAccountScreen.kt"
        ],
        "commitId" : "e284c8cb62e49dab1b256d664f22675d61987a67",
        "timestamp" : 1760353983000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial implementation of password change functionality.\u000a",
        "date" : "2025-10-13 15:13:03 +0400",
        "id" : "e284c8cb62e49dab1b256d664f22675d61987a67",
        "msg" : "Initial implementation of password change functionality.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/account/authwithpassword/GetTokenAndUserProfileWithCredentialDbImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmTest/kotlin/world/respect/domain/account/invite/RedeemInviteIntegrationTest.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/authenticatepassword/AuthenticatePasswordUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "settings.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/manageaccount/ManageAccountViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/setusernameandpassword/SetUsernameAndPasswordViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/changepassword/ChangePasswordScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared-se/build.gradle.kts"
          },
          {
            "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/util/ext/PersonExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/EncryptPersonPasswordUseCase.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/login/LoginViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared-se/src/commonMain/kotlin/world/respect/sharedse/domain/account/authenticatepassword/AuthenticatePasswordUseCaseDbImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared-se/README.md"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/changepassword/ChangePasswordViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/jvmTest/kotlin/world/respect/shared/domain/account/AuthWithPasswordIntegrationTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/setpassword/EncryptPersonPasswordUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/manageaccount/ManageAccountScreen.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/person/changepassword/ChangePasswordViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/validatepassword/ValidatePasswordUseCase.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/changepassword/ChangePasswordScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/setusernameandpassword/SetUsernameAndPasswordViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/setusernameandpassword/SetUsernameAndPasswordScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/manageaccount/ManageAccountScreen.kt"
        ],
        "commitId" : "658269d4883eba01bd8ec7ad678f4a2c6dcd0dea",
        "timestamp" : 1760359282000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial implementation of password change functionality.\u000a",
        "date" : "2025-10-13 16:41:22 +0400",
        "id" : "658269d4883eba01bd8ec7ad678f4a2c6dcd0dea",
        "msg" : "Initial implementation of password change functionality.",
        "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/person/manageaccount/ManageAccountScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/setusernameandpassword/SetUsernameAndPasswordViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/changepassword/ChangePasswordViewModel.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/account/validatepassword/ValidatePasswordUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/changepassword/ChangePasswordScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/setusernameandpassword/SetUsernameAndPasswordScreen.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/app/appstate/Snack.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/changepassword/ChangePasswordViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/App.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/app/appstate/SnackBarFlowDispatcher.kt"
        ],
        "commitId" : "8ce4e297135b51b954fa62096d4069b6c29fce2d",
        "timestamp" : 1760361738000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Implement change password functionality.\u000a",
        "date" : "2025-10-13 17:22:18 +0400",
        "id" : "8ce4e297135b51b954fa62096d4069b6c29fce2d",
        "msg" : "Implement change password functionality.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/changepassword/ChangePasswordViewModel.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/app/appstate/Snack.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/App.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/app/appstate/SnackBarFlowDispatcher.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/enterlink/EnterLinkViewModel.kt",
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt",
          "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/otheroption/OtherOptionsViewModel.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/otheroption/OtherOptionsScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt",
          "respect-server/src/main/kotlin/world/respect/server/domain/school/add/AddDirectoryUseCase.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/settings/SettingViewModel.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-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntryEntityDao.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/RespectAppDataSourceDb.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/settings/SettingScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt",
          "respect-server/src/main/kotlin/world/respect/server/routes/RespectSchoolDirectoryRoute.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/adapters/SchoolDirectoryAdapter.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/list/SchoolDirectoryListScreen.kt"
        ],
        "commitId" : "528456725145a5500bbf3f763e940532768499b1",
        "timestamp" : 1760425277000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Tidy for merge:\u000a\u000a1) Revert unnecessary changes that changed formatting / white space on existing classes.\u000a2) Add button to get started other options screen.\u000a",
        "date" : "2025-10-14 11:01:17 +0400",
        "id" : "528456725145a5500bbf3f763e940532768499b1",
        "msg" : "Tidy for merge:",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryEntryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/enterlink/EnterLinkViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/list/SchoolDirectoryListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ServerKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/schooldirectory/SchoolDirectoryEntryDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/otheroption/OtherOptionsViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/routes/RespectSchoolDirectoryRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/RespectAppDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/adapters/SchoolDirectoryAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/accountlist/AccountListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/SchoolDirectoryDataSourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/schooldirectory/SchoolDirectoryEntryDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/schooldirectory/SchoolDirectoryEntryDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntityDao.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/settings/SettingViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/schooldirectory/edit/SchoolDirectoryEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/schooldirectory/daos/SchoolDirectoryEntryEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/list/SchoolDirectoryListScreen.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-server/src/main/kotlin/world/respect/server/domain/school/add/AddDirectoryUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/settings/SettingScreen.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/accountlist/AccountListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/schooldirectory/edit/SchoolDirectoryEditScreen.kt"
          },
          {
            "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/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/otheroption/OtherOptionsScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonRelatedPersonEntity.kt",
          "respect-datalayer-db/build.gradle.kts",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonEntityWithRoles.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json",
          "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/school/TestPersonStorage.kt"
        ],
        "commitId" : "3d02d77dbf608deb6b8ade256d4159a9bb43d25c",
        "timestamp" : 1760428517000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix for Person db datalayer:\u000a1) PersonRelatedPersonEntity was not set to use autogenerate primary key\u000a2) PersonEntityWithRoles had incorrectly set entityColumn.\u000a",
        "date" : "2025-10-14 11:55:17 +0400",
        "id" : "3d02d77dbf608deb6b8ade256d4159a9bb43d25c",
        "msg" : "Fix for Person db datalayer:",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonEntityWithRoles.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/PersonRelatedPersonEntity.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/school/TestPersonStorage.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/IPhoneNumberUtil.kt",
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumValidatorAndroid.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json",
          "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/phonenum/GuessCountryCode.desktop.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorUseCase.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtilExt.kt",
          "gradle/libs.versions.toml",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumberJvm.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumberAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/IPhoneNumber.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/OnClickPhoneNumberUseCaseAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt",
          "respect-server/log/respect-server.log",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumberAndroid.kt",
          "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.desktop.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatterAdapterAndroid.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumValidatorUseCase.kt",
          "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/phonenum/PhoneUtils.desktop.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/IAsYouTypeFormatter.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/CountryCodeTransformation.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/IAsYouTypeFormatterAdapterAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/PhoneUtils.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/GuessCountryCode.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumber.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatter.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/edit/PersonEditViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/OnClickPhoneNumUseCase.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/PersonAdapter.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtil.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/phonenum/PhoneUtils.android.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumberUtilJvm.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorAndroid.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/OnClickPhoneNumUseCaseJvm.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/IPhoneNumberUtilAndroid.kt",
          "respect-lib-shared/build.gradle.kts",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/phonenum/GuessCountryCode.android.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumValidatorJvm.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-app-compose/build.gradle.kts",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/IPhoneNumberUtilExt.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPhoneNumberTextField.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/extt/IntExt.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/PhoneNumberVisualTransformation.kt",
          "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/AsYouTypeFormatterJvm.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.android.kt",
          "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/OnClickPhoneNumberUseCaseAndroid.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.android.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/IntExt.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtilAndroid.kt",
          "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.desktop.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/OnClickPhoneNumUseCase.kt"
        ],
        "commitId" : "819ef3904418041d7353bfa75d4eb44787df6eff",
        "timestamp" : 1760444302000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Tidy:\u000aa) move phone number domain packages to respect-lib-shared (should not have been in respect-app-compose)\u000ab) Use libphonenumber-android on Android (as per Ustad Mobile)\u000ac) Fix package names (various classes were in com.ustadmobile instead of world.respect package).\u000ad) Fix person adapter toModel function: without this change phonenumber and email would always be lost when converting from db entity to model.\u000a",
        "date" : "2025-10-14 16:18:22 +0400",
        "id" : "819ef3904418041d7353bfa75d4eb44787df6eff",
        "msg" : "Tidy:",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtilExt.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/extt/IntExt.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/IPhoneNumberUtil.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.desktop.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumberJvm.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPhoneNumberTextField.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumberUtilJvm.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/ext/IntExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/GuessCountryCode.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/PhoneUtils.android.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/phonenum/PhoneUtils.android.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/PhoneUtils.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/OnClickPhoneNumUseCase.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.android.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumberAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtilAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumValidatorJvm.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/CountryCodeTransformation.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/AsYouTypeFormatterJvm.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumValidatorUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/phonenum/PhoneUtils.desktop.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumber.kt"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/PersonAdapter.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/IPhoneNumberUtilExt.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-server/log/respect-server.log"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IPhoneNumberUtil.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatterAdapterAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/IAsYouTypeFormatter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/edit/PersonEditViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/OnClickPhoneNumberUseCaseAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/OnClickPhoneNumUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/IAsYouTypeFormatterAdapterAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/util/phonenum/GuessCountryCode.android.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/ext/phonenum/GuessCountryCode.desktop.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/PhoneNumberAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/util/phonenum/PhoneNumberVisualTransformation.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/IPhoneNumber.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/desktopMain/kotlin/world/respect/app/util/phonenum/GuessCountryCode.desktop.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/phonenumber/IAsYouTypeFormatter.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/PhoneNumValidatorAndroid.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/phonenumber/PhoneNumValidatorUseCase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/jvmMain/kotlin/world/respect/shared/domain/phonenumber/OnClickPhoneNumUseCaseJvm.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/phonenumber/OnClickPhoneNumberUseCaseAndroid.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/androidMain/kotlin/world/respect/shared/domain/phonenumber/IPhoneNumberUtilAndroid.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPersonAvatar.kt"
        ],
        "commitId" : "a42f00643df98cca21d44e85e43cf45d8ee5a35a",
        "timestamp" : 1760444313000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix package name\u000a",
        "date" : "2025-10-14 16:18:33 +0400",
        "id" : "a42f00643df98cca21d44e85e43cf45d8ee5a35a",
        "msg" : "Fix package name",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectPersonAvatar.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/detail/PersonDetailViewModel.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
        ],
        "commitId" : "83d69840c995fb3c8b92910f74465c43bfc84113",
        "timestamp" : 1760445465000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add click phone number support.\u000a",
        "date" : "2025-10-14 16:37:45 +0400",
        "id" : "83d69840c995fb3c8b92910f74465c43bfc84113",
        "msg" : "Add click phone number support.",
        "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/person/detail/PersonDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/detail/PersonDetailViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/otheroption/OtherOptionsViewModel.kt"
        ],
        "commitId" : "ac250be2531409da89641a567a0215abd86607b9",
        "timestamp" : 1760447277000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update OtherOptionsViewModel.kt to check school URL is a valid RESPECT school URL.\u000a",
        "date" : "2025-10-14 17:07:57 +0400",
        "id" : "ac250be2531409da89641a567a0215abd86607b9",
        "msg" : "Update OtherOptionsViewModel.kt to check school URL is a valid RESPECT school URL.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/otheroption/OtherOptionsViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-util/build.gradle.kts",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/effects/NavControllerLogEffect.kt",
          "respect-lib-util/src/androidMain/kotlin/world/respect/libutil/util/PutDebugCrashCustomData.android.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/App.kt",
          "respect-lib-util/src/commonMain/kotlin/world/respect/libutil/util/PutDebugCrashCustomData.kt",
          "respect-lib-util/src/jvmMain/kotlin/world/respect/libutil/util/PutDebugCrashCustomData.jvm.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/RespectAccountManager.kt"
        ],
        "commitId" : "ee5b6d5a430a887ad28ef4c049a8f6a60124d128",
        "timestamp" : 1760449793000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Use ACRA custom data to track selected account and most recent screen\u000a",
        "date" : "2025-10-14 17:49:53 +0400",
        "id" : "ee5b6d5a430a887ad28ef4c049a8f6a60124d128",
        "msg" : "Use ACRA custom data to track selected account and most recent screen",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-lib-util/src/androidMain/kotlin/world/respect/libutil/util/PutDebugCrashCustomData.android.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/App.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-util/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/effects/NavControllerLogEffect.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-util/src/jvmMain/kotlin/world/respect/libutil/util/PutDebugCrashCustomData.jvm.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-util/src/commonMain/kotlin/world/respect/libutil/util/PutDebugCrashCustomData.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/RespectAccountManager.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "gradle/libs.versions.toml",
          "respect-app-compose/build.gradle.kts"
        ],
        "commitId" : "66669ee1a13a4afa299fbd9d31beb5275c52d78c",
        "timestamp" : 1760454912000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update Android Gradle Plugin version.\u000a",
        "date" : "2025-10-14 19:15:12 +0400",
        "id" : "66669ee1a13a4afa299fbd9d31beb5275c52d78c",
        "msg" : "Update Android Gradle Plugin version.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          },
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          }
        ]
      },
      {
        "_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/person/edit/PersonEditScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectGenderExposedDropDownMenuField.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/createaccount/CreateAccountScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/signup/SignUpScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/clazz/edit/ClazzEditScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/edit/PersonEditViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/enterpasswordsignup/EnterPasswordSignUpScreen.kt"
        ],
        "commitId" : "1665bb4fd98c5ba1a082ca15d52ef42a60ee792c",
        "timestamp" : 1760512349000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update gender dropdown and mandatory field indicators.\u000a\u000aRemove unspecified from gender dropdown\u000aMake mandatory field indicators consistent across screens (Issue #82)\u000a",
        "date" : "2025-10-15 11:12:29 +0400",
        "id" : "1665bb4fd98c5ba1a082ca15d52ef42a60ee792c",
        "msg" : "Update gender dropdown and mandatory field indicators.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/edit/PersonEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/createaccount/CreateAccountScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectGenderExposedDropDownMenuField.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/clazz/edit/ClazzEditScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/signup/SignUpScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/enterpasswordsignup/EnterPasswordSignUpScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "gradle/libs.versions.toml",
          "respect-app-compose/src/androidMain/kotlin/world/respect/RespectApp.kt"
        ],
        "commitId" : "04ddf2521a4c1bdd981c4a7dbaed7c0d6eced7c9",
        "timestamp" : 1760513152000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update Room and ACRA versions.\u000a",
        "date" : "2025-10-15 11:25:52 +0400",
        "id" : "04ddf2521a4c1bdd981c4a7dbaed7c0d6eced7c9",
        "msg" : "Update Room and ACRA versions.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "gradle/libs.versions.toml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/RespectApp.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/clazz/edit/ClazzEditScreen.kt"
        ],
        "commitId" : "972a7aaad8a4ebc78c46a5b37548d30939d09154",
        "timestamp" : 1760524357000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Remove redundant class name string.\u000a",
        "date" : "2025-10-15 14:32:37 +0400",
        "id" : "972a7aaad8a4ebc78c46a5b37548d30939d09154",
        "msg" : "Remove redundant class name string.",
        "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/clazz/edit/ClazzEditScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Enrollment.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/LearningUnitListScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Person.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCaseWorker.kt",
          "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/opds/adapters/TestOpdsPublicationEntityAdapter.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Clazz.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Report.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/PersonPassword.kt",
          "respect-lib-serializers/build.gradle.kts",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/AbstractCacheInterceptorTest.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/model/OneRosterEnrollment.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/UstadCacheBuilder.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/distributed/DistributedCacheHashtableIntegrationTest.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/model/OneRosterClass.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt",
          "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/UstadCacheBuilder.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/respect/model/SchoolDirectoryEntry.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/PersonPasskey.kt",
          "respect-lib-test/src/jvmMain/kotlin/world/respect/lib/test/clientservertest/ClientServerDatasourceTest.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt"
        ],
        "commitId" : "2b59b2e7b65ade1b59e3bfd5b1a1110e3f371a97",
        "timestamp" : 1760527161000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fixes to update dev-download branch from main: compilation/full build succeeds.\u000a",
        "date" : "2025-10-15 15:19:21 +0400",
        "id" : "2b59b2e7b65ade1b59e3bfd5b1a1110e3f371a97",
        "msg" : "Fixes to update dev-download branch from main: compilation/full build succeeds.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/PersonPassword.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/PersonPasskey.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-test/src/jvmMain/kotlin/world/respect/lib/test/clientservertest/ClientServerDatasourceTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Report.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/respect/model/SchoolDirectoryEntry.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Enrollment.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Person.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-serializers/build.gradle.kts"
          },
          {
            "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/AbstractCacheInterceptorTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/model/OneRosterEnrollment.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCaseWorker.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/ManagerServerCLI.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/jvmTest/kotlin/world/respect/datalayer/db/opds/adapters/TestOpdsPublicationEntityAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/UstadCacheBuilder.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Clazz.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/LearningUnitListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/distributed/DistributedCacheHashtableIntegrationTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/oneroster/model/OneRosterClass.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/UstadCacheBuilder.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "gradle.properties"
        ],
        "commitId" : "9c422e27004f63b77d79ae1cd608c1730514534e",
        "timestamp" : 1760528335000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Increase Gradle max memory setting org.gradle.jvmargs .\u000a",
        "date" : "2025-10-15 15:38:55 +0400",
        "id" : "9c422e27004f63b77d79ae1cd608c1730514534e",
        "msg" : "Increase Gradle max memory setting org.gradle.jvmargs .",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "gradle.properties"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseWorker.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCaseWorker.kt",
          "respect-lib-cache/build.gradle.kts",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseImpl.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueueRunDownloadJobUseCaseAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/CoroutineWorkerExt.kt"
        ],
        "commitId" : "a06f20aa542f1c91aa511ed857d93bd1c4f2bfca",
        "timestamp" : 1760538012000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial connection of run download use case to lesson detail view model.\u000a",
        "date" : "2025-10-15 18:20:12 +0400",
        "id" : "a06f20aa542f1c91aa511ed857d93bd1c4f2bfca",
        "msg" : "Initial connection of run download use case to lesson detail view model.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseWorker.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/build.gradle.kts"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueueRunDownloadJobUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/CoroutineWorkerExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCaseWorker.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/clazz/detail/ClazzDetailViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/clazz/detail/ClazzDetailScreen.kt"
        ],
        "commitId" : "751a5e6ad0a0bebc687052157c7d4663979be1fc",
        "timestamp" : 1760599462000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update ClassDetail to display add/edit options by role.\u000a",
        "date" : "2025-10-16 11:24:22 +0400",
        "id" : "751a5e6ad0a0bebc687052157c7d4663979be1fc",
        "msg" : "Update ClassDetail to display add/edit options by role.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/clazz/detail/ClazzDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/clazz/detail/ClazzDetailScreen.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/util/ext/PersonRoleEnumExt.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/detail/PersonDetailViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/edit/PersonEditViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt"
        ],
        "commitId" : "165b4ca0c3cf8336899105a2fb51e4dfe2f942cb",
        "timestamp" : 1760603788000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update person screen to support setting/showing roles.\u000a",
        "date" : "2025-10-16 12:36:28 +0400",
        "id" : "165b4ca0c3cf8336899105a2fb51e4dfe2f942cb",
        "msg" : "Update person screen to support setting/showing roles.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/edit/PersonEditScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/detail/PersonDetailViewModel.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/person/edit/PersonEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/person/detail/PersonDetailScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/util/ext/PersonRoleEnumExt.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/invite/RespectRedeemInviteRequest.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/signup/SignUpScreen.kt"
        ],
        "commitId" : "0fa1c55a15dd7a92d3280bc074679124d0ecd3d4",
        "timestamp" : 1760608809000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Avoid date of birth from showing 1900 default.\u000a",
        "date" : "2025-10-16 14:00:09 +0400",
        "id" : "0fa1c55a15dd7a92d3280bc074679124d0ecd3d4",
        "msg" : "Avoid date of birth from showing 1900 default.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/account/invite/RespectRedeemInviteRequest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/signup/SignUpScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/build.gradle.kts"
        ],
        "commitId" : "9a80cc3de76c57862e6b0524bc814ad54b11582b",
        "timestamp" : 1760609057000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Bump version\u000a",
        "date" : "2025-10-16 14:04:17 +0400",
        "id" : "9a80cc3de76c57862e6b0524bc814ad54b11582b",
        "msg" : "Bump version",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-app-compose/build.gradle.kts"
        ],
        "commitId" : "14018cebc0edbafa529fb3cca5eaed4027805648",
        "timestamp" : 1760609218000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Change database names to avoid migration crash on internal testing track.\u000a",
        "date" : "2025-10-16 14:06:58 +0400",
        "id" : "14018cebc0edbafa529fb3cca5eaed4027805648",
        "msg" : "Change database names to avoid migration crash on internal testing track.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          }
        ]
      },
      {
        "_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-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseAndroid.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectOfflineItemStatusIcon.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/UstadCacheBuilder.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationPrepareUseCase.kt",
          "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/UstadCacheBuilder.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/DbTypeConverters.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt",
          "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseJvm.kt"
        ],
        "commitId" : "4720b6e8ddf2fc4025ea975244fafd3718699830",
        "timestamp" : 1760630680000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Implement publication pin for offline content download.\u000a\u000aConnect with Learning Unit Detail screen to show status for each lesson.\u000a",
        "date" : "2025-10-16 20:04:40 +0400",
        "id" : "4720b6e8ddf2fc4025ea975244fafd3718699830",
        "msg" : "Implement publication pin for offline content download.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseJvm.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/EnqueuePinPublicationPrepareUseCaseAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/DbTypeConverters.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/UstadCacheBuilder.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectOfflineItemStatusIcon.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/UstadCacheBuilder.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/AbstractEnqueuePinPublicationPrepareUseCase.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/connectivitymonitor/ConnectivityMonitor.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/UstadCacheJvmTest.kt",
          "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/connectivitymonitor/ConnectivityMonitorJvm.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/connectivitymonitor/ConnectivityMonitorAndroid.kt",
          "respect-lib-cache/src/androidMain/AndroidManifest.xml",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptor.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/okhttp/AbstractCacheInterceptorTest.kt",
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/distributed/DistributedCacheHashtableIntegrationTest.kt"
        ],
        "commitId" : "43d6bf4070d33942f2a8fddfc9b3d7f04e4d2a1f",
        "timestamp" : 1760684721000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update lib-cache to serve any available response (even if stale) when device is known to be offline.\u000a",
        "date" : "2025-10-17 11:05:21 +0400",
        "id" : "43d6bf4070d33942f2a8fddfc9b3d7f04e4d2a1f",
        "msg" : "Update lib-cache to serve any available response (even if stale) when device is known to be offline.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/connectivitymonitor/ConnectivityMonitor.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/androidMain/AndroidManifest.xml"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/jvmMain/kotlin/com/ustadmobile/libcache/connectivitymonitor/ConnectivityMonitorJvm.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/okhttp/UstadCacheInterceptor.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.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/UstadCacheJvmTest.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/connectivitymonitor/ConnectivityMonitorAndroid.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/distributed/DistributedCacheHashtableIntegrationTest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseWorker.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCaseWorker.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt",
          "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/CoroutineWorkerExt.kt"
        ],
        "commitId" : "b5e8fef7d49d3ffa898aa3e51a5884f07ef82ad8",
        "timestamp" : 1760688638000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update pin publication prepare to include adding respect parameters on acquisition links to ensure first page opens as expected when offline.\u000a",
        "date" : "2025-10-17 12:10:38 +0400",
        "id" : "b5e8fef7d49d3ffa898aa3e51a5884f07ef82ad8",
        "msg" : "Update pin publication prepare to include adding respect parameters on acquisition links to ensure first page opens as expected when offline.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/CoroutineWorkerExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCaseWorker.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/androidMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseWorker.kt"
          },
          {
            "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/downloader/DownloadJobItemStatusUpdater.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseImpl.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt"
        ],
        "commitId" : "a6f18452eb34d06c91c6ab322042b91205bc8693",
        "timestamp" : 1760697150000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Fix showing download progress.\u000a",
        "date" : "2025-10-17 14:32:30 +0400",
        "id" : "a6f18452eb34d06c91c6ab322042b91205bc8693",
        "msg" : "Fix showing download progress.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/DownloadJobItemStatusUpdater.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/RunDownloadJobUseCaseImpl.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJobItemStatus.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectOfflineItemStatusIcon.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt"
        ],
        "commitId" : "1204438d43241d2751a11a1b75484c495595823d",
        "timestamp" : 1760699709000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Show indeterminate progress when pin publication preparation (size gathering) is underway.\u000a",
        "date" : "2025-10-17 15:15:09 +0400",
        "id" : "1204438d43241d2751a11a1b75484c495595823d",
        "msg" : "Show indeterminate progress when pin publication preparation (size gathering) is underway.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/entities/TransferJobItemStatus.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/downloader/PinPublicationPrepareUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectOfflineItemStatusIcon.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobItemDao.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/LearningUnitListScreen.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/RetentionLockDao.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCacheImpl.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt",
          "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt"
        ],
        "commitId" : "cb5d2678f53204359dfc86c6dcc2a27fe35bbeba",
        "timestamp" : 1760700888000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Implement unpin/remove downloaded item.\u000a",
        "date" : "2025-10-17 15:34:48 +0400",
        "id" : "cb5d2678f53204359dfc86c6dcc2a27fe35bbeba",
        "msg" : "Implement unpin/remove downloaded item.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/UstadCache.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/list/LearningUnitListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/DownloadJobDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/commonMain/kotlin/com/ustadmobile/libcache/db/dao/RetentionLockDao.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/kotlin/world/respect/server/Application.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/AssignmentAssigneeRefEntityDao.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentAssigneeRefEntity.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/AssignmentDataSourceLocal.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/AssignmentDataSource.kt",
          "respect-server/src/main/kotlin/world/respect/server/routes/school/respect/AssignmentRoute.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Assignment.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/AssignmentEntityDao.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/RespectSchoolDatabase.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/AssignmentLearningResourceRefEntityDao.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentLearningResourceRefEntity.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentEntity.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/AssignmentDatasourceDb.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/AssignmentAdapter.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
        ],
        "commitId" : "c719bd67b2ada429f2c1f90e5c8390064c16fa8d",
        "timestamp" : 1760710741000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial implementation of assignment datasource-db.\u000a",
        "date" : "2025-10-17 18:19:01 +0400",
        "id" : "c719bd67b2ada429f2c1f90e5c8390064c16fa8d",
        "msg" : "Initial implementation of assignment datasource-db.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentAssigneeRefEntity.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentLearningResourceRefEntity.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/AssignmentDataSourceLocal.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentEntity.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/routes/school/respect/AssignmentRoute.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/AssignmentDatasourceDb.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/AssignmentAssigneeRefEntityDao.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/AssignmentEntityDao.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/AssignmentAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/RespectSchoolDatabase.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/AssignmentLearningResourceRefEntityDao.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/AssignmentDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Assignment.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Assignment.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentAssigneeRefEntity.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentLearningResourceRef.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/SchoolTypeConverters.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentAssigneeRefTypeEnum.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/AssignmentAdapter.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentAssigneeRef.kt"
        ],
        "commitId" : "ef34eaa06a8e06485ae10e89f18183485e14316e",
        "timestamp" : 1760711442000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Initial implementation of assignment datasource-db.\u000a",
        "date" : "2025-10-17 18:30:42 +0400",
        "id" : "ef34eaa06a8e06485ae10e89f18183485e14316e",
        "msg" : "Initial implementation of assignment datasource-db.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentAssigneeRefEntity.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Assignment.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/AssignmentAdapter.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentLearningResourceRef.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/SchoolTypeConverters.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentAssigneeRef.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentAssigneeRefTypeEnum.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/composeResources/values/strings.xml",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/writequeue/DrainRemoteWriteQueueUseCase.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/list/AssignmentListViewModel.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Assignment.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/edit/AssignmentEditScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/writequeue/WriteQueueItem.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/AssignmentDatasourceDb.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/list/AssignmentListScreen.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/school/AssignmentDataSourceHttp.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/domain/school/SchoolPrimaryKeyGenerator.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/AssignmentDataSourceRepository.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/AssignmentDataSource.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignments/AssignmentViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/App.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignments/AssignmentScreen.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/AssignmentEntityDao.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSourceLocal.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentEntity.kt"
        ],
        "commitId" : "518986739c5562cb78996473800e8d924bafd763",
        "timestamp" : 1760772575000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Assignment work in progress: make deadline optional. Add assignee dropdown with filtered options.\u000a",
        "date" : "2025-10-18 11:29:35 +0400",
        "id" : "518986739c5562cb78996473800e8d924bafd763",
        "msg" : "Assignment work in progress: make deadline optional. Add assignee dropdown with filtered options.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/writequeue/DrainRemoteWriteQueueUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/school/AssignmentDataSourceHttp.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignments/AssignmentScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Assignment.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/writequeue/WriteQueueItem.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/edit/AssignmentEditScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/list/AssignmentListViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/list/AssignmentListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/App.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/AssignmentEntity.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/AssignmentDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.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/navigation/AppRoutes.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/domain/school/SchoolPrimaryKeyGenerator.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/AssignmentEntityDao.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/AssignmentDataSourceRepository.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignments/AssignmentViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/AssignmentDatasourceDb.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSourceLocal.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/assignment/edit/AssignmentEditScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectLocalDateTimeField.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectLocalTimeField.kt"
        ],
        "commitId" : "2f326666f1260b5f50c3e64813ad2eb14c029b99",
        "timestamp" : 1760790999000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add combined datetime field.\u000a",
        "date" : "2025-10-18 16:36:39 +0400",
        "id" : "2f326666f1260b5f50c3e64813ad2eb14c029b99",
        "msg" : "Add combined datetime field.",
        "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/assignment/edit/AssignmentEditScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectLocalDateTimeField.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectLocalTimeField.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/waitingforapproval/WaitingForApprovalViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/RespectComposeNavController.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/acknowledgement/AcknowledgementViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/login/LoginViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/NavCommand.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/app/App.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/edit/AssignmentEditScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectLocalDateTimeField.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/RouteWithResultDest.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt"
        ],
        "commitId" : "9d1b2138101f30d347fb2eb93717290adeba8598",
        "timestamp" : 1760803639000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Assignment work in progress: add additional pop/return support.\u000a",
        "date" : "2025-10-18 20:07:19 +0400",
        "id" : "9d1b2138101f30d347fb2eb93717290adeba8598",
        "msg" : "Assignment work in progress: add additional pop/return support.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/acknowledgement/AcknowledgementViewModel.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/apps/launcher/AppLauncherViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/waitingforapproval/WaitingForApprovalViewModel.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/commonMain/kotlin/world/respect/shared/navigation/NavCommand.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectLocalDateTimeField.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/RespectComposeNavController.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/RouteWithResultDest.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/login/LoginViewModel.kt"
          },
          {
            "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/assignment/edit/AssignmentEditScreen.kt"
          },
          {
            "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"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-opds-model/src/commonMain/kotlin/world/respect/lib/opds/model/OpdsPublicationExt.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/NavResult.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentLearningResourceRef.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentLearningUnitRef.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/NavResultReturnerExt.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Assignment.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/LearningUnitResult.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/edit/AssignmentEditScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/AssignmentAdapter.kt"
        ],
        "commitId" : "cdeb5fad53be1a1fb7f2b43b6646186a3a7f40dc",
        "timestamp" : 1760847498000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Assignment work in progress: handle selection of a learning unit for assignment. Save assignee class name on click.\u000a",
        "date" : "2025-10-19 08:18:18 +0400",
        "id" : "cdeb5fad53be1a1fb7f2b43b6646186a3a7f40dc",
        "msg" : "Assignment work in progress: handle selection of a learning unit for assignment. Save assignee class name on click.",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentLearningUnitRef.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/NavResultReturnerExt.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/AssignmentAdapter.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/navigation/NavResult.kt"
          },
          {
            "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/viewmodel/assignment/edit/AssignmentEditViewModel.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/assignment/edit/AssignmentEditScreen.kt"
          },
          {
            "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/kotlin/world/respect/shared/viewmodel/learningunit/LearningUnitResult.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/Assignment.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/AssignmentLearningResourceRef.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/clazz/list/ClazzListViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/list/AssignmentListViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/detail/AssignmentDetailScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/person/list/PersonListViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppBar.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/AppKoinModule.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/LearningUnitResult.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/clazz/detail/ClazzDetailViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/detail/AssignmentDetailViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/report/list/ReportListViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppNavHost.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/LearningUnitSelection.kt"
        ],
        "commitId" : "89727f6a751552c3f3a4f0e1e866134b519fb5f6",
        "timestamp" : 1760855225000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Assignment work in progress and make back arrow display consistent\u000a Edit screen save/restore runs as expected.\u000a Back arrow: remove use of root screen logic. Explicitly set hide using app ui state.\u000a",
        "date" : "2025-10-19 10:27:05 +0400",
        "id" : "89727f6a751552c3f3a4f0e1e866134b519fb5f6",
        "msg" : "Assignment work in progress and make back arrow display consistent",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/list/AssignmentListViewModel.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/apps/launcher/AppLauncherViewModel.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/person/list/PersonListViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/detail/AssignmentDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/AppBar.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/report/list/ReportListViewModel.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/LearningUnitResult.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/clazz/list/ClazzListViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/LearningUnitSelection.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/clazz/detail/ClazzDetailViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/detail/AssignmentDetailScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/list/AssignmentListViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/list/AssignmentListScreen.kt"
        ],
        "commitId" : "9712886096895870111c04742d1551cd6bc00cc7",
        "timestamp" : 1760858310000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Assignment list implementation.\u000a",
        "date" : "2025-10-19 11:18:30 +0400",
        "id" : "9712886096895870111c04742d1551cd6bc00cc7",
        "msg" : "Assignment list implementation.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/list/AssignmentListScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/list/AssignmentListViewModel.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-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectQuickActionButton.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/detail/AssignmentDetailScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/list/AssignmentListViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/edit/AssignmentEditViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/learningunit/detail/LearningUnitDetailScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/detail/AssignmentDetailViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/list/LearningUnitListViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/learningunit/LearningUnitSelection.kt"
        ],
        "commitId" : "6847da1c70d316e68ecac5aae6bb554d504ce530",
        "timestamp" : 1760865898000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Implement assign button on Learning Unit Detail screen\u000a",
        "date" : "2025-10-19 13:24:58 +0400",
        "id" : "6847da1c70d316e68ecac5aae6bb554d504ce530",
        "msg" : "Implement assign button on Learning Unit Detail screen",
        "paths" : [
          {
            "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/assignment/edit/AssignmentEditViewModel.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/viewmodel/learningunit/LearningUnitSelection.kt"
          },
          {
            "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/viewmodel/learningunit/detail/LearningUnitDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/RespectQuickActionButton.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/detail/AssignmentDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/detail/AssignmentDetailScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/list/AssignmentListViewModel.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/assignment/edit/AssignmentEditViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/assignment/detail/AssignmentDetailViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/edit/AssignmentEditScreen.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/detail/AssignmentDetailScreen.kt"
        ],
        "commitId" : "2d05428e9a8dbf552228b7a460076685b67ddb1d",
        "timestamp" : 1760873865000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Assignment detail screen implementation.\u000a",
        "date" : "2025-10-19 15:37:45 +0400",
        "id" : "2d05428e9a8dbf552228b7a460076685b67ddb1d",
        "msg" : "Assignment detail screen implementation.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/detail/AssignmentDetailScreen.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/assignment/detail/AssignmentDetailViewModel.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/assignment/edit/AssignmentEditScreen.kt"
          },
          {
            "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-shared/src/commonMain/kotlin/world/respect/shared/navigation/AppRoutes.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/termsandcondition/TermsAndConditionScreen.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/accountlist/AccountListViewModel.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/webview/UstadWebViewNavigator.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/acknowledgement/AcknowledgementViewModel.kt",
          "respect-app-compose/src/desktopMain/kotlin/world/respect/app/components/BasicWebView.desktop.kt",
          "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/BasicWebView.android.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/BasicWebView.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/onboarding/OnboardingViewModel.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/getstarted/GetStartedViewModel.kt"
        ],
        "commitId" : "f8482f3f077d51dcdcd03feb79cc1b68539f6441",
        "timestamp" : 1760876190000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add terms/conditions text.\u000aFix visibility of back button on get started screen.\u000a",
        "date" : "2025-10-19 16:16:30 +0400",
        "id" : "f8482f3f077d51dcdcd03feb79cc1b68539f6441",
        "msg" : "Add terms/conditions text.",
        "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/components/BasicWebView.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/acknowledgement/AcknowledgementViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/desktopMain/kotlin/world/respect/app/components/BasicWebView.desktop.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/onboarding/OnboardingViewModel.kt"
          },
          {
            "editType" : "delete",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/components/webview/UstadWebViewNavigator.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/manageuser/termsandcondition/TermsAndConditionScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-app-compose/src/androidMain/kotlin/world/respect/app/components/BasicWebView.android.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/commonMain/kotlin/world/respect/shared/viewmodel/manageuser/getstarted/GetStartedViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.kt"
        ],
        "commitId" : "acf786dc3bcf2ed666b73c4a9ae34621fa296767",
        "timestamp" : 1760877008000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add terms/conditions text.\u000aFix visibility of back button on get started screen.\u000a",
        "date" : "2025-10-19 16:30:08 +0400",
        "id" : "acf786dc3bcf2ed666b73c4a9ae34621fa296767",
        "msg" : "Add terms/conditions text.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-lib-cache/src/jvmTest/kotlin/com/ustadmobile/libcache/downloader/DownloadIntegrationTest.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-server/src/main/kotlin/world/respect/server/Application.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/writequeue/DrainRemoteWriteQueueUseCase.kt",
          "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/SchoolAppAdapter.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/detail/AppsDetailViewModel.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/SchoolDataSourceDb.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/SchoolAppEntity.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/launcher/AppLauncherScreen.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/SchoolAppDataSource.kt",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt",
          "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/school/SchoolAppDataSourceHttp.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/SchoolAppDataSourceLocal.kt",
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/App.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/RespectSchoolDatabase.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSourceLocal.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/writequeue/WriteQueueItem.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/SchoolApp.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/SchoolAppDataSourceDb.kt",
          "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/SchoolAppDataSourceRepository.kt",
          "respect-server/src/main/kotlin/world/respect/server/routes/school/respect/SchoolAppRoute.kt",
          "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/SchoolAppEntityDao.kt",
          "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
        ],
        "commitId" : "ea301d8adce33f14d884ab1c6266e8ad879801fd",
        "timestamp" : 1760905045000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add/remove app is per school and saved to server.\u000a",
        "date" : "2025-10-20 00:17:25 +0400",
        "id" : "ea301d8adce33f14d884ab1c6266e8ad879801fd",
        "msg" : "Add/remove app is per school and saved to server.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/SchoolDataSourceHttp.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/app/App.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/entities/SchoolAppEntity.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/school/SchoolAppDataSourceRepository.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-http/src/commonMain/kotlin/world/respect/datalayer/http/school/SchoolAppDataSourceHttp.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/launcher/AppLauncherScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/model/SchoolApp.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/SchoolAppDataSource.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/writequeue/WriteQueueItem.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/SchoolAppDataSourceDb.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-server/src/main/kotlin/world/respect/server/routes/school/respect/SchoolAppRoute.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/RespectSchoolDatabase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSourceLocal.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-server/src/main/kotlin/world/respect/server/Application.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/school/writequeue/DrainRemoteWriteQueueUseCase.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-db/schemas/world.respect.datalayer.db.RespectSchoolDatabase/7.json"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/SchoolDataSource.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer/src/commonMain/kotlin/world/respect/datalayer/school/SchoolAppDataSourceLocal.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-datalayer-repository/src/commonMain/kotlin/world/respect/datalayer/repository/SchoolDataSourceRepository.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/adapters/SchoolAppAdapter.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-datalayer-db/src/commonMain/kotlin/world/respect/datalayer/db/school/daos/SchoolAppEntityDao.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/launcher/AppLauncherScreen.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-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.kt"
        ],
        "commitId" : "fae2f77392771f02fcd612139dc3d036ac757986",
        "timestamp" : 1760907322000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Restrict add/remove app to system admin.\u000a",
        "date" : "2025-10-20 00:55:22 +0400",
        "id" : "fae2f77392771f02fcd612139dc3d036ac757986",
        "msg" : "Restrict add/remove app to system admin.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/detail/AppsDetailScreen.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/launcher/AppLauncherScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/build.gradle.kts"
        ],
        "commitId" : "dcaaca528eeac971519502f09699273943a939f5",
        "timestamp" : 1760907371000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Bump version.\u000a",
        "date" : "2025-10-20 00:56:11 +0400",
        "id" : "dcaaca528eeac971519502f09699273943a939f5",
        "msg" : "Bump version.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/build.gradle.kts"
          }
        ]
      },
      {
        "_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/launcher/AppLauncherScreen.kt",
          "respect-lib-shared/src/commonMain/composeResources/drawable/empty.png",
          "respect-lib-shared/src/commonMain/kotlin/world/respect/shared/viewmodel/apps/launcher/AppLauncherViewModel.kt"
        ],
        "commitId" : "bbf2146ac96aafb5ab1da49c3199bc3d5c1de317",
        "timestamp" : 1761571357000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/nikunj.sharma",
          "fullName" : "nikunj.sharma"
        },
        "authorEmail" : "nikunj.sharma@sutara.org",
        "comment" : "empty app list error messages and icon change\u000a",
        "date" : "2025-10-27 18:52:37 +0530",
        "id" : "bbf2146ac96aafb5ab1da49c3199bc3d5c1de317",
        "msg" : "empty app list error messages and icon change",
        "paths" : [
          {
            "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/composeResources/values/strings.xml"
          },
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/launcher/AppLauncherScreen.kt"
          },
          {
            "editType" : "add",
            "file" : "respect-lib-shared/src/commonMain/composeResources/drawable/empty.png"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/launcher/AppLauncherScreen.kt",
          "respect-lib-shared/src/commonMain/composeResources/drawable/empty.png"
        ],
        "commitId" : "707e4c0d97fc63bd0bdb5b065fdc6692a2e1be4f",
        "timestamp" : 1761579352000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/nikunj.sharma",
          "fullName" : "nikunj.sharma"
        },
        "authorEmail" : "nikunj.sharma@sutara.org",
        "comment" : "image change\u000a",
        "date" : "2025-10-27 21:05:52 +0530",
        "id" : "707e4c0d97fc63bd0bdb5b065fdc6692a2e1be4f",
        "msg" : "image change",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/launcher/AppLauncherScreen.kt"
          },
          {
            "editType" : "edit",
            "file" : "respect-lib-shared/src/commonMain/composeResources/drawable/empty.png"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/launcher/AppLauncherScreen.kt"
        ],
        "commitId" : "170d7c4772791cc9a8e94ca81f9d2f10b670d502",
        "timestamp" : 1761639447000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/nikunj.sharma",
          "fullName" : "nikunj.sharma"
        },
        "authorEmail" : "nikunj.sharma@sutara.org",
        "comment" : "padding added\u000a",
        "date" : "2025-10-28 13:47:27 +0530",
        "id" : "170d7c4772791cc9a8e94ca81f9d2f10b670d502",
        "msg" : "padding added",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-app-compose/src/commonMain/kotlin/world/respect/app/view/apps/launcher/AppLauncherScreen.kt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/README.md"
        ],
        "commitId" : "558f42d85aba693ee330beaeffb9af71ca773ec5",
        "timestamp" : 1761665441000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Update test scenarios list to match with current primary branch.\u000a",
        "date" : "2025-10-28 19:30:41 +0400",
        "id" : "558f42d85aba693ee330beaeffb9af71ca773ec5",
        "msg" : "Update test scenarios list to match with current primary branch.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/README.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "README.md"
        ],
        "commitId" : "ad6085be5d8078d443a3a324826d9e0bdd72e2b2",
        "timestamp" : 1761737269000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/mike",
          "fullName" : "Mike Dawson"
        },
        "authorEmail" : "mike@ustadmobile.com",
        "comment" : "Add community slack link to README.md\u000a",
        "date" : "2025-10-29 15:27:49 +0400",
        "id" : "ad6085be5d8078d443a3a324826d9e0bdd72e2b2",
        "msg" : "Add community slack link to README.md",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "README.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/002_browse_lessons_test_description.md"
        ],
        "commitId" : "8d9a3a31eda6a2ff60d53f07244fb8bafca2337d",
        "timestamp" : 1761745418000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Updated 002\u000a",
        "date" : "2025-10-29 17:43:38 +0400",
        "id" : "8d9a3a31eda6a2ff60d53f07244fb8bafca2337d",
        "msg" : "Updated 002",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/002_browse_lessons_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/README.md",
          "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md",
          "respect-test-end-to-end/test-description/005_admin_user_creates_a_report_test_description.md",
          "respect-test-end-to-end/test-description/004_admin_user_adds_classes_test_description.md",
          "respect-test-end-to-end/test-description/001_003_login_using_school_link_test_description.md",
          "respect-test-end-to-end/test-description/006_admin_user_adds_person_account_test_description.md",
          "respect-test-end-to-end/test-description/001_004_child_user_join_class_using_invitecode_test_description.md",
          "respect-test-end-to-end/test-description/001_001_user_login_to _app_with_school_name_test_description.md",
          "respect-test-end-to-end/test-description/001_003_Parent_user_join_class_using_invitecode_test_description.md",
          "respect-test-end-to-end/test-description/001_002_user_login_to _app_with_school_link_provided_by_admin_test_description.md",
          "respect-test-end-to-end/test-description/001_001_invite_using_invite_code_test_description.md",
          "respect-test-end-to-end/test-description/001_002_add_user_direct_test_description.md",
          "respect-test-end-to-end/test-description/004_create_report_test_description.md",
          "respect-test-end-to-end/android-maestro/run_test.sh"
        ],
        "commitId" : "dc0b2f877c6bcbe5baa2c8f3c07df856557c1a86",
        "timestamp" : 1761746965000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Updated test descriptions\u000a",
        "date" : "2025-10-29 18:09:25 +0400",
        "id" : "dc0b2f877c6bcbe5baa2c8f3c07df856557c1a86",
        "msg" : "Updated test descriptions",
        "paths" : [
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/006_admin_user_adds_person_account_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/001_002_add_user_direct_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/004_admin_user_adds_classes_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/001_001_user_login_to _app_with_school_name_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/001_003_Parent_user_join_class_using_invitecode_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/001_004_child_user_join_class_using_invitecode_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/001_001_invite_using_invite_code_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/001_002_user_login_to _app_with_school_link_provided_by_admin_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/005_admin_user_creates_a_report_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/README.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/android-maestro/run_test.sh"
          },
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/001_003_login_using_school_link_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/004_create_report_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/001_002_add_user_direct_test_description.md",
          "respect-test-end-to-end/test-description/001_001_invite_using_invite_code_test_description.md",
          "respect-test-end-to-end/test-description/001_003_login_using_school_link_test_description.md"
        ],
        "commitId" : "60313610a2ea3ba01292129a0860a0acda687cfc",
        "timestamp" : 1761747132000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Updated test descriptions\u000a",
        "date" : "2025-10-29 18:12:12 +0400",
        "id" : "60313610a2ea3ba01292129a0860a0acda687cfc",
        "msg" : "Updated test descriptions",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/001_001_invite_using_invite_code_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/001_003_login_using_school_link_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/001_002_add_user_direct_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md"
        ],
        "commitId" : "7b0c4d8d28ace4069bedcc871f20eb21e1496726",
        "timestamp" : 1761749329000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Updated test descriptions - 003\u000a",
        "date" : "2025-10-29 18:48:49 +0400",
        "id" : "7b0c4d8d28ace4069bedcc871f20eb21e1496726",
        "msg" : "Updated test descriptions - 003",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/006_user_signup_using_passkey_test_description.md"
        ],
        "commitId" : "64ed9dccd121cbcc00887385027569a75b75a546",
        "timestamp" : 1761752467000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Updated test descriptions - 006\u000a",
        "date" : "2025-10-29 19:41:07 +0400",
        "id" : "64ed9dccd121cbcc00887385027569a75b75a546",
        "msg" : "Updated test descriptions - 006",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/006_user_signup_using_passkey_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/001_001_invite_using_invite_code_test_description.md",
          "respect-test-end-to-end/test-description/006_user_signup_using_passkey_test_description.md",
          "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md",
          "respect-test-end-to-end/test-description/001_002_add_user_direct_test_description.md"
        ],
        "commitId" : "a526e76139954e053eca6a07d7e85d3cdd2c4f26",
        "timestamp" : 1761752715000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "Cleanup\u000a",
        "date" : "2025-10-29 19:45:15 +0400",
        "id" : "a526e76139954e053eca6a07d7e85d3cdd2c4f26",
        "msg" : "Cleanup",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/001_001_invite_using_invite_code_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/006_user_signup_using_passkey_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/001_002_add_user_direct_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/README.md"
        ],
        "commitId" : "e19d1a1c2d74db37e9a4c795dfc8d227ed1d6760",
        "timestamp" : 1761752835000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "link updated\u000a",
        "date" : "2025-10-29 19:47:15 +0400",
        "id" : "e19d1a1c2d74db37e9a4c795dfc8d227ed1d6760",
        "msg" : "link updated",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/README.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "respect-test-end-to-end/test-description/003_teacher_user_assigns_assignment_to_a_class_test_description.md",
          "respect-test-end-to-end/README.md",
          "respect-test-end-to-end/test-description/001_001_invite_using_invite_code_test_description.md",
          "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md"
        ],
        "commitId" : "5b731a5b46c1fee5107d0010667a5555864b5b34",
        "timestamp" : 1761811043000,
        "author" : {
          "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/pooja",
          "fullName" : "Pooja Ravi"
        },
        "authorEmail" : "pooja@ustadmobile.com",
        "comment" : "updated\u000a",
        "date" : "2025-10-30 11:57:23 +0400",
        "id" : "5b731a5b46c1fee5107d0010667a5555864b5b34",
        "msg" : "updated",
        "paths" : [
          {
            "editType" : "add",
            "file" : "respect-test-end-to-end/test-description/003_teacher_user_assigns_assignment_to_a_class_test_description.md"
          },
          {
            "editType" : "delete",
            "file" : "respect-test-end-to-end/test-description/003_admin_user_assigns_assignment_to_a_class_test_description.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/README.md"
          },
          {
            "editType" : "edit",
            "file" : "respect-test-end-to-end/test-description/001_001_invite_using_invite_code_test_description.md"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "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"
    },
    {
      "absoluteUrl" : "https://devserver3.ustadmobile.com/jenkins/user/nikunj.sharma",
      "fullName" : "nikunj.sharma"
    }
  ]
}