gitextract_31rkx6m_/ ├── .circleci/ │ └── config.yml ├── .codecov.yml ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── 1-bug-report.yml │ │ ├── 2-feature-request.yml │ │ └── config.yml │ └── dependabot.yml ├── .gitignore ├── .gitmodules ├── .hound.yml ├── .rspec ├── .rubocop.unhound.yml ├── .rubocop.yml ├── .yardopts ├── CONTRIBUTING.md ├── Gemfile ├── LICENSE ├── README.md ├── Rakefile ├── app/ │ ├── README.md │ ├── assets/ │ │ └── config/ │ │ └── manifest.js │ ├── channels/ │ │ ├── application_cable/ │ │ │ ├── channel.rb │ │ │ └── connection.rb │ │ ├── concerns/ │ │ │ ├── application_cable_ability_concern.rb │ │ │ ├── application_cable_authentication_concern.rb │ │ │ ├── application_cable_component_concern.rb │ │ │ ├── application_cable_course_concern.rb │ │ │ └── application_cable_multitenancy_concern.rb │ │ └── course/ │ │ ├── channel.rb │ │ └── monitoring/ │ │ ├── heartbeat_channel.rb │ │ └── live_monitoring_channel.rb │ ├── controllers/ │ │ ├── announcements_controller.rb │ │ ├── application_controller.rb │ │ ├── attachment_references_controller.rb │ │ ├── components/ │ │ │ └── course/ │ │ │ ├── achievements_component.rb │ │ │ ├── announcements_component.rb │ │ │ ├── assessments_component.rb │ │ │ ├── codaveri_component.rb │ │ │ ├── controller_component_host.rb │ │ │ ├── discussion/ │ │ │ │ └── topics_component.rb │ │ │ ├── duplication_component.rb │ │ │ ├── experience_points_component.rb │ │ │ ├── forums_component.rb │ │ │ ├── groups_component.rb │ │ │ ├── koditsu_platform_component.rb │ │ │ ├── leaderboard_component.rb │ │ │ ├── learning_map_component.rb │ │ │ ├── lesson_plan_component.rb │ │ │ ├── levels_component.rb │ │ │ ├── materials_component.rb │ │ │ ├── monitoring_component.rb │ │ │ ├── multiple_reference_timelines_component.rb │ │ │ ├── plagiarism_component.rb │ │ │ ├── rag_wise_component.rb │ │ │ ├── scholaistic_component.rb │ │ │ ├── settings_component.rb │ │ │ ├── statistics_component.rb │ │ │ ├── stories_component.rb │ │ │ ├── survey_component.rb │ │ │ ├── users_component.rb │ │ │ └── videos_component.rb │ │ ├── concerns/ │ │ │ ├── application_ability_concern.rb │ │ │ ├── application_announcements_concern.rb │ │ │ ├── application_authentication_concern.rb │ │ │ ├── application_components_concern.rb │ │ │ ├── application_controller_multitenancy_concern.rb │ │ │ ├── application_instance_user_concern.rb │ │ │ ├── application_internationalization_concern.rb │ │ │ ├── application_multitenancy.rb │ │ │ ├── application_pagination_concern.rb │ │ │ ├── application_user_concern.rb │ │ │ ├── application_user_time_zone_concern.rb │ │ │ ├── codaveri_language_concern.rb │ │ │ ├── course/ │ │ │ │ ├── achievement_conditional_concern.rb │ │ │ │ ├── activity_feeds_concern.rb │ │ │ │ ├── assessment/ │ │ │ │ │ ├── answer/ │ │ │ │ │ │ └── update_answer_concern.rb │ │ │ │ │ ├── koditsu_assessment_concern.rb │ │ │ │ │ ├── koditsu_assessment_invitation_concern.rb │ │ │ │ │ ├── live_feedback/ │ │ │ │ │ │ ├── file_concern.rb │ │ │ │ │ │ ├── message_concern.rb │ │ │ │ │ │ ├── message_file_concern.rb │ │ │ │ │ │ └── thread_concern.rb │ │ │ │ │ ├── monitoring/ │ │ │ │ │ │ └── seb_payload_concern.rb │ │ │ │ │ ├── monitoring_concern.rb │ │ │ │ │ ├── question/ │ │ │ │ │ │ ├── codaveri_question_concern.rb │ │ │ │ │ │ ├── koditsu_question_concern.rb │ │ │ │ │ │ ├── multiple_responses_concern.rb │ │ │ │ │ │ ├── rubric_based_response_controller_concern.rb │ │ │ │ │ │ └── rubric_based_response_question_concern.rb │ │ │ │ │ ├── question_bundle_assignment_concern.rb │ │ │ │ │ ├── submission/ │ │ │ │ │ │ ├── koditsu/ │ │ │ │ │ │ │ ├── answers_concern.rb │ │ │ │ │ │ │ ├── submission_times_concern.rb │ │ │ │ │ │ │ ├── submissions_concern.rb │ │ │ │ │ │ │ ├── test_cases_concern.rb │ │ │ │ │ │ │ └── users_concern.rb │ │ │ │ │ │ ├── monitoring_concern.rb │ │ │ │ │ │ └── submissions_controller_service_concern.rb │ │ │ │ │ └── submission_concern.rb │ │ │ │ ├── assessment_conditional_concern.rb │ │ │ │ ├── cikgo_chats_concern.rb │ │ │ │ ├── cikgo_push_concern.rb │ │ │ │ ├── discussion/ │ │ │ │ │ └── posts_concern.rb │ │ │ │ ├── forum/ │ │ │ │ │ ├── auto_answering_concern.rb │ │ │ │ │ ├── topic_controller_hiding_concern.rb │ │ │ │ │ ├── topic_controller_locking_concern.rb │ │ │ │ │ └── topic_controller_subscription_concern.rb │ │ │ │ ├── group/ │ │ │ │ │ └── group_manager_concern.rb │ │ │ │ ├── koditsu_workspace_concern.rb │ │ │ │ ├── lesson_plan/ │ │ │ │ │ ├── acts_as_lesson_plan_item_concern.rb │ │ │ │ │ ├── learning_rate_concern.rb │ │ │ │ │ ├── personalization_concern.rb │ │ │ │ │ ├── stories_concern.rb │ │ │ │ │ └── strategies/ │ │ │ │ │ ├── base_personalization_strategy.rb │ │ │ │ │ ├── fixed_personalization_strategy.rb │ │ │ │ │ ├── fomo_personalization_strategy.rb │ │ │ │ │ ├── otot_personalization_strategy.rb │ │ │ │ │ └── stragglers_personalization_strategy.rb │ │ │ │ ├── reminder_service_concern.rb │ │ │ │ ├── scholaistic/ │ │ │ │ │ └── concern.rb │ │ │ │ ├── ssid_folder_concern.rb │ │ │ │ ├── statistics/ │ │ │ │ │ ├── counts_concern.rb │ │ │ │ │ ├── grades_concern.rb │ │ │ │ │ ├── reference_times_concern.rb │ │ │ │ │ ├── submissions_concern.rb │ │ │ │ │ ├── times_concern.rb │ │ │ │ │ └── users_concern.rb │ │ │ │ ├── survey/ │ │ │ │ │ └── reordering_concern.rb │ │ │ │ ├── unread_counts_concern.rb │ │ │ │ └── users_controller_management_concern.rb │ │ │ └── signals/ │ │ │ ├── emission_concern.rb │ │ │ └── slices/ │ │ │ ├── announcements.rb │ │ │ ├── assessment_submissions.rb │ │ │ ├── cikgo_mission_control.rb │ │ │ ├── cikgo_open_threads_count.rb │ │ │ ├── comments.rb │ │ │ ├── enrol_requests.rb │ │ │ ├── forums.rb │ │ │ └── videos.rb │ │ ├── course/ │ │ │ ├── achievement/ │ │ │ │ ├── achievements_controller.rb │ │ │ │ ├── condition/ │ │ │ │ │ ├── achievements_controller.rb │ │ │ │ │ ├── assessments_controller.rb │ │ │ │ │ ├── levels_controller.rb │ │ │ │ │ ├── scholaistic_assessments_controller.rb │ │ │ │ │ └── surveys_controller.rb │ │ │ │ └── controller.rb │ │ │ ├── admin/ │ │ │ │ ├── admin_controller.rb │ │ │ │ ├── announcement_settings_controller.rb │ │ │ │ ├── assessment_settings_controller.rb │ │ │ │ ├── assessments/ │ │ │ │ │ ├── categories_controller.rb │ │ │ │ │ └── tabs_controller.rb │ │ │ │ ├── codaveri_settings_controller.rb │ │ │ │ ├── component_settings_controller.rb │ │ │ │ ├── controller.rb │ │ │ │ ├── discussion/ │ │ │ │ │ └── topic_settings_controller.rb │ │ │ │ ├── forum_settings_controller.rb │ │ │ │ ├── leaderboard_settings_controller.rb │ │ │ │ ├── lesson_plan_settings_controller.rb │ │ │ │ ├── material_settings_controller.rb │ │ │ │ ├── notification_settings_controller.rb │ │ │ │ ├── rag_wise_settings_controller.rb │ │ │ │ ├── scholaistic_settings_controller.rb │ │ │ │ ├── sidebar_settings_controller.rb │ │ │ │ ├── stories_settings_controller.rb │ │ │ │ ├── video_settings_controller.rb │ │ │ │ └── videos/ │ │ │ │ └── tabs_controller.rb │ │ │ ├── announcements_controller.rb │ │ │ ├── assessment/ │ │ │ │ ├── assessments_controller.rb │ │ │ │ ├── categories_controller.rb │ │ │ │ ├── component_controller.rb │ │ │ │ ├── condition/ │ │ │ │ │ ├── achievements_controller.rb │ │ │ │ │ ├── assessments_controller.rb │ │ │ │ │ ├── levels_controller.rb │ │ │ │ │ ├── scholaistic_assessments_controller.rb │ │ │ │ │ └── surveys_controller.rb │ │ │ │ ├── controller.rb │ │ │ │ ├── mock_answers_controller.rb │ │ │ │ ├── question/ │ │ │ │ │ ├── controller.rb │ │ │ │ │ ├── forum_post_responses_controller.rb │ │ │ │ │ ├── multiple_responses_controller.rb │ │ │ │ │ ├── programming_controller.rb │ │ │ │ │ ├── rubric_based_responses_controller.rb │ │ │ │ │ ├── scribing_controller.rb │ │ │ │ │ ├── text_responses_controller.rb │ │ │ │ │ └── voice_responses_controller.rb │ │ │ │ ├── question_bundle_assignments_controller.rb │ │ │ │ ├── question_bundle_questions_controller.rb │ │ │ │ ├── question_bundles_controller.rb │ │ │ │ ├── question_groups_controller.rb │ │ │ │ ├── questions_controller.rb │ │ │ │ ├── rubrics_controller.rb │ │ │ │ ├── sessions_controller.rb │ │ │ │ ├── skill_branches_controller.rb │ │ │ │ ├── skills_controller.rb │ │ │ │ ├── submission/ │ │ │ │ │ ├── answer/ │ │ │ │ │ │ ├── answers_controller.rb │ │ │ │ │ │ ├── controller.rb │ │ │ │ │ │ ├── forum_post_response/ │ │ │ │ │ │ │ └── posts_controller.rb │ │ │ │ │ │ ├── programming/ │ │ │ │ │ │ │ ├── annotations_controller.rb │ │ │ │ │ │ │ ├── controller.rb │ │ │ │ │ │ │ └── programming_controller.rb │ │ │ │ │ │ ├── scribing/ │ │ │ │ │ │ │ ├── controller.rb │ │ │ │ │ │ │ └── scribbles_controller.rb │ │ │ │ │ │ └── text_response/ │ │ │ │ │ │ ├── controller.rb │ │ │ │ │ │ └── text_response_controller.rb │ │ │ │ │ ├── controller.rb │ │ │ │ │ ├── live_feedback_controller.rb │ │ │ │ │ ├── logs_controller.rb │ │ │ │ │ └── submissions_controller.rb │ │ │ │ ├── submission_question/ │ │ │ │ │ ├── comments_controller.rb │ │ │ │ │ ├── controller.rb │ │ │ │ │ └── submission_questions_controller.rb │ │ │ │ └── submissions_controller.rb │ │ │ ├── component_controller.rb │ │ │ ├── condition/ │ │ │ │ ├── achievements_controller.rb │ │ │ │ ├── assessments_controller.rb │ │ │ │ ├── levels_controller.rb │ │ │ │ ├── scholaistic_assessments_controller.rb │ │ │ │ └── surveys_controller.rb │ │ │ ├── conditions_controller.rb │ │ │ ├── controller.rb │ │ │ ├── courses_controller.rb │ │ │ ├── discussion/ │ │ │ │ ├── posts_controller.rb │ │ │ │ └── topics_controller.rb │ │ │ ├── duplications_controller.rb │ │ │ ├── enrol_requests_controller.rb │ │ │ ├── experience_points/ │ │ │ │ ├── disbursement_controller.rb │ │ │ │ └── forum_disbursement_controller.rb │ │ │ ├── experience_points_records_controller.rb │ │ │ ├── forum/ │ │ │ │ ├── component_controller.rb │ │ │ │ ├── controller.rb │ │ │ │ ├── forums_controller.rb │ │ │ │ ├── posts_controller.rb │ │ │ │ └── topics_controller.rb │ │ │ ├── group/ │ │ │ │ ├── group_categories_controller.rb │ │ │ │ └── groups_controller.rb │ │ │ ├── leaderboards_controller.rb │ │ │ ├── learning_map_controller.rb │ │ │ ├── lesson_plan/ │ │ │ │ ├── controller.rb │ │ │ │ ├── events_controller.rb │ │ │ │ ├── items_controller.rb │ │ │ │ ├── milestones_controller.rb │ │ │ │ └── todos_controller.rb │ │ │ ├── levels_controller.rb │ │ │ ├── material/ │ │ │ │ ├── controller.rb │ │ │ │ ├── folders_controller.rb │ │ │ │ └── materials_controller.rb │ │ │ ├── object_duplications_controller.rb │ │ │ ├── personal_times_controller.rb │ │ │ ├── plagiarism/ │ │ │ │ ├── assessments_controller.rb │ │ │ │ ├── controller.rb │ │ │ │ └── plagiarism_controller.rb │ │ │ ├── reference_timelines_controller.rb │ │ │ ├── reference_times_controller.rb │ │ │ ├── rubrics_controller.rb │ │ │ ├── scholaistic/ │ │ │ │ ├── assistants_controller.rb │ │ │ │ ├── controller.rb │ │ │ │ ├── scholaistic_assessments_controller.rb │ │ │ │ └── submissions_controller.rb │ │ │ ├── statistics/ │ │ │ │ ├── aggregate_controller.rb │ │ │ │ ├── assessments_controller.rb │ │ │ │ ├── controller.rb │ │ │ │ ├── statistics_controller.rb │ │ │ │ └── users_controller.rb │ │ │ ├── stories/ │ │ │ │ └── stories_controller.rb │ │ │ ├── survey/ │ │ │ │ ├── controller.rb │ │ │ │ ├── questions_controller.rb │ │ │ │ ├── responses_controller.rb │ │ │ │ ├── sections_controller.rb │ │ │ │ └── surveys_controller.rb │ │ │ ├── user_email_subscriptions_controller.rb │ │ │ ├── user_invitations_controller.rb │ │ │ ├── user_notifications_controller.rb │ │ │ ├── user_registrations_controller.rb │ │ │ ├── users_controller.rb │ │ │ ├── video/ │ │ │ │ ├── controller.rb │ │ │ │ ├── submission/ │ │ │ │ │ ├── controller.rb │ │ │ │ │ ├── sessions_controller.rb │ │ │ │ │ └── submissions_controller.rb │ │ │ │ ├── topics_controller.rb │ │ │ │ └── videos_controller.rb │ │ │ └── video_submissions_controller.rb │ │ ├── csrf_token_controller.rb │ │ ├── health_check_controller.rb │ │ ├── instance_user_role_requests_controller.rb │ │ ├── jobs_controller.rb │ │ ├── system/ │ │ │ └── admin/ │ │ │ ├── admin_controller.rb │ │ │ ├── announcements_controller.rb │ │ │ ├── controller.rb │ │ │ ├── courses_controller.rb │ │ │ ├── get_help_controller.rb │ │ │ ├── instance/ │ │ │ │ ├── admin_controller.rb │ │ │ │ ├── announcements_controller.rb │ │ │ │ ├── components_controller.rb │ │ │ │ ├── controller.rb │ │ │ │ ├── courses_controller.rb │ │ │ │ ├── get_help_controller.rb │ │ │ │ ├── user_invitations_controller.rb │ │ │ │ └── users_controller.rb │ │ │ ├── instances_controller.rb │ │ │ └── users_controller.rb │ │ ├── test/ │ │ │ ├── controller.rb │ │ │ ├── factories_controller.rb │ │ │ └── mailer_controller.rb │ │ ├── user/ │ │ │ ├── confirmations_controller.rb │ │ │ ├── emails_controller.rb │ │ │ ├── passwords_controller.rb │ │ │ ├── profiles_controller.rb │ │ │ ├── registrations_controller.rb │ │ │ └── sessions_controller.rb │ │ └── users_controller.rb │ ├── helpers/ │ │ ├── application_formatters_helper.rb │ │ ├── application_helper.rb │ │ ├── application_html_formatters_helper.rb │ │ ├── application_jobs_helper.rb │ │ ├── application_mailer_helper.rb │ │ ├── application_notifications_helper.rb │ │ ├── consolidated_opening_reminder_mailer_helper.rb │ │ ├── course/ │ │ │ ├── achievement/ │ │ │ │ ├── achievements_helper.rb │ │ │ │ └── controller_helper.rb │ │ │ ├── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ └── programming_test_case_helper.rb │ │ │ │ ├── assessments_helper.rb │ │ │ │ ├── question/ │ │ │ │ │ └── programming_helper.rb │ │ │ │ ├── submission/ │ │ │ │ │ └── submissions_helper.rb │ │ │ │ └── submissions_helper.rb │ │ │ ├── condition/ │ │ │ │ └── conditions_helper.rb │ │ │ ├── controller_helper.rb │ │ │ ├── discussion/ │ │ │ │ └── topics_helper.rb │ │ │ ├── forum/ │ │ │ │ └── controller_helper.rb │ │ │ ├── group/ │ │ │ │ └── group_categories_helper.rb │ │ │ ├── leaderboards_helper.rb │ │ │ ├── material/ │ │ │ │ └── folders_helper.rb │ │ │ ├── object_duplications_helper.rb │ │ │ └── users_helper.rb │ │ ├── route_overrides_helper.rb │ │ └── tmp_cleanup_helper.rb │ ├── jobs/ │ │ ├── application_job.rb │ │ ├── consolidated_item_email_job.rb │ │ ├── course/ │ │ │ ├── announcement/ │ │ │ │ └── opening_reminder_job.rb │ │ │ ├── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ ├── auto_grading_job.rb │ │ │ │ │ ├── base_auto_grading_job.rb │ │ │ │ │ ├── programming_codaveri_feedback_job.rb │ │ │ │ │ └── reduce_priority_auto_grading_job.rb │ │ │ │ ├── closing_reminder_job.rb │ │ │ │ ├── invite_to_koditsu_job.rb │ │ │ │ ├── plagiarism_check_job.rb │ │ │ │ ├── question/ │ │ │ │ │ ├── answers_evaluation_job.rb │ │ │ │ │ ├── codaveri_import_job.rb │ │ │ │ │ └── programming_import_job.rb │ │ │ │ └── submission/ │ │ │ │ ├── auto_feedback_job.rb │ │ │ │ ├── auto_grading_job.rb │ │ │ │ ├── csv_download_job.rb │ │ │ │ ├── deleting_job.rb │ │ │ │ ├── fetch_submissions_from_koditsu_job.rb │ │ │ │ ├── force_submit_timed_submission_job.rb │ │ │ │ ├── force_submitting_job.rb │ │ │ │ ├── publishing_job.rb │ │ │ │ ├── statistics_download_job.rb │ │ │ │ ├── unsubmitting_job.rb │ │ │ │ └── zip_download_job.rb │ │ │ ├── conditional/ │ │ │ │ ├── conditional_satisfiability_evaluation_job.rb │ │ │ │ └── coursewide_conditional_satisfiability_evaluation_job.rb │ │ │ ├── discussion/ │ │ │ │ └── post/ │ │ │ │ └── codaveri_feedback_rating_job.rb │ │ │ ├── duplication_job.rb │ │ │ ├── experience_points_download_job.rb │ │ │ ├── forum/ │ │ │ │ ├── auto_answering_job.rb │ │ │ │ └── importing_job.rb │ │ │ ├── lesson_plan/ │ │ │ │ └── coursewide_personalized_timeline_update_job.rb │ │ │ ├── material/ │ │ │ │ ├── text_chunk_job.rb │ │ │ │ └── zip_download_job.rb │ │ │ ├── object_duplication_job.rb │ │ │ ├── rubric/ │ │ │ │ └── rubric_evaluation_export_job.rb │ │ │ ├── statistics/ │ │ │ │ └── assessments_score_summary_download_job.rb │ │ │ ├── survey/ │ │ │ │ ├── closing_reminder_job.rb │ │ │ │ └── survey_download_job.rb │ │ │ ├── user_deletion_job.rb │ │ │ └── video/ │ │ │ └── closing_reminder_job.rb │ │ ├── read_marks_clean_up_job.rb │ │ ├── user_email_database_cleanup_job.rb │ │ └── video_statistic_update_job.rb │ ├── mailers/ │ │ ├── activity_mailer.rb │ │ ├── application_mailer.rb │ │ ├── consolidated_opening_reminder_mailer.rb │ │ ├── course/ │ │ │ └── mailer.rb │ │ ├── instance/ │ │ │ └── mailer.rb │ │ └── instance_user_role_request_mailer.rb │ ├── models/ │ │ ├── .rubocop.yml │ │ ├── ability.rb │ │ ├── activity.rb │ │ ├── application_record.rb │ │ ├── attachment.rb │ │ ├── attachment_reference.rb │ │ ├── cikgo_user.rb │ │ ├── components/ │ │ │ ├── ability_host.rb │ │ │ ├── course/ │ │ │ │ ├── achievements_ability_component.rb │ │ │ │ ├── announcements_ability_component.rb │ │ │ │ ├── assessments_ability_component.rb │ │ │ │ ├── conditions_ability_component.rb │ │ │ │ ├── course_ability_component.rb │ │ │ │ ├── course_user_ability_component.rb │ │ │ │ ├── discussions_ability_component.rb │ │ │ │ ├── duplication_ability_component.rb │ │ │ │ ├── experience_points_disbursement_ability_component.rb │ │ │ │ ├── experience_points_records_ability_component.rb │ │ │ │ ├── forums_ability_component.rb │ │ │ │ ├── groups_ability_component.rb │ │ │ │ ├── learning_map_ability_component.rb │ │ │ │ ├── lesson_plan_ability_component.rb │ │ │ │ ├── levels_ability_component.rb │ │ │ │ ├── materials_ability_component.rb │ │ │ │ ├── model_component_host.rb │ │ │ │ ├── monitoring_ability_component.rb │ │ │ │ ├── plagiarism_ability_component.rb │ │ │ │ ├── rag_wise_setting_ability_component.rb │ │ │ │ ├── scholaistic_ability_component.rb │ │ │ │ ├── statistics_ability_component.rb │ │ │ │ ├── stories_ability_component.rb │ │ │ │ ├── surveys_ability_component.rb │ │ │ │ ├── timelines_ability_component.rb │ │ │ │ ├── user_email_unsubscriptions_ability_component.rb │ │ │ │ └── videos_ability_component.rb │ │ │ ├── system/ │ │ │ │ └── admin/ │ │ │ │ ├── instance_admin_ability_component.rb │ │ │ │ ├── instance_announcements_ability_component.rb │ │ │ │ ├── system_admin_ability_component.rb │ │ │ │ └── system_announcements_ability_component.rb │ │ │ ├── user_notifications_ability_component.rb │ │ │ └── users_ability_component.rb │ │ ├── concerns/ │ │ │ ├── announcement_concern.rb │ │ │ ├── application_acts_as_concern.rb │ │ │ ├── application_userstamp_concern.rb │ │ │ ├── cikgo/ │ │ │ │ └── pushable_item_concern.rb │ │ │ ├── component_settings_concern.rb │ │ │ ├── course/ │ │ │ │ ├── assessment/ │ │ │ │ │ ├── new_submission_concern.rb │ │ │ │ │ ├── questions_concern.rb │ │ │ │ │ ├── submission/ │ │ │ │ │ │ ├── answers_concern.rb │ │ │ │ │ │ ├── cikgo_task_completion_concern.rb │ │ │ │ │ │ ├── notification_concern.rb │ │ │ │ │ │ ├── todo_concern.rb │ │ │ │ │ │ └── workflow_event_concern.rb │ │ │ │ │ └── todo_concern.rb │ │ │ │ ├── closing_reminder_concern.rb │ │ │ │ ├── course_components_concern.rb │ │ │ │ ├── course_user_type_concern.rb │ │ │ │ ├── discussion/ │ │ │ │ │ ├── post/ │ │ │ │ │ │ ├── ordering_concern.rb │ │ │ │ │ │ └── retrieval_concern.rb │ │ │ │ │ └── topic/ │ │ │ │ │ └── posts_concern.rb │ │ │ │ ├── duplication_concern.rb │ │ │ │ ├── forum_participation_concern.rb │ │ │ │ ├── lesson_plan/ │ │ │ │ │ ├── item/ │ │ │ │ │ │ └── cikgo_push_concern.rb │ │ │ │ │ └── item_todo_concern.rb │ │ │ │ ├── levels_concern.rb │ │ │ │ ├── material/ │ │ │ │ │ └── folder/ │ │ │ │ │ └── ordering_concern.rb │ │ │ │ ├── material_concern.rb │ │ │ │ ├── opening_reminder_concern.rb │ │ │ │ ├── sanitize_description_concern.rb │ │ │ │ ├── search_concern.rb │ │ │ │ ├── settings/ │ │ │ │ │ └── lesson_plan_settings_concern.rb │ │ │ │ ├── survey/ │ │ │ │ │ └── response/ │ │ │ │ │ ├── cikgo_task_completion_concern.rb │ │ │ │ │ └── todo_concern.rb │ │ │ │ └── video/ │ │ │ │ ├── interval_query_concern.rb │ │ │ │ ├── submission/ │ │ │ │ │ ├── notification_concern.rb │ │ │ │ │ ├── statistic/ │ │ │ │ │ │ └── cikgo_task_completion_concern.rb │ │ │ │ │ └── todo_concern.rb │ │ │ │ ├── url_concern.rb │ │ │ │ └── watch_statistics_concern.rb │ │ │ ├── course_component_query_concern.rb │ │ │ ├── course_user/ │ │ │ │ ├── achievements_concern.rb │ │ │ │ ├── level_progress_concern.rb │ │ │ │ ├── staff_concern.rb │ │ │ │ └── todo_concern.rb │ │ │ ├── duplication_state_tracking_concern.rb │ │ │ ├── generic/ │ │ │ │ └── collection_concern.rb │ │ │ ├── instance/ │ │ │ │ └── course_components_concern.rb │ │ │ ├── instance_user_search_concern.rb │ │ │ ├── safe_mark_as_read_concern.rb │ │ │ ├── time_zone_concern.rb │ │ │ ├── user_authentication_concern.rb │ │ │ ├── user_notifications_concern.rb │ │ │ └── user_search_concern.rb │ │ ├── course/ │ │ │ ├── achievement.rb │ │ │ ├── announcement.rb │ │ │ ├── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ ├── auto_grading.rb │ │ │ │ │ ├── forum_post.rb │ │ │ │ │ ├── forum_post_response.rb │ │ │ │ │ ├── multiple_response.rb │ │ │ │ │ ├── multiple_response_option.rb │ │ │ │ │ ├── programming.rb │ │ │ │ │ ├── programming_ability.rb │ │ │ │ │ ├── programming_auto_grading.rb │ │ │ │ │ ├── programming_auto_grading_test_result.rb │ │ │ │ │ ├── programming_file.rb │ │ │ │ │ ├── programming_file_annotation.rb │ │ │ │ │ ├── rubric_based_response.rb │ │ │ │ │ ├── rubric_based_response_selection.rb │ │ │ │ │ ├── rubric_playground_answer_adapter.rb │ │ │ │ │ ├── scribing.rb │ │ │ │ │ ├── scribing_scribble.rb │ │ │ │ │ ├── text_response.rb │ │ │ │ │ └── voice_response.rb │ │ │ │ ├── answer.rb │ │ │ │ ├── assessment_ability.rb │ │ │ │ ├── category.rb │ │ │ │ ├── link.rb │ │ │ │ ├── live_feedback/ │ │ │ │ │ ├── file.rb │ │ │ │ │ ├── message.rb │ │ │ │ │ ├── message_file.rb │ │ │ │ │ ├── message_option.rb │ │ │ │ │ ├── option.rb │ │ │ │ │ └── thread.rb │ │ │ │ ├── live_feedback.rb │ │ │ │ ├── live_feedback_code.rb │ │ │ │ ├── live_feedback_comment.rb │ │ │ │ ├── plagiarism_check.rb │ │ │ │ ├── question/ │ │ │ │ │ ├── forum_post_response.rb │ │ │ │ │ ├── mock_answer/ │ │ │ │ │ │ └── answer_adapter.rb │ │ │ │ │ ├── mock_answer.rb │ │ │ │ │ ├── multiple_response.rb │ │ │ │ │ ├── multiple_response_option.rb │ │ │ │ │ ├── programming.rb │ │ │ │ │ ├── programming_template_file.rb │ │ │ │ │ ├── programming_test_case.rb │ │ │ │ │ ├── question_rubric.rb │ │ │ │ │ ├── rubric_based_response.rb │ │ │ │ │ ├── rubric_based_response_category.rb │ │ │ │ │ ├── rubric_based_response_criterion.rb │ │ │ │ │ ├── scribing.rb │ │ │ │ │ ├── text_response.rb │ │ │ │ │ ├── text_response_comprehension_group.rb │ │ │ │ │ ├── text_response_comprehension_point.rb │ │ │ │ │ ├── text_response_comprehension_solution.rb │ │ │ │ │ ├── text_response_solution.rb │ │ │ │ │ └── voice_response.rb │ │ │ │ ├── question.rb │ │ │ │ ├── question_bundle.rb │ │ │ │ ├── question_bundle_assignment.rb │ │ │ │ ├── question_bundle_question.rb │ │ │ │ ├── question_group.rb │ │ │ │ ├── skill.rb │ │ │ │ ├── skill_ability.rb │ │ │ │ ├── skill_branch.rb │ │ │ │ ├── submission/ │ │ │ │ │ └── log.rb │ │ │ │ ├── submission.rb │ │ │ │ ├── submission_question.rb │ │ │ │ └── tab.rb │ │ │ ├── assessment.rb │ │ │ ├── condition/ │ │ │ │ ├── achievement.rb │ │ │ │ ├── assessment.rb │ │ │ │ ├── level.rb │ │ │ │ ├── scholaistic_assessment.rb │ │ │ │ ├── survey.rb │ │ │ │ └── video.rb │ │ │ ├── condition.rb │ │ │ ├── discussion/ │ │ │ │ ├── post/ │ │ │ │ │ ├── codaveri_feedback.rb │ │ │ │ │ └── vote.rb │ │ │ │ ├── post.rb │ │ │ │ ├── topic/ │ │ │ │ │ └── subscription.rb │ │ │ │ └── topic.rb │ │ │ ├── discussion.rb │ │ │ ├── enrol_request.rb │ │ │ ├── experience_points/ │ │ │ │ ├── disbursement.rb │ │ │ │ └── forum_disbursement.rb │ │ │ ├── experience_points_record.rb │ │ │ ├── forum/ │ │ │ │ ├── discussion.rb │ │ │ │ ├── discussion_reference.rb │ │ │ │ ├── import.rb │ │ │ │ ├── rag_auto_answering.rb │ │ │ │ ├── search.rb │ │ │ │ ├── subscription.rb │ │ │ │ ├── topic/ │ │ │ │ │ └── view.rb │ │ │ │ └── topic.rb │ │ │ ├── forum.rb │ │ │ ├── group.rb │ │ │ ├── group_category.rb │ │ │ ├── group_user.rb │ │ │ ├── learning_map.rb │ │ │ ├── learning_rate_record.rb │ │ │ ├── lesson_plan/ │ │ │ │ ├── event.rb │ │ │ │ ├── event_material.rb │ │ │ │ ├── item.rb │ │ │ │ ├── milestone.rb │ │ │ │ └── todo.rb │ │ │ ├── lesson_plan.rb │ │ │ ├── level.rb │ │ │ ├── material/ │ │ │ │ ├── folder.rb │ │ │ │ ├── text_chunk.rb │ │ │ │ ├── text_chunk_reference.rb │ │ │ │ └── text_chunking.rb │ │ │ ├── material.rb │ │ │ ├── monitoring/ │ │ │ │ ├── browser_authorization/ │ │ │ │ │ ├── base.rb │ │ │ │ │ ├── seb_config_key.rb │ │ │ │ │ └── user_agent.rb │ │ │ │ ├── heartbeat.rb │ │ │ │ ├── monitor.rb │ │ │ │ └── session.rb │ │ │ ├── monitoring.rb │ │ │ ├── notification.rb │ │ │ ├── personal_time.rb │ │ │ ├── question_assessment.rb │ │ │ ├── reference_time.rb │ │ │ ├── reference_timeline.rb │ │ │ ├── registration.rb │ │ │ ├── rubric/ │ │ │ │ ├── answer_evaluation/ │ │ │ │ │ └── selection.rb │ │ │ │ ├── answer_evaluation.rb │ │ │ │ ├── category/ │ │ │ │ │ └── criterion.rb │ │ │ │ ├── category.rb │ │ │ │ ├── mock_answer_evaluation/ │ │ │ │ │ └── selection.rb │ │ │ │ ├── mock_answer_evaluation.rb │ │ │ │ └── rubric_adapter.rb │ │ │ ├── rubric.rb │ │ │ ├── scholaistic_assessment.rb │ │ │ ├── scholaistic_submission.rb │ │ │ ├── settings/ │ │ │ │ ├── announcements_component.rb │ │ │ │ ├── assessments_component.rb │ │ │ │ ├── codaveri_component.rb │ │ │ │ ├── component.rb │ │ │ │ ├── components.rb │ │ │ │ ├── email.rb │ │ │ │ ├── forums_component.rb │ │ │ │ ├── leaderboard_component.rb │ │ │ │ ├── learning_map_component.rb │ │ │ │ ├── lesson_plan_component.rb │ │ │ │ ├── lesson_plan_items.rb │ │ │ │ ├── materials_component.rb │ │ │ │ ├── pan_component.rb │ │ │ │ ├── rag_wise_component.rb │ │ │ │ ├── scholaistic_component.rb │ │ │ │ ├── sidebar.rb │ │ │ │ ├── sidebar_item.rb │ │ │ │ ├── stories_component.rb │ │ │ │ ├── survey_component.rb │ │ │ │ ├── topics_component.rb │ │ │ │ ├── users_component.rb │ │ │ │ └── videos_component.rb │ │ │ ├── settings.rb │ │ │ ├── story.rb │ │ │ ├── survey/ │ │ │ │ ├── answer.rb │ │ │ │ ├── answer_option.rb │ │ │ │ ├── question.rb │ │ │ │ ├── question_option.rb │ │ │ │ ├── response.rb │ │ │ │ └── section.rb │ │ │ ├── survey.rb │ │ │ ├── user_achievement.rb │ │ │ ├── user_email_unsubscription.rb │ │ │ ├── user_invitation.rb │ │ │ ├── video/ │ │ │ │ ├── event.rb │ │ │ │ ├── session.rb │ │ │ │ ├── statistic.rb │ │ │ │ ├── submission/ │ │ │ │ │ └── statistic.rb │ │ │ │ ├── submission.rb │ │ │ │ ├── tab.rb │ │ │ │ └── topic.rb │ │ │ └── video.rb │ │ ├── course.rb │ │ ├── course_user.rb │ │ ├── duplication_traceable/ │ │ │ ├── assessment.rb │ │ │ └── course.rb │ │ ├── duplication_traceable.rb │ │ ├── generic_announcement.rb │ │ ├── instance/ │ │ │ ├── announcement.rb │ │ │ ├── settings/ │ │ │ │ └── components.rb │ │ │ ├── settings.rb │ │ │ ├── user_invitation.rb │ │ │ └── user_role_request.rb │ │ ├── instance.rb │ │ ├── instance_user.rb │ │ ├── settings.rb │ │ ├── system/ │ │ │ └── announcement.rb │ │ ├── user/ │ │ │ ├── email.rb │ │ │ └── identity.rb │ │ ├── user.rb │ │ └── user_notification.rb │ ├── notifiers/ │ │ ├── course/ │ │ │ ├── achievement_notifier.rb │ │ │ ├── announcement_notifier.rb │ │ │ ├── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ └── comment_notifier.rb │ │ │ │ └── submission_question/ │ │ │ │ └── comment_notifier.rb │ │ │ ├── assessment_notifier.rb │ │ │ ├── consolidated_opening_reminder_notifier.rb │ │ │ ├── forum/ │ │ │ │ ├── post_notifier.rb │ │ │ │ └── topic_notifier.rb │ │ │ ├── level_notifier.rb │ │ │ └── video_notifier.rb │ │ └── notifier/ │ │ └── base.rb │ ├── services/ │ │ ├── authentication/ │ │ │ ├── authentication_service.rb │ │ │ ├── jwt_verification_service.rb │ │ │ ├── keycloak_verification_service.rb │ │ │ └── verification_service.rb │ │ ├── cikgo/ │ │ │ ├── chats_service.rb │ │ │ ├── resources_service.rb │ │ │ ├── service.rb │ │ │ ├── timelines_service.rb │ │ │ └── users_service.rb │ │ ├── codaveri_async_api_service.rb │ │ ├── concerns/ │ │ │ ├── cikgo/ │ │ │ │ └── course_concern.rb │ │ │ ├── course/ │ │ │ │ └── user_invitation_service/ │ │ │ │ ├── email_invitation_concern.rb │ │ │ │ ├── parse_invitation_concern.rb │ │ │ │ └── process_invitation_concern.rb │ │ │ └── instance/ │ │ │ └── user_invitation_service/ │ │ │ ├── email_invitation_concern.rb │ │ │ ├── parse_invitation_concern.rb │ │ │ └── process_invitation_concern.rb │ │ ├── course/ │ │ │ ├── announcement/ │ │ │ │ └── reminder_service.rb │ │ │ ├── assessment/ │ │ │ │ ├── achievement_preload_service.rb │ │ │ │ ├── answer/ │ │ │ │ │ ├── ai_generated_post_service.rb │ │ │ │ │ ├── auto_grading_service.rb │ │ │ │ │ ├── live_feedback/ │ │ │ │ │ │ ├── feedback_service.rb │ │ │ │ │ │ └── thread_service.rb │ │ │ │ │ ├── multiple_response_auto_grading_service.rb │ │ │ │ │ ├── programming_auto_grading_service.rb │ │ │ │ │ ├── programming_codaveri_async_feedback_service.rb │ │ │ │ │ ├── programming_codaveri_auto_grading_service.rb │ │ │ │ │ ├── prompts/ │ │ │ │ │ │ ├── rubric_auto_grading_output_format.json │ │ │ │ │ │ ├── rubric_auto_grading_system_prompt.json │ │ │ │ │ │ └── rubric_auto_grading_user_prompt.json │ │ │ │ │ ├── rubric_auto_grading_service.rb │ │ │ │ │ ├── rubric_based_response/ │ │ │ │ │ │ └── answer_adapter.rb │ │ │ │ │ ├── text_response_auto_grading_service.rb │ │ │ │ │ └── text_response_comprehension_auto_grading_service.rb │ │ │ │ ├── authentication_service.rb │ │ │ │ ├── koditsu_assessment_invitation_service.rb │ │ │ │ ├── koditsu_assessment_service.rb │ │ │ │ ├── monitoring_service.rb │ │ │ │ ├── programming_codaveri_evaluation_service.rb │ │ │ │ ├── programming_evaluation_service.rb │ │ │ │ ├── question/ │ │ │ │ │ ├── answers_evaluation_service.rb │ │ │ │ │ ├── codaveri_problem_generation_service.rb │ │ │ │ │ ├── koditsu_question_service.rb │ │ │ │ │ ├── mrq_generation_service.rb │ │ │ │ │ ├── programming/ │ │ │ │ │ │ ├── c_sharp/ │ │ │ │ │ │ │ ├── c_sharp_makefile │ │ │ │ │ │ │ └── c_sharp_package_service.rb │ │ │ │ │ │ ├── cpp/ │ │ │ │ │ │ │ ├── cpp_autograde_include.cc │ │ │ │ │ │ │ ├── cpp_autograde_post.cc │ │ │ │ │ │ │ ├── cpp_autograde_pre.cc │ │ │ │ │ │ │ ├── cpp_makefile │ │ │ │ │ │ │ └── cpp_package_service.rb │ │ │ │ │ │ ├── go/ │ │ │ │ │ │ │ ├── go_makefile │ │ │ │ │ │ │ └── go_package_service.rb │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ ├── RunTests.java │ │ │ │ │ │ │ ├── java_autograde_pre.java │ │ │ │ │ │ │ ├── java_build.xml │ │ │ │ │ │ │ ├── java_package_service.rb │ │ │ │ │ │ │ ├── java_simple_makefile │ │ │ │ │ │ │ └── java_standard_makefile │ │ │ │ │ │ ├── java_script/ │ │ │ │ │ │ │ ├── java_script_makefile │ │ │ │ │ │ │ └── java_script_package_service.rb │ │ │ │ │ │ ├── language_package_service.rb │ │ │ │ │ │ ├── programming_package_service.rb │ │ │ │ │ │ ├── python/ │ │ │ │ │ │ │ ├── python_autograde_post.py │ │ │ │ │ │ │ ├── python_autograde_pre.py │ │ │ │ │ │ │ ├── python_makefile │ │ │ │ │ │ │ └── python_package_service.rb │ │ │ │ │ │ ├── r/ │ │ │ │ │ │ │ ├── r_makefile │ │ │ │ │ │ │ └── r_package_service.rb │ │ │ │ │ │ ├── rust/ │ │ │ │ │ │ │ ├── rust_makefile │ │ │ │ │ │ │ └── rust_package_service.rb │ │ │ │ │ │ └── type_script/ │ │ │ │ │ │ ├── type_script_makefile │ │ │ │ │ │ └── type_script_package_service.rb │ │ │ │ │ ├── programming_codaveri/ │ │ │ │ │ │ ├── c_sharp/ │ │ │ │ │ │ │ └── c_sharp_package_service.rb │ │ │ │ │ │ ├── go/ │ │ │ │ │ │ │ └── go_package_service.rb │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── java_package_service.rb │ │ │ │ │ │ ├── java_script/ │ │ │ │ │ │ │ └── java_script_package_service.rb │ │ │ │ │ │ ├── language_package_service.rb │ │ │ │ │ │ ├── programming_codaveri_package_service.rb │ │ │ │ │ │ ├── python/ │ │ │ │ │ │ │ └── python_package_service.rb │ │ │ │ │ │ ├── r/ │ │ │ │ │ │ │ └── r_package_service.rb │ │ │ │ │ │ ├── rust/ │ │ │ │ │ │ │ └── rust_package_service.rb │ │ │ │ │ │ └── type_script/ │ │ │ │ │ │ └── type_script_package_service.rb │ │ │ │ │ ├── programming_codaveri_service.rb │ │ │ │ │ ├── programming_import_service.rb │ │ │ │ │ ├── prompts/ │ │ │ │ │ │ ├── mcq_generation_system_prompt.json │ │ │ │ │ │ ├── mcq_generation_user_prompt.json │ │ │ │ │ │ ├── mcq_mrq_generation_output_format.json │ │ │ │ │ │ ├── mrq_generation_system_prompt.json │ │ │ │ │ │ └── mrq_generation_user_prompt.json │ │ │ │ │ ├── question_adapter.rb │ │ │ │ │ ├── rubric_based_response/ │ │ │ │ │ │ └── rubric_adapter.rb │ │ │ │ │ ├── scribing_import_service.rb │ │ │ │ │ └── text_response_lemma_service.rb │ │ │ │ ├── reminder_service.rb │ │ │ │ ├── session_authentication_service.rb │ │ │ │ ├── session_log_service.rb │ │ │ │ └── submission/ │ │ │ │ ├── auto_grading_service.rb │ │ │ │ ├── base_zip_download_service.rb │ │ │ │ ├── calculate_exp_service.rb │ │ │ │ ├── csv_download_service.rb │ │ │ │ ├── koditsu_submission_service.rb │ │ │ │ ├── monitoring_service.rb │ │ │ │ ├── ssid_plagiarism_service.rb │ │ │ │ ├── ssid_zip_download_service.rb │ │ │ │ ├── statistics_download_service.rb │ │ │ │ ├── update_service.rb │ │ │ │ └── zip_download_service.rb │ │ │ ├── conditional/ │ │ │ │ ├── conditional_satisfiability_evaluation_service.rb │ │ │ │ └── satisfiability_graph_build_service.rb │ │ │ ├── course_owner_preload_service.rb │ │ │ ├── course_user_preload_service.rb │ │ │ ├── discussion/ │ │ │ │ └── post/ │ │ │ │ └── codaveri_feedback_rating_service.rb │ │ │ ├── duplication/ │ │ │ │ ├── base_service.rb │ │ │ │ ├── course_duplication_service.rb │ │ │ │ └── object_duplication_service.rb │ │ │ ├── experience_points_download_service.rb │ │ │ ├── group_manager_preload_service.rb │ │ │ ├── koditsu_workspace_service.rb │ │ │ ├── material/ │ │ │ │ ├── preload_service.rb │ │ │ │ └── zip_download_service.rb │ │ │ ├── reference_time/ │ │ │ │ └── time_offset_service.rb │ │ │ ├── rubric/ │ │ │ │ ├── llm_service/ │ │ │ │ │ ├── answer_adapter.rb │ │ │ │ │ ├── question_adapter.rb │ │ │ │ │ └── rubric_adapter.rb │ │ │ │ └── llm_service.rb │ │ │ ├── skills_mastery_preload_service.rb │ │ │ ├── ssid_folder_service.rb │ │ │ ├── statistics/ │ │ │ │ └── assessments_score_summary_download_service.rb │ │ │ ├── survey/ │ │ │ │ ├── reminder_service.rb │ │ │ │ └── survey_download_service.rb │ │ │ ├── user_invitation_service.rb │ │ │ ├── user_registration_service.rb │ │ │ └── video/ │ │ │ └── reminder_service.rb │ │ ├── instance/ │ │ │ └── user_invitation_service.rb │ │ ├── koditsu_async_api_service.rb │ │ ├── rag_wise/ │ │ │ ├── chunking_service.rb │ │ │ ├── discussion_extraction_service.rb │ │ │ ├── llm_service.rb │ │ │ ├── prompts/ │ │ │ │ ├── forum_assistant_system_prompt.json │ │ │ │ └── guess_course_material_name_system_prompt_template.json │ │ │ ├── rag_workflow_service.rb │ │ │ ├── response_evaluation_service.rb │ │ │ └── tools/ │ │ │ ├── course_forum_discussions_tool.rb │ │ │ └── course_materials_tool.rb │ │ ├── scholaistic_api_service.rb │ │ ├── sidekiq_api_service.rb │ │ ├── ssid_async_api_service.rb │ │ └── user/ │ │ └── instance_preload_service.rb │ ├── uploaders/ │ │ ├── file_uploader.rb │ │ └── image_uploader.rb │ └── views/ │ ├── announcements/ │ │ ├── _announcement_data.json.jbuilder │ │ ├── _announcement_list_data.json.jbuilder │ │ └── index.json.jbuilder │ ├── application/ │ │ └── index.json.jbuilder │ ├── attachment_references/ │ │ └── create.json.jbuilder │ ├── attachments/ │ │ └── _attachment_reference.json.jbuilder │ ├── course/ │ │ ├── achievement/ │ │ │ └── achievements/ │ │ │ ├── _achievement.json.jbuilder │ │ │ ├── _achievement_conditional.json.jbuilder │ │ │ ├── _achievement_data.json.jbuilder │ │ │ ├── _achievement_list_data.json.jbuilder │ │ │ ├── index.json.jbuilder │ │ │ └── show.json.jbuilder │ │ ├── admin/ │ │ │ ├── admin/ │ │ │ │ ├── index.json.jbuilder │ │ │ │ └── time_zones.json.jbuilder │ │ │ ├── announcement_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── assessment_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── codaveri_settings/ │ │ │ │ ├── assessment.json.jbuilder │ │ │ │ └── edit.json.jbuilder │ │ │ ├── component_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── discussion/ │ │ │ │ └── topic_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── forum_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── leaderboard_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── lesson_plan_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── material_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── notification_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── rag_wise_settings/ │ │ │ │ ├── courses.json.jbuilder │ │ │ │ ├── edit.json.jbuilder │ │ │ │ ├── folders.json.jbuilder │ │ │ │ ├── forums.json.jbuilder │ │ │ │ └── materials.json.jbuilder │ │ │ ├── scholaistic_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ ├── sidebar_settings/ │ │ │ │ ├── edit.json.jbuilder │ │ │ │ └── show.json.jbuilder │ │ │ ├── stories_settings/ │ │ │ │ └── edit.json.jbuilder │ │ │ └── video_settings/ │ │ │ └── edit.json.jbuilder │ │ ├── announcements/ │ │ │ └── index.json.jbuilder │ │ ├── assessment/ │ │ │ ├── answer/ │ │ │ │ ├── forum_post_responses/ │ │ │ │ │ └── _forum_post_response.json.jbuilder │ │ │ │ ├── multiple_responses/ │ │ │ │ │ └── _multiple_response.json.jbuilder │ │ │ │ ├── programming/ │ │ │ │ │ ├── _annotations.json.jbuilder │ │ │ │ │ └── _programming.json.jbuilder │ │ │ │ ├── rubric_based_responses/ │ │ │ │ │ └── _rubric_based_response.json.jbuilder │ │ │ │ ├── scribing/ │ │ │ │ │ └── _scribing.json.jbuilder │ │ │ │ ├── text_responses/ │ │ │ │ │ └── _text_response.json.jbuilder │ │ │ │ └── voice_responses/ │ │ │ │ └── _voice_response.json.jbuilder │ │ │ ├── answers/ │ │ │ │ └── _answer.json.jbuilder │ │ │ ├── assessments/ │ │ │ │ ├── _achievement_badges.json.jbuilder │ │ │ │ ├── _assessment_actions.json.jbuilder │ │ │ │ ├── _assessment_conditional.json.jbuilder │ │ │ │ ├── _assessment_lesson_plan_item.json.jbuilder │ │ │ │ ├── _assessment_list_data.json.jbuilder │ │ │ │ ├── _assessment_question_bundle_buttons.html.slim │ │ │ │ ├── _monitoring_details.json.jbuilder │ │ │ │ ├── authenticate.json.jbuilder │ │ │ │ ├── blocked_by_monitor.json.jbuilder │ │ │ │ ├── edit.json.jbuilder │ │ │ │ ├── index.json.jbuilder │ │ │ │ ├── monitoring.json.jbuilder │ │ │ │ └── show.json.jbuilder │ │ │ ├── categories/ │ │ │ │ ├── _category.json.jbuilder │ │ │ │ └── index.json.jbuilder │ │ │ ├── mock_answers/ │ │ │ │ └── index.json.jbuilder │ │ │ ├── programming_evaluations/ │ │ │ │ ├── _programming_evaluation.json.jbuilder │ │ │ │ ├── allocate.json.jbuilder │ │ │ │ ├── show.json.jbuilder │ │ │ │ └── update_result.json.jbuilder │ │ │ ├── question/ │ │ │ │ ├── _form.json.jbuilder │ │ │ │ ├── _skills.json.jbuilder │ │ │ │ ├── forum_post_responses/ │ │ │ │ │ ├── _form.json.jbuilder │ │ │ │ │ ├── _forum_post_response.json.jbuilder │ │ │ │ │ ├── edit.json.jbuilder │ │ │ │ │ └── new.json.jbuilder │ │ │ │ ├── multiple_responses/ │ │ │ │ │ ├── _form.json.jbuilder │ │ │ │ │ ├── _multiple_response.json.jbuilder │ │ │ │ │ ├── _multiple_response_details.json.jbuilder │ │ │ │ │ ├── _switch_question_type_button.json.jbuilder │ │ │ │ │ ├── edit.json.jbuilder │ │ │ │ │ └── new.json.jbuilder │ │ │ │ ├── programming/ │ │ │ │ │ ├── _form.json.jbuilder │ │ │ │ │ ├── _import_result.json.jbuilder │ │ │ │ │ ├── _languages.json.jbuilder │ │ │ │ │ ├── _package_ui.json.jbuilder │ │ │ │ │ ├── _programming.json.jbuilder │ │ │ │ │ ├── _question.json.jbuilder │ │ │ │ │ ├── _response.json.jbuilder │ │ │ │ │ ├── _test_cases.json.jbuilder │ │ │ │ │ ├── _test_ui.json.jbuilder │ │ │ │ │ ├── edit.json.jbuilder │ │ │ │ │ ├── import_result.json.jbuilder │ │ │ │ │ ├── metadata/ │ │ │ │ │ │ ├── _c_cpp.json.jbuilder │ │ │ │ │ │ ├── _csharp.json.jbuilder │ │ │ │ │ │ ├── _default.json.jbuilder │ │ │ │ │ │ ├── _golang.json.jbuilder │ │ │ │ │ │ ├── _java.json.jbuilder │ │ │ │ │ │ ├── _javascript.json.jbuilder │ │ │ │ │ │ ├── _python.json.jbuilder │ │ │ │ │ │ ├── _r.json.jbuilder │ │ │ │ │ │ ├── _rust.json.jbuilder │ │ │ │ │ │ ├── _typescript.json.jbuilder │ │ │ │ │ │ └── partials/ │ │ │ │ │ │ ├── _file.json.jbuilder │ │ │ │ │ │ └── _test_cases.json.jbuilder │ │ │ │ │ └── new.json.jbuilder │ │ │ │ ├── rubric_based_responses/ │ │ │ │ │ ├── _category_details.json.jbuilder │ │ │ │ │ ├── _form.json.jbuilder │ │ │ │ │ ├── _grade_details.json.jbuilder │ │ │ │ │ ├── _rubric_based_response.json.jbuilder │ │ │ │ │ ├── edit.json.jbuilder │ │ │ │ │ └── new.json.jbuilder │ │ │ │ ├── scribing/ │ │ │ │ │ ├── _scribing.json.jbuilder │ │ │ │ │ └── _scribing_question.json.jbuilder │ │ │ │ ├── text_responses/ │ │ │ │ │ ├── _form.json.jbuilder │ │ │ │ │ ├── _solution_details.json.jbuilder │ │ │ │ │ ├── _text_response.json.jbuilder │ │ │ │ │ ├── edit.json.jbuilder │ │ │ │ │ └── new.json.jbuilder │ │ │ │ └── voice_responses/ │ │ │ │ ├── _form.json.jbuilder │ │ │ │ ├── _voice_response.json.jbuilder │ │ │ │ ├── edit.json.jbuilder │ │ │ │ └── new.json.jbuilder │ │ │ ├── question_bundle_assignments/ │ │ │ │ ├── _form.html.slim │ │ │ │ ├── _validation_result.html.slim │ │ │ │ ├── edit.html.slim │ │ │ │ └── index.html.slim │ │ │ ├── question_bundle_questions/ │ │ │ │ ├── _form.html.slim │ │ │ │ ├── edit.html.slim │ │ │ │ ├── index.html.slim │ │ │ │ └── new.html.slim │ │ │ ├── question_bundles/ │ │ │ │ ├── _form.html.slim │ │ │ │ ├── edit.html.slim │ │ │ │ ├── index.html.slim │ │ │ │ └── new.html.slim │ │ │ ├── question_groups/ │ │ │ │ ├── _form.html.slim │ │ │ │ ├── edit.html.slim │ │ │ │ ├── index.html.slim │ │ │ │ └── new.html.slim │ │ │ ├── questions/ │ │ │ │ └── show.json.jbuilder │ │ │ ├── rubrics/ │ │ │ │ ├── fetch_answer_evaluations.json.jbuilder │ │ │ │ ├── fetch_mock_answer_evaluations.json.jbuilder │ │ │ │ ├── index.json.jbuilder │ │ │ │ └── rubric_answers.json.jbuilder │ │ │ ├── skill_branches/ │ │ │ │ ├── _skill_branch_list_data.json.jbuilder │ │ │ │ └── _skill_branch_user_list_data.json.jbuilder │ │ │ ├── skills/ │ │ │ │ ├── _options.json.jbuilder │ │ │ │ ├── _skill_list_data.json.jbuilder │ │ │ │ ├── _skill_user_list_data.json.jbuilder │ │ │ │ └── index.json.jbuilder │ │ │ ├── submission/ │ │ │ │ ├── answer/ │ │ │ │ │ ├── answers/ │ │ │ │ │ │ └── show.json.jbuilder │ │ │ │ │ └── forum_post_response/ │ │ │ │ │ └── posts/ │ │ │ │ │ ├── _post_packs.json.jbuilder │ │ │ │ │ └── selected.json.jbuilder │ │ │ │ ├── logs/ │ │ │ │ │ ├── _info.json.jbuilder │ │ │ │ │ ├── _logs.json.jbuilder │ │ │ │ │ └── index.json.jbuilder │ │ │ │ └── submissions/ │ │ │ │ ├── _answers.json.jbuilder │ │ │ │ ├── _history.json.jbuilder │ │ │ │ ├── _question.json.jbuilder │ │ │ │ ├── _questions.json.jbuilder │ │ │ │ ├── _submission.json.jbuilder │ │ │ │ ├── _topics.json.jbuilder │ │ │ │ ├── create_live_feedback_chat.json.jbuilder │ │ │ │ ├── edit.json.jbuilder │ │ │ │ ├── fetch_live_feedback_chat.json.jbuilder │ │ │ │ ├── fetch_live_feedback_status.json.jbuilder │ │ │ │ └── index.json.jbuilder │ │ │ ├── submission_question/ │ │ │ │ └── submission_questions/ │ │ │ │ └── all_answers.json.jbuilder │ │ │ └── submissions/ │ │ │ ├── _filter.json.jbuilder │ │ │ ├── _submissions_list_data.json.jbuilder │ │ │ ├── _tabs.json.jbuilder │ │ │ ├── index.json.jbuilder │ │ │ └── pending.json.jbuilder │ │ ├── condition/ │ │ │ ├── _condition_data.json.jbuilder │ │ │ ├── _condition_list_data.json.jbuilder │ │ │ ├── _conditions.json.jbuilder │ │ │ ├── _enabled_conditions.json.jbuilder │ │ │ ├── achievements/ │ │ │ │ └── _achievement.json.jbuilder │ │ │ ├── assessments/ │ │ │ │ ├── _assessment.json.jbuilder │ │ │ │ ├── _assessment_condition.json.jbuilder │ │ │ │ └── available_assessments.json.jbuilder │ │ │ ├── levels/ │ │ │ │ └── _level.json.jbuilder │ │ │ ├── scholaistic_assessments/ │ │ │ │ ├── _scholaistic_assessment.json.jbuilder │ │ │ │ └── available_scholaistic_assessments.json.jbuilder │ │ │ └── surveys/ │ │ │ ├── _survey.json.jbuilder │ │ │ └── available_surveys.json.jbuilder │ │ ├── courses/ │ │ │ ├── _course_data.json.jbuilder │ │ │ ├── _course_list_data.json.jbuilder │ │ │ ├── _course_user_progress.json.jbuilder │ │ │ ├── _sidebar_items.json.jbuilder │ │ │ ├── index.json.jbuilder │ │ │ ├── show.json.jbuilder │ │ │ └── sidebar.json.jbuilder │ │ ├── discussion/ │ │ │ ├── posts/ │ │ │ │ └── _post.json.jbuilder │ │ │ └── topics/ │ │ │ ├── _discussion_topic_programming_file_annotation.jbuilder │ │ │ ├── _discussion_topic_submission_question.json.jbuilder │ │ │ ├── _discussion_topic_video.json.jbuilder │ │ │ ├── _tabs.json.jbuilder │ │ │ ├── _topic.json.jbuilder │ │ │ ├── discussion_topic_list_data.jbuilder │ │ │ └── index.json.jbuilder │ │ ├── enrol_requests/ │ │ │ ├── _enrol_request_list_data.json.jbuilder │ │ │ └── index.json.jbuilder │ │ ├── experience_points/ │ │ │ ├── disbursement/ │ │ │ │ └── new.json.jbuilder │ │ │ └── forum_disbursement/ │ │ │ └── new.json.jbuilder │ │ ├── experience_points_records/ │ │ │ ├── _experience_points_record.json.jbuilder │ │ │ ├── index.jbuilder │ │ │ └── show.jbuilder │ │ ├── forum/ │ │ │ ├── forums/ │ │ │ │ ├── _forum_list_data.json.jbuilder │ │ │ │ ├── all_posts.json.jbuilder │ │ │ │ ├── index.json.jbuilder │ │ │ │ ├── search.json.jbuilder │ │ │ │ └── show.json.jbuilder │ │ │ ├── posts/ │ │ │ │ ├── _post_creator_data.json.jbuilder │ │ │ │ ├── _post_list_data.json.jbuilder │ │ │ │ ├── _post_publish_data.json.jbuilder │ │ │ │ └── create.json.jbuilder │ │ │ └── topics/ │ │ │ ├── _topic_list_data.json.jbuilder │ │ │ └── show.json.jbuilder │ │ ├── group/ │ │ │ ├── _group.json.jbuilder │ │ │ ├── group_categories/ │ │ │ │ ├── create_groups.json.jbuilder │ │ │ │ ├── index.json.jbuilder │ │ │ │ ├── show_info.json.jbuilder │ │ │ │ └── show_users.json.jbuilder │ │ │ └── groups/ │ │ │ └── update.json.jbuilder │ │ ├── leaderboards/ │ │ │ ├── _leaderboard_achievement_list_data.json.jbuilder │ │ │ ├── _leaderboard_group_list_data.json.jbuilder │ │ │ ├── _leaderboard_list_data.json.jbuilder │ │ │ └── index.json.jbuilder │ │ ├── learning_map/ │ │ │ └── index.json.jbuilder │ │ ├── lesson_plan/ │ │ │ ├── events/ │ │ │ │ └── _event_lesson_plan_item.json.jbuilder │ │ │ ├── items/ │ │ │ │ ├── _item.json.jbuilder │ │ │ │ ├── _personal_or_ref_time.json.jbuilder │ │ │ │ └── index.json.jbuilder │ │ │ ├── milestones/ │ │ │ │ └── _milestone.json.jbuilder │ │ │ └── todos/ │ │ │ └── _todo.json.jbuilder │ │ ├── levels/ │ │ │ └── index.json.jbuilder │ │ ├── mailer/ │ │ │ ├── assessment_closing_reminder_email.html.slim │ │ │ ├── assessment_closing_reminder_email.text.erb │ │ │ ├── assessment_closing_summary_email.html.slim │ │ │ ├── assessment_closing_summary_email.text.erb │ │ │ ├── course_duplicate_failed_email.html.slim │ │ │ ├── course_duplicate_failed_email.text.erb │ │ │ ├── course_duplicated_email.html.slim │ │ │ ├── course_duplicated_email.text.erb │ │ │ ├── course_user_deletion_failed_email.html.slim │ │ │ ├── course_user_deletion_failed_email.text.erb │ │ │ ├── submission_graded_email.html.slim │ │ │ ├── submission_graded_email.text.erb │ │ │ ├── survey_closing_reminder_email.html.slim │ │ │ ├── survey_closing_reminder_email.text.erb │ │ │ ├── survey_closing_summary_email.html.slim │ │ │ ├── survey_closing_summary_email.text.erb │ │ │ ├── user_added_email.html.slim │ │ │ ├── user_added_email.text.erb │ │ │ ├── user_enrol_request_received_email.html.slim │ │ │ ├── user_enrol_request_received_email.text.erb │ │ │ ├── user_enrol_requested_email.html.slim │ │ │ ├── user_enrol_requested_email.text.erb │ │ │ ├── user_invitation_email.html.slim │ │ │ ├── user_invitation_email.text.erb │ │ │ ├── user_rejected_email.html.slim │ │ │ ├── user_rejected_email.text.erb │ │ │ ├── user_suspended_email.html.slim │ │ │ ├── user_suspended_email.text.erb │ │ │ ├── user_unsuspended_email.html.slim │ │ │ ├── user_unsuspended_email.text.erb │ │ │ ├── video_closing_reminder_email.html.slim │ │ │ └── video_closing_reminder_email.text.erb │ │ ├── material/ │ │ │ ├── _material.json.jbuilder │ │ │ └── folders/ │ │ │ ├── breadcrumbs.json.jbuilder │ │ │ ├── show.json.jbuilder │ │ │ └── upload_materials.json.jbuilder │ │ ├── object_duplications/ │ │ │ ├── _course_duplication_data.json.jbuilder │ │ │ └── new.json.jbuilder │ │ ├── personal_times/ │ │ │ ├── _personal_time_list_data.json.jbuilder │ │ │ └── index.json.jbuilder │ │ ├── plagiarism/ │ │ │ └── assessments/ │ │ │ ├── _plagiarism_check.json.jbuilder │ │ │ ├── _plagiarism_checks.json.jbuilder │ │ │ ├── index.json.jbuilder │ │ │ ├── linked_and_unlinked_assessments.json.jbuilder │ │ │ └── plagiarism_data.json.jbuilder │ │ ├── question_assessments/ │ │ │ └── _question_assessment.json.jbuilder │ │ ├── reference_timelines/ │ │ │ ├── _reference_timeline.json.jbuilder │ │ │ └── index.json.jbuilder │ │ ├── rubrics/ │ │ │ ├── _answer_evaluation.json.jbuilder │ │ │ ├── _mock_answer_evaluation.json.jbuilder │ │ │ ├── _rubric.json.jbuilder │ │ │ └── index.json.jbuilder │ │ ├── scholaistic/ │ │ │ ├── assistants/ │ │ │ │ ├── index.json.jbuilder │ │ │ │ └── show.json.jbuilder │ │ │ ├── scholaistic_assessments/ │ │ │ │ ├── edit.json.jbuilder │ │ │ │ ├── index.json.jbuilder │ │ │ │ ├── new.json.jbuilder │ │ │ │ └── show.json.jbuilder │ │ │ └── submissions/ │ │ │ ├── index.json.jbuilder │ │ │ └── show.json.jbuilder │ │ ├── statistics/ │ │ │ ├── aggregate/ │ │ │ │ ├── activity_get_help.json.jbuilder │ │ │ │ ├── all_assessments.json.jbuilder │ │ │ │ ├── all_staff.json.jbuilder │ │ │ │ ├── all_students.json.jbuilder │ │ │ │ ├── course_performance.json.jbuilder │ │ │ │ └── course_progression.json.jbuilder │ │ │ ├── assessments/ │ │ │ │ ├── _answer.json.jbuilder │ │ │ │ ├── _assessment.json.jbuilder │ │ │ │ ├── _attempt_status.json.jbuilder │ │ │ │ ├── _course_user.json.jbuilder │ │ │ │ ├── _live_feedback_history_details.json.jbuilder │ │ │ │ ├── _submission.json.jbuilder │ │ │ │ ├── ancestor_info.json.jbuilder │ │ │ │ ├── ancestor_statistics.json.jbuilder │ │ │ │ ├── assessment_statistics.json.jbuilder │ │ │ │ ├── live_feedback_history.json.jbuilder │ │ │ │ ├── live_feedback_statistics.json.jbuilder │ │ │ │ └── submission_statistics.json.jbuilder │ │ │ ├── statistics/ │ │ │ │ └── index.json.jbuilder │ │ │ └── users/ │ │ │ └── learning_rate_records.json.jbuilder │ │ ├── survey/ │ │ │ ├── questions/ │ │ │ │ ├── _option.json.jbuilder │ │ │ │ └── _question.json.jbuilder │ │ │ ├── responses/ │ │ │ │ ├── _response.json.jbuilder │ │ │ │ ├── _see_other.json.jbuilder │ │ │ │ └── index.json.jbuilder │ │ │ ├── sections/ │ │ │ │ └── _section.json.jbuilder │ │ │ └── surveys/ │ │ │ ├── _survey.json.jbuilder │ │ │ ├── _survey_with_questions.json.jbuilder │ │ │ ├── index.json.jbuilder │ │ │ └── results.json.jbuilder │ │ ├── surveys/ │ │ │ └── _survey_lesson_plan_item.json.jbuilder │ │ ├── user_email_subscriptions/ │ │ │ └── _subscription_setting.json.jbuilder │ │ ├── user_invitations/ │ │ │ ├── _course_user_invitation_list.json.jbuilder │ │ │ ├── _course_user_invitation_list_data.json.jbuilder │ │ │ ├── _invitation_result_data.json.jbuilder │ │ │ ├── index.json.jbuilder │ │ │ └── new.json.jbuilder │ │ ├── user_registrations/ │ │ │ └── _registration.json.jbuilder │ │ ├── users/ │ │ │ ├── _permissions_data.json.jbuilder │ │ │ ├── _tabs_data.json.jbuilder │ │ │ ├── _upgrade_to_staff_results.json.jbuilder │ │ │ ├── _user.json.jbuilder │ │ │ ├── _user_data.json.jbuilder │ │ │ ├── _user_list_data.json.jbuilder │ │ │ ├── index.json.jbuilder │ │ │ ├── show.json.jbuilder │ │ │ ├── staff.json.jbuilder │ │ │ └── students.json.jbuilder │ │ ├── video/ │ │ │ ├── sessions/ │ │ │ │ └── _session.json.jbuilder │ │ │ ├── submission/ │ │ │ │ ├── sessions/ │ │ │ │ │ └── create.json.jbuilder │ │ │ │ └── submissions/ │ │ │ │ ├── _watch_next_video_url.json.jbuilder │ │ │ │ ├── edit.json.jbuilder │ │ │ │ ├── index.json.jbuilder │ │ │ │ └── show.json.jbuilder │ │ │ ├── topics/ │ │ │ │ ├── _post.json.jbuilder │ │ │ │ ├── _posts.json.jbuilder │ │ │ │ ├── _topic.json.jbuilder │ │ │ │ ├── _topics.json.jbuilder │ │ │ │ ├── create.json.jbuilder │ │ │ │ ├── index.json.jbuilder │ │ │ │ └── show.json.jbuilder │ │ │ └── videos/ │ │ │ ├── _video.json.jbuilder │ │ │ ├── _video_data.json.jbuilder │ │ │ ├── _video_lesson_plan_item.json.jbuilder │ │ │ ├── _video_list_data.json.jbuilder │ │ │ ├── _video_statistics.json.jbuilder │ │ │ ├── index.json.jbuilder │ │ │ └── show.json.jbuilder │ │ └── video_submissions/ │ │ └── index.json.jbuilder │ ├── instance/ │ │ └── mailer/ │ │ ├── user_added_email.html.slim │ │ ├── user_added_email.text.erb │ │ ├── user_invitation_email.html.slim │ │ └── user_invitation_email.text.erb │ ├── instance_user_role_request_mailer/ │ │ ├── new_role_request.html.slim │ │ ├── new_role_request.text.erb │ │ ├── role_request_approved.html.slim │ │ ├── role_request_approved.text.erb │ │ ├── role_request_rejected.html.slim │ │ └── role_request_rejected.text.erb │ ├── instance_user_role_requests/ │ │ ├── _instance_user_role_request_list_data.json.jbuilder │ │ └── index.json.jbuilder │ ├── jobs/ │ │ ├── _completed.json.jbuilder │ │ ├── _errored.json.jbuilder │ │ ├── _submitted.json.jbuilder │ │ └── show.json.jbuilder │ ├── layouts/ │ │ ├── _manage_email_subscription.html.slim │ │ ├── _manage_email_subscription.text.erb │ │ ├── _materials.json.jbuilder │ │ ├── mailer.html.slim │ │ ├── mailer.text.erb │ │ ├── no_greeting_mailer.html.slim │ │ └── no_greeting_mailer.text.erb │ ├── notifiers/ │ │ └── course/ │ │ ├── achievement_notifier/ │ │ │ └── gained/ │ │ │ ├── course_notifications/ │ │ │ │ └── _feed.json.jbuilder │ │ │ └── user_notifications/ │ │ │ └── popup.json.jbuilder │ │ ├── announcement_notifier/ │ │ │ └── new/ │ │ │ └── course_notifications/ │ │ │ └── email.html.slim │ │ ├── assessment/ │ │ │ ├── answer/ │ │ │ │ └── comment_notifier/ │ │ │ │ └── annotated/ │ │ │ │ └── user_notifications/ │ │ │ │ └── email.html.slim │ │ │ └── submission_question/ │ │ │ └── comment_notifier/ │ │ │ └── replied/ │ │ │ └── user_notifications/ │ │ │ └── email.html.slim │ │ ├── assessment_notifier/ │ │ │ ├── attempted/ │ │ │ │ └── course_notifications/ │ │ │ │ └── _feed.json.jbuilder │ │ │ ├── opening/ │ │ │ │ └── course_notifications/ │ │ │ │ └── email.html.slim │ │ │ └── submitted/ │ │ │ └── user_notifications/ │ │ │ └── email.html.slim │ │ ├── consolidated_opening_reminder_notifier/ │ │ │ └── opening_reminder/ │ │ │ └── course_notifications/ │ │ │ ├── course/ │ │ │ │ ├── _assessment.html.slim │ │ │ │ ├── _survey.html.slim │ │ │ │ └── _video.html.slim │ │ │ └── email.html.slim │ │ ├── forum/ │ │ │ ├── post_notifier/ │ │ │ │ ├── replied/ │ │ │ │ │ ├── course_notifications/ │ │ │ │ │ │ └── _feed.json.jbuilder │ │ │ │ │ └── user_notifications/ │ │ │ │ │ └── email.html.slim │ │ │ │ └── voted/ │ │ │ │ └── course_notifications/ │ │ │ │ └── _feed.json.jbuilder │ │ │ └── topic_notifier/ │ │ │ └── created/ │ │ │ ├── course_notifications/ │ │ │ │ └── _feed.json.jbuilder │ │ │ └── user_notifications/ │ │ │ └── email.html.slim │ │ ├── level_notifier/ │ │ │ └── reached/ │ │ │ ├── course_notifications/ │ │ │ │ └── _feed.json.jbuilder │ │ │ └── user_notifications/ │ │ │ └── popup.json.jbuilder │ │ └── video_notifier/ │ │ ├── attempted/ │ │ │ └── course_notifications/ │ │ │ └── _feed.json.jbuilder │ │ ├── closing/ │ │ │ └── user_notifications/ │ │ │ └── email.html.slim │ │ └── opening/ │ │ └── course_notifications/ │ │ └── email.html.slim │ ├── system/ │ │ └── admin/ │ │ ├── announcements/ │ │ │ └── index.json.jbuilder │ │ ├── courses/ │ │ │ ├── _course_list_data.json.jbuilder │ │ │ └── index.json.jbuilder │ │ ├── get_help/ │ │ │ └── index.json.jbuilder │ │ ├── instance/ │ │ │ ├── admin/ │ │ │ │ └── index.json.jbuilder │ │ │ ├── announcements/ │ │ │ │ └── index.json.jbuilder │ │ │ ├── components/ │ │ │ │ └── index.json.jbuilder │ │ │ ├── courses/ │ │ │ │ └── index.json.jbuilder │ │ │ ├── get_help/ │ │ │ │ └── index.json.jbuilder │ │ │ ├── user_invitations/ │ │ │ │ ├── _instance_user_invitation_list_data.json.jbuilder │ │ │ │ ├── _invitation_result_data.json.jbuilder │ │ │ │ └── index.json.jbuilder │ │ │ └── users/ │ │ │ ├── _user_list_data.json.jbuilder │ │ │ └── index.json.jbuilder │ │ ├── instances/ │ │ │ ├── _instance_list_data.json.jbuilder │ │ │ └── index.json.jbuilder │ │ └── users/ │ │ ├── _user_list_data.json.jbuilder │ │ └── index.json.jbuilder │ ├── user/ │ │ ├── emails/ │ │ │ ├── _email_list_data.json.jbuilder │ │ │ └── index.json.jbuilder │ │ ├── profiles/ │ │ │ ├── edit.json.jbuilder │ │ │ └── show.json.jbuilder │ │ └── registrations/ │ │ └── create.json.jbuilder │ └── users/ │ ├── _course_list_data.json.jbuilder │ ├── _instance_list_data.json.jbuilder │ └── show.json.jbuilder ├── authentication/ │ ├── Dockerfile │ ├── README.md │ ├── docker-compose.yml │ ├── env │ ├── import/ │ │ └── coursemology_realm.json │ ├── script/ │ │ └── cm_db_federation.sql │ └── theme/ │ └── coursemology-keycloakify-keycloak-theme-6.1.7.jar ├── bin/ │ ├── bundle │ ├── rails │ ├── rake │ ├── setup │ ├── spring │ └── update ├── client/ │ ├── .babelrc │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .prettierignore │ ├── .prettierrc.js │ ├── .yarn-integrity │ ├── CONTRIBUTING.md │ ├── README.md │ ├── app/ │ │ ├── App.tsx │ │ ├── __test__/ │ │ │ ├── mocks/ │ │ │ │ ├── ResizeObserver.js │ │ │ │ ├── axiosMock.js │ │ │ │ ├── fileMock.js │ │ │ │ ├── matchMedia.js │ │ │ │ ├── requestAnimationFrame.js │ │ │ │ └── svgMock.js │ │ │ ├── setup.js │ │ │ └── utils/ │ │ │ ├── __test__/ │ │ │ │ └── shallowUntil.test.js │ │ │ └── shallowUntil.js │ │ ├── api/ │ │ │ ├── Announcements.ts │ │ │ ├── Attachments.ts │ │ │ ├── Base.ts │ │ │ ├── ErrorHandling.ts │ │ │ ├── Home.ts │ │ │ ├── Jobs.ts │ │ │ ├── Users.ts │ │ │ ├── course/ │ │ │ │ ├── Achievements.ts │ │ │ │ ├── Admin/ │ │ │ │ │ ├── Announcements.ts │ │ │ │ │ ├── Assessments.ts │ │ │ │ │ ├── Base.ts │ │ │ │ │ ├── Codaveri.ts │ │ │ │ │ ├── Comments.ts │ │ │ │ │ ├── Components.ts │ │ │ │ │ ├── Course.ts │ │ │ │ │ ├── Forums.ts │ │ │ │ │ ├── Leaderboard.ts │ │ │ │ │ ├── LessonPlan.ts │ │ │ │ │ ├── Materials.ts │ │ │ │ │ ├── Notifications.ts │ │ │ │ │ ├── RagWise.ts │ │ │ │ │ ├── Scholaistic.ts │ │ │ │ │ ├── Sidebar.ts │ │ │ │ │ ├── Stories.ts │ │ │ │ │ ├── Videos.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Announcements.ts │ │ │ │ ├── Assessment/ │ │ │ │ │ ├── AllAnswers.ts │ │ │ │ │ ├── Assessments.js │ │ │ │ │ ├── Base.js │ │ │ │ │ ├── Categories.js │ │ │ │ │ ├── Question/ │ │ │ │ │ │ ├── ForumPostResponse.ts │ │ │ │ │ │ ├── McqMrq.ts │ │ │ │ │ │ ├── MockAnswers.ts │ │ │ │ │ │ ├── Programming.ts │ │ │ │ │ │ ├── Questions.ts │ │ │ │ │ │ ├── RubricBasedResponse.ts │ │ │ │ │ │ ├── Rubrics.ts │ │ │ │ │ │ ├── Scribing.js │ │ │ │ │ │ ├── TextResponse.ts │ │ │ │ │ │ ├── VoiceResponse.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── Sessions.ts │ │ │ │ │ ├── Skills.ts │ │ │ │ │ ├── Submission/ │ │ │ │ │ │ ├── Answer/ │ │ │ │ │ │ │ ├── Answer.ts │ │ │ │ │ │ │ ├── ForumPostResponse.js │ │ │ │ │ │ │ ├── Programming.js │ │ │ │ │ │ │ ├── Scribing.js │ │ │ │ │ │ │ ├── TextResponse.ts │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ └── Logs/ │ │ │ │ │ │ └── Logs.ts │ │ │ │ │ ├── SubmissionQuestions.js │ │ │ │ │ ├── Submissions/ │ │ │ │ │ │ └── Submissions.ts │ │ │ │ │ ├── Submissions.js │ │ │ │ │ └── index.ts │ │ │ │ ├── Base.js │ │ │ │ ├── Comments.ts │ │ │ │ ├── Conditions.ts │ │ │ │ ├── Courses.ts │ │ │ │ ├── Disbursement.ts │ │ │ │ ├── Duplication.js │ │ │ │ ├── EnrolRequests.ts │ │ │ │ ├── ExperiencePointsRecord.ts │ │ │ │ ├── Forum/ │ │ │ │ │ ├── Forums.ts │ │ │ │ │ ├── Posts.ts │ │ │ │ │ ├── Topics.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Groups.js │ │ │ │ ├── Leaderboard.ts │ │ │ │ ├── LearningMap.js │ │ │ │ ├── LessonPlan.js │ │ │ │ ├── Level.ts │ │ │ │ ├── Material/ │ │ │ │ │ └── Folders.ts │ │ │ │ ├── MaterialFolders.js │ │ │ │ ├── Materials.ts │ │ │ │ ├── PersonalTimes.ts │ │ │ │ ├── Plagiarism.ts │ │ │ │ ├── Posts.js │ │ │ │ ├── ReferenceTimelines.ts │ │ │ │ ├── Rubrics.ts │ │ │ │ ├── Scholaistic.ts │ │ │ │ ├── Statistics/ │ │ │ │ │ ├── AnswerStatistics.ts │ │ │ │ │ ├── AssessmentStatistics.ts │ │ │ │ │ ├── CourseStatistics.ts │ │ │ │ │ ├── UserStatistics.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Stories.ts │ │ │ │ ├── Survey/ │ │ │ │ │ ├── Base.js │ │ │ │ │ ├── Questions.js │ │ │ │ │ ├── Responses.js │ │ │ │ │ ├── Sections.js │ │ │ │ │ ├── Surveys.js │ │ │ │ │ └── index.js │ │ │ │ ├── UserEmailSubscriptions.js │ │ │ │ ├── UserInvitations.ts │ │ │ │ ├── UserNotifications.ts │ │ │ │ ├── Users.ts │ │ │ │ ├── Video/ │ │ │ │ │ ├── Base.js │ │ │ │ │ ├── Sessions.js │ │ │ │ │ ├── Submissions.ts │ │ │ │ │ ├── Topics.js │ │ │ │ │ ├── Videos.ts │ │ │ │ │ └── index.js │ │ │ │ ├── VideoSubmissions.ts │ │ │ │ └── index.js │ │ │ ├── index.ts │ │ │ ├── system/ │ │ │ │ ├── Admin.ts │ │ │ │ ├── Base.ts │ │ │ │ ├── InstanceAdmin.ts │ │ │ │ └── index.js │ │ │ └── types.ts │ │ ├── assets/ │ │ │ └── templates/ │ │ │ └── course-user-invitation-template.csv │ │ ├── bundles/ │ │ │ ├── announcements/ │ │ │ │ ├── GlobalAnnouncementIndex.tsx │ │ │ │ ├── operations.ts │ │ │ │ ├── selectors.ts │ │ │ │ ├── store.ts │ │ │ │ └── types.ts │ │ │ ├── authentication/ │ │ │ │ └── pages/ │ │ │ │ └── AuthenticationRedirection/ │ │ │ │ └── index.tsx │ │ │ ├── common/ │ │ │ │ ├── DashboardPage.tsx │ │ │ │ ├── ErrorPage.tsx │ │ │ │ ├── LandingPage.tsx │ │ │ │ ├── PrivacyPolicyPage/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── privacy-policy.md │ │ │ │ ├── TermsOfServicePage/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── terms-of-service.md │ │ │ │ ├── components/ │ │ │ │ │ └── NewCourseButton.tsx │ │ │ │ └── store.ts │ │ │ ├── course/ │ │ │ │ ├── achievement/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ ├── AchievementManagementButtons.tsx │ │ │ │ │ │ │ └── AwardButton.tsx │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ └── AchievementForm.tsx │ │ │ │ │ │ ├── misc/ │ │ │ │ │ │ │ └── AchievementReordering.tsx │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ └── AchievementTable.tsx │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── AchievementAward/ │ │ │ │ │ │ │ ├── AchievementAwardManager.tsx │ │ │ │ │ │ │ ├── AchievementAwardSummary.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── AchievementEdit/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── AchievementNew/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── AchievementShow/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── AchievementsIndex/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── admin/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── SettingsNavigation.tsx │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── AnnouncementsSettings/ │ │ │ │ │ │ │ ├── AnnouncementsSettingsForm.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── AssessmentSettings/ │ │ │ │ │ │ │ ├── AssessmentCategoriesManager/ │ │ │ │ │ │ │ │ ├── Category.tsx │ │ │ │ │ │ │ │ ├── MoveAssessmentsMenu.tsx │ │ │ │ │ │ │ │ ├── MoveTabsMenu.tsx │ │ │ │ │ │ │ │ ├── Tab.tsx │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ │ ├── AssessmentSettingsContext.ts │ │ │ │ │ │ │ ├── AssessmentSettingsForm.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── CodaveriSettings/ │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── AssessmentCategory.tsx │ │ │ │ │ │ │ │ ├── AssessmentList.tsx │ │ │ │ │ │ │ │ ├── AssessmentListItem.tsx │ │ │ │ │ │ │ │ ├── AssessmentProgrammingQnList.tsx │ │ │ │ │ │ │ │ ├── AssessmentTab.tsx │ │ │ │ │ │ │ │ ├── CodaveriSettingsChip.tsx │ │ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ │ │ ├── CodaveriEvaluatorToggleButton.tsx │ │ │ │ │ │ │ │ │ ├── CodaveriToggleButtons.tsx │ │ │ │ │ │ │ │ │ ├── ExpandAllSwitch.tsx │ │ │ │ │ │ │ │ │ └── LiveFeedbackToggleButton.tsx │ │ │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ │ │ └── CodaveriSettingsForm.tsx │ │ │ │ │ │ │ │ └── lists/ │ │ │ │ │ │ │ │ └── CollapsibleList.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── CommentsSettings/ │ │ │ │ │ │ │ ├── CommentsSettingsForm.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── ComponentSettings/ │ │ │ │ │ │ │ ├── ComponentSettingsForm.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── CourseSettings/ │ │ │ │ │ │ │ ├── CourseSettingsForm.tsx │ │ │ │ │ │ │ ├── DeleteCoursePrompt.tsx │ │ │ │ │ │ │ ├── OffsetTimesPrompt.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ ├── translations.ts │ │ │ │ │ │ │ └── validationSchema.ts │ │ │ │ │ │ ├── ForumsSettings/ │ │ │ │ │ │ │ ├── ForumsSettingsForm.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── LeaderboardSettings/ │ │ │ │ │ │ │ ├── LeaderboardSettingsForm.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── LessonPlanSettings/ │ │ │ │ │ │ │ ├── MilestoneGroupSettings.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── index.test.tsx │ │ │ │ │ │ │ ├── index.jsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.intl.js │ │ │ │ │ │ ├── MaterialsSettings/ │ │ │ │ │ │ │ ├── MaterialsSettingsForm.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── NotificationSettings/ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── index.test.tsx │ │ │ │ │ │ │ ├── index.jsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.intl.js │ │ │ │ │ │ ├── RagWiseSettings/ │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── CourseTab.tsx │ │ │ │ │ │ │ │ ├── FolderTab.tsx │ │ │ │ │ │ │ │ ├── ForumItem.tsx │ │ │ │ │ │ │ │ ├── ForumList.tsx │ │ │ │ │ │ │ │ ├── MaterialItem.tsx │ │ │ │ │ │ │ │ ├── MaterialList.tsx │ │ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ │ │ ├── ExpandAllSwitch.tsx │ │ │ │ │ │ │ │ │ ├── ForumKnowledgeBaseSwitch.tsx │ │ │ │ │ │ │ │ │ └── MaterialKnowledgeBaseSwitch.tsx │ │ │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ │ │ └── RagWiseSettingsForm.tsx │ │ │ │ │ │ │ │ └── lists/ │ │ │ │ │ │ │ │ └── CollapsibleList.tsx │ │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── ScholaisticSettings/ │ │ │ │ │ │ │ ├── PingResultAlert.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── loader.ts │ │ │ │ │ │ │ └── operations.ts │ │ │ │ │ │ ├── SidebarSettings/ │ │ │ │ │ │ │ ├── SidebarSettingsForm.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ ├── StoriesSettings/ │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ └── Introduction.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── operations.ts │ │ │ │ │ │ └── VideosSettings/ │ │ │ │ │ │ ├── VideosSettingsForm.tsx │ │ │ │ │ │ ├── VideosTabsManager/ │ │ │ │ │ │ │ ├── Tab.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ └── translations.ts │ │ │ │ │ ├── reducers/ │ │ │ │ │ │ ├── codaveriSettings.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── lessonPlanSettings.ts │ │ │ │ │ │ ├── notificationSettings.ts │ │ │ │ │ │ └── ragWiseSettings.ts │ │ │ │ │ └── translations.ts │ │ │ │ ├── announcements/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ └── NewAnnouncementButton.tsx │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ └── AnnouncementForm.tsx │ │ │ │ │ │ └── misc/ │ │ │ │ │ │ ├── AnnouncementCard.tsx │ │ │ │ │ │ └── AnnouncementsDisplay.tsx │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── AnnouncementEdit/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── AnnouncementNew/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── AnnouncementsIndex/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── assessment/ │ │ │ │ │ ├── attemptLoader.ts │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── AssessmentForm/ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── index.test.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ ├── translations.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ └── useFormValidation.tsx │ │ │ │ │ │ ├── ConvertMcqMrqButton/ │ │ │ │ │ │ │ ├── ConvertMcqMrqPrompt.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── FileManager/ │ │ │ │ │ │ │ ├── Toolbar.tsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── index.test.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── translations.intl.js │ │ │ │ │ │ ├── Koditsu/ │ │ │ │ │ │ │ ├── KoditsuChip.tsx │ │ │ │ │ │ │ └── KoditsuChipButton.tsx │ │ │ │ │ │ └── monitoring/ │ │ │ │ │ │ ├── BlocksInvalidBrowserFormField.tsx │ │ │ │ │ │ ├── BrowserAuthorizationMethodOptionsFormFields/ │ │ │ │ │ │ │ ├── SebConfigKeyOptionsFormFields.tsx │ │ │ │ │ │ │ ├── UserAgentOptionsFormFields.tsx │ │ │ │ │ │ │ ├── common.ts │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── BrowserAuthorizationOptionsFormFields.tsx │ │ │ │ │ │ ├── EnableMonitoringFormField.tsx │ │ │ │ │ │ ├── MonitoringIntervalsFormFields.tsx │ │ │ │ │ │ ├── MonitoringOptionsFormFields.tsx │ │ │ │ │ │ └── translations.ts │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── operations/ │ │ │ │ │ │ ├── assessments.ts │ │ │ │ │ │ ├── history.ts │ │ │ │ │ │ ├── liveFeedback.ts │ │ │ │ │ │ ├── monitoring.ts │ │ │ │ │ │ ├── plagiarism.ts │ │ │ │ │ │ ├── questions.ts │ │ │ │ │ │ └── statistics.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── AssessmentAuthenticate/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── AssessmentBlockedByMonitorPage.tsx │ │ │ │ │ │ ├── AssessmentEdit/ │ │ │ │ │ │ │ ├── AssessmentEditPage.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── index.test.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── AssessmentGenerate/ │ │ │ │ │ │ │ ├── GenerateTabs.tsx │ │ │ │ │ │ │ ├── LockableSection.tsx │ │ │ │ │ │ │ ├── MultipleResponse/ │ │ │ │ │ │ │ │ ├── GenerateMcqMrqConversation.tsx │ │ │ │ │ │ │ │ ├── GenerateMcqMrqExportDialog.tsx │ │ │ │ │ │ │ │ ├── GenerateMcqMrqPrototypeForm.tsx │ │ │ │ │ │ │ │ └── GenerateMcqMrqQuestionPage.tsx │ │ │ │ │ │ │ ├── Programming/ │ │ │ │ │ │ │ │ ├── GenerateProgrammingConversation.tsx │ │ │ │ │ │ │ │ ├── GenerateProgrammingExportDialog.tsx │ │ │ │ │ │ │ │ ├── GenerateProgrammingPrototypeForm.tsx │ │ │ │ │ │ │ │ ├── GenerateProgrammingQuestionPage.tsx │ │ │ │ │ │ │ │ └── TestCasesManager.tsx │ │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── AssessmentMonitoring/ │ │ │ │ │ │ │ ├── PulseGrid.tsx │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── ActiveSessionBlob.tsx │ │ │ │ │ │ │ │ ├── ActivityCenter.tsx │ │ │ │ │ │ │ │ ├── ConnectionStatus.tsx │ │ │ │ │ │ │ │ ├── FilterAutocomplete.tsx │ │ │ │ │ │ │ │ ├── HeartbeatDetailCard.tsx │ │ │ │ │ │ │ │ ├── HeartbeatsTimeline.tsx │ │ │ │ │ │ │ │ ├── HeartbeatsTimelineChart.tsx │ │ │ │ │ │ │ │ ├── SebPayloadDetail.tsx │ │ │ │ │ │ │ │ ├── Session.tsx │ │ │ │ │ │ │ │ ├── SessionBlob.tsx │ │ │ │ │ │ │ │ ├── SessionBlobLegend.tsx │ │ │ │ │ │ │ │ ├── SessionDetailsPopup.tsx │ │ │ │ │ │ │ │ ├── SessionsGrid.tsx │ │ │ │ │ │ │ │ ├── UserAgentDetail.tsx │ │ │ │ │ │ │ │ └── ValidChip.tsx │ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ │ ├── liveMonitoringChannel.ts │ │ │ │ │ │ │ │ ├── useLiveMonitoringChannel.ts │ │ │ │ │ │ │ │ ├── useMonitoring.ts │ │ │ │ │ │ │ │ └── usePresence.ts │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── AssessmentPlagiarism/ │ │ │ │ │ │ │ ├── AssessmentPlagiarismPage.tsx │ │ │ │ │ │ │ ├── PlagiarismCheckStatus.tsx │ │ │ │ │ │ │ ├── PlagiarismResultsTable.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── selectors.ts │ │ │ │ │ │ ├── AssessmentShow/ │ │ │ │ │ │ │ ├── AssessmentDetails.tsx │ │ │ │ │ │ │ ├── AssessmentShowHeader.tsx │ │ │ │ │ │ │ ├── AssessmentShowPage.tsx │ │ │ │ │ │ │ ├── GenerateQuestionMenu.tsx │ │ │ │ │ │ │ ├── McqWidget.tsx │ │ │ │ │ │ │ ├── NewQuestionMenu.tsx │ │ │ │ │ │ │ ├── Question.tsx │ │ │ │ │ │ │ ├── QuestionsManager.tsx │ │ │ │ │ │ │ ├── UnavailableAlert.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── prompts/ │ │ │ │ │ │ │ ├── DeleteQuestionButtonPrompt.tsx │ │ │ │ │ │ │ └── DuplicationPrompt.tsx │ │ │ │ │ │ ├── AssessmentStatistics/ │ │ │ │ │ │ │ ├── AncestorOptions.tsx │ │ │ │ │ │ │ ├── AncestorStatistics.tsx │ │ │ │ │ │ │ ├── AnswerDisplay/ │ │ │ │ │ │ │ │ └── LastAttempt.tsx │ │ │ │ │ │ │ ├── AssessmentStatisticsPage.tsx │ │ │ │ │ │ │ ├── DuplicationHistoryStatistics.tsx │ │ │ │ │ │ │ ├── GradeDistribution/ │ │ │ │ │ │ │ │ ├── AncestorGradesChart.tsx │ │ │ │ │ │ │ │ ├── GradesChart.tsx │ │ │ │ │ │ │ │ └── MainGradesChart.tsx │ │ │ │ │ │ │ ├── LiveFeedbackHistory/ │ │ │ │ │ │ │ │ ├── GetHelpSlider.tsx │ │ │ │ │ │ │ │ ├── LiveFeedbackConversation.tsx │ │ │ │ │ │ │ │ ├── LiveFeedbackDetails.tsx │ │ │ │ │ │ │ │ ├── LiveFeedbackFiles.tsx │ │ │ │ │ │ │ │ ├── LiveFeedbackHistoryTimelineView.tsx │ │ │ │ │ │ │ │ ├── LiveFeedbackMessageHistory.tsx │ │ │ │ │ │ │ │ ├── LiveFeedbackMessageOptionHistory.tsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── LiveFeedbackStatistics.tsx │ │ │ │ │ │ │ ├── LiveFeedbackStatisticsTable.tsx │ │ │ │ │ │ │ ├── StatisticsCharts.tsx │ │ │ │ │ │ │ ├── StudentAttemptCountTable.tsx │ │ │ │ │ │ │ ├── StudentGradesPerQuestionTable.tsx │ │ │ │ │ │ │ ├── SubmissionStatus/ │ │ │ │ │ │ │ │ ├── AncestorSubmissionChart.tsx │ │ │ │ │ │ │ │ ├── MainSubmissionChart.tsx │ │ │ │ │ │ │ │ └── SubmissionStatusChart.tsx │ │ │ │ │ │ │ ├── SubmissionTimeAndGradeStatistics/ │ │ │ │ │ │ │ │ ├── AncestorSubmissionTimeAndGradeStatistics.tsx │ │ │ │ │ │ │ │ ├── MainSubmissionTimeAndGradeStatistics.tsx │ │ │ │ │ │ │ │ └── SubmissionTimeAndGradeChart.tsx │ │ │ │ │ │ │ ├── classNameUtils.ts │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ └── LiveFeedbackMetricsSelector.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ │ ├── translations.ts │ │ │ │ │ │ │ └── utils.js │ │ │ │ │ │ └── AssessmentsIndex/ │ │ │ │ │ │ ├── ActionButtons.tsx │ │ │ │ │ │ ├── AssessmentsTable.tsx │ │ │ │ │ │ ├── NewAssessmentFormButton.jsx │ │ │ │ │ │ ├── StatusBadges.tsx │ │ │ │ │ │ ├── UnavailableMessage.tsx │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── question/ │ │ │ │ │ │ ├── commons/ │ │ │ │ │ │ │ ├── useDirty.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── AIGradingPlaygroundAlert.tsx │ │ │ │ │ │ │ ├── CommonQuestionFields.tsx │ │ │ │ │ │ │ ├── QuestionFormOutlet.tsx │ │ │ │ │ │ │ └── SkillsAutocomplete.tsx │ │ │ │ │ │ ├── forum-post-responses/ │ │ │ │ │ │ │ ├── EditForumPostResponsePage.tsx │ │ │ │ │ │ │ ├── NewForumPostResponsePage.tsx │ │ │ │ │ │ │ ├── commons/ │ │ │ │ │ │ │ │ └── validations.ts │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ └── ForumPostResponseForm.tsx │ │ │ │ │ │ │ └── operation.ts │ │ │ │ │ │ ├── multiple-responses/ │ │ │ │ │ │ │ ├── EditMcqMrqPage.tsx │ │ │ │ │ │ │ ├── NewMcqMrqPage.tsx │ │ │ │ │ │ │ ├── commons/ │ │ │ │ │ │ │ │ ├── translationAdapter.tsx │ │ │ │ │ │ │ │ └── validations.ts │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── AdaptedForm.tsx │ │ │ │ │ │ │ │ ├── ConvertMcqMrqIllustration/ │ │ │ │ │ │ │ │ │ ├── McqIllustration.tsx │ │ │ │ │ │ │ │ │ ├── MrqIllustration.tsx │ │ │ │ │ │ │ │ │ ├── OptionSkeleton.tsx │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── McqMrqForm.tsx │ │ │ │ │ │ │ │ ├── Option.tsx │ │ │ │ │ │ │ │ └── OptionsManager.tsx │ │ │ │ │ │ │ └── operations.ts │ │ │ │ │ │ ├── programming/ │ │ │ │ │ │ │ ├── EditProgrammingQuestionPage.tsx │ │ │ │ │ │ │ ├── NewProgrammingQuestionPage.tsx │ │ │ │ │ │ │ ├── ProgrammingForm.tsx │ │ │ │ │ │ │ ├── commons/ │ │ │ │ │ │ │ │ ├── builder.ts │ │ │ │ │ │ │ │ └── validation.ts │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── ReorderableTestCasesManager.tsx │ │ │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ │ │ ├── ControlledEditor.tsx │ │ │ │ │ │ │ │ │ ├── DataFileRow.tsx │ │ │ │ │ │ │ │ │ ├── DataFilesAccordion.tsx │ │ │ │ │ │ │ │ │ ├── DataFilesManager.tsx │ │ │ │ │ │ │ │ │ ├── EditorAccordion.tsx │ │ │ │ │ │ │ │ │ ├── ExpressionField.tsx │ │ │ │ │ │ │ │ │ ├── ImportResult.tsx │ │ │ │ │ │ │ │ │ ├── InstalledDependenciesPrompt.tsx │ │ │ │ │ │ │ │ │ ├── InstalledDependenciesTable.tsx │ │ │ │ │ │ │ │ │ ├── PackageInfo.tsx │ │ │ │ │ │ │ │ │ ├── PackageUploader.tsx │ │ │ │ │ │ │ │ │ ├── ReorderableJavaTestCase.tsx │ │ │ │ │ │ │ │ │ ├── ReorderableTestCase.tsx │ │ │ │ │ │ │ │ │ ├── ReorderableTestCases.tsx │ │ │ │ │ │ │ │ │ ├── StaticTestCase.tsx │ │ │ │ │ │ │ │ │ ├── StaticTestCases.tsx │ │ │ │ │ │ │ │ │ ├── StaticTestCasesTable.tsx │ │ │ │ │ │ │ │ │ ├── TestCaseCell.tsx │ │ │ │ │ │ │ │ │ └── TestCaseRow.tsx │ │ │ │ │ │ │ │ ├── package/ │ │ │ │ │ │ │ │ │ ├── BasicPackageEditor.tsx │ │ │ │ │ │ │ │ │ ├── CppPackageEditor.tsx │ │ │ │ │ │ │ │ │ ├── CsharpPackageEditor.tsx │ │ │ │ │ │ │ │ │ ├── GoPackageEditor.tsx │ │ │ │ │ │ │ │ │ ├── JavaPackageEditor.tsx │ │ │ │ │ │ │ │ │ ├── JavascriptPackageEditor.tsx │ │ │ │ │ │ │ │ │ ├── PackageDetails.tsx │ │ │ │ │ │ │ │ │ ├── PackageEditor.tsx │ │ │ │ │ │ │ │ │ ├── PolyglotEditor.tsx │ │ │ │ │ │ │ │ │ ├── PythonPackageEditor.tsx │ │ │ │ │ │ │ │ │ ├── RPackageEditor.tsx │ │ │ │ │ │ │ │ │ ├── RustPackageEditor.tsx │ │ │ │ │ │ │ │ │ └── TypescriptPackageEditor.tsx │ │ │ │ │ │ │ │ └── sections/ │ │ │ │ │ │ │ │ ├── BuildLog.tsx │ │ │ │ │ │ │ │ ├── EvaluatorFields.tsx │ │ │ │ │ │ │ │ ├── FeedbackFields.tsx │ │ │ │ │ │ │ │ ├── LanguageFields.tsx │ │ │ │ │ │ │ │ ├── PackageFields.tsx │ │ │ │ │ │ │ │ ├── QuestionFields.tsx │ │ │ │ │ │ │ │ └── SubmitWarningDialog.tsx │ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ │ ├── ProgrammingFormDataContext.tsx │ │ │ │ │ │ │ │ └── useLanguageMode.tsx │ │ │ │ │ │ │ └── operations.ts │ │ │ │ │ │ ├── reducers/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── rubrics.ts │ │ │ │ │ │ ├── rubric-based-responses/ │ │ │ │ │ │ │ ├── EditRubricBasedResponsePage.tsx │ │ │ │ │ │ │ ├── NewRubricBasedResponsePage.tsx │ │ │ │ │ │ │ ├── commons/ │ │ │ │ │ │ │ │ └── validation.ts │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── AIGradingFields.tsx │ │ │ │ │ │ │ │ ├── CategoryManager.tsx │ │ │ │ │ │ │ │ ├── QuestionFields.tsx │ │ │ │ │ │ │ │ └── RubricBasedResponseForm.tsx │ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ │ └── RubricBasedResponseFormDataContext.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── rubric-playground/ │ │ │ │ │ │ │ ├── AddAnswersPrompt.tsx │ │ │ │ │ │ │ ├── AnswerEvaluationsTable/ │ │ │ │ │ │ │ │ ├── CategoryGradeCell.tsx │ │ │ │ │ │ │ │ ├── PopoverContentCell.tsx │ │ │ │ │ │ │ │ ├── TotalGradeCell.tsx │ │ │ │ │ │ │ │ ├── UnevaluatedCell.tsx │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ │ ├── AnswerEvaluationsTableHeader.tsx │ │ │ │ │ │ │ ├── RubricEditForm/ │ │ │ │ │ │ │ │ ├── PlaygroundCategoryManager.tsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── RubricHeader/ │ │ │ │ │ │ │ │ ├── HeaderButton.tsx │ │ │ │ │ │ │ │ ├── VersionSlider.tsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── RubricPlaygroundPage.tsx │ │ │ │ │ │ │ ├── operations/ │ │ │ │ │ │ │ │ ├── answers.ts │ │ │ │ │ │ │ │ ├── mockAnswers.ts │ │ │ │ │ │ │ │ ├── rowEvaluation.ts │ │ │ │ │ │ │ │ └── rubric.ts │ │ │ │ │ │ │ ├── translations.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── scribing/ │ │ │ │ │ │ │ ├── ScribingQuestion.tsx │ │ │ │ │ │ │ ├── ScribingQuestionForm/ │ │ │ │ │ │ │ │ ├── ScribingQuestionForm.scss │ │ │ │ │ │ │ │ ├── index.jsx │ │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ ├── index.test.tsx │ │ │ │ │ │ │ │ └── responses.test.ts │ │ │ │ │ │ │ ├── constants.js │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ ├── propTypes.js │ │ │ │ │ │ │ ├── store.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ └── utils.js │ │ │ │ │ │ ├── selectors/ │ │ │ │ │ │ │ └── rubrics.ts │ │ │ │ │ │ ├── text-responses/ │ │ │ │ │ │ │ ├── EditTextResponsePage.tsx │ │ │ │ │ │ │ ├── NewTextResponsePage.tsx │ │ │ │ │ │ │ ├── commons/ │ │ │ │ │ │ │ │ └── validations.ts │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── FileUploadManager.tsx │ │ │ │ │ │ │ │ ├── Solution.tsx │ │ │ │ │ │ │ │ ├── SolutionsManager.tsx │ │ │ │ │ │ │ │ └── TextResponseForm.tsx │ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ │ └── utils.tsx │ │ │ │ │ │ └── voice-responses/ │ │ │ │ │ │ ├── EditVoicePage.tsx │ │ │ │ │ │ ├── NewVoicePage.tsx │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── VoiceForm.tsx │ │ │ │ │ │ └── operations.ts │ │ │ │ │ ├── reducers/ │ │ │ │ │ │ ├── editPage.js │ │ │ │ │ │ ├── formDialog.js │ │ │ │ │ │ ├── generation.ts │ │ │ │ │ │ ├── liveFeedback.ts │ │ │ │ │ │ ├── monitoring.ts │ │ │ │ │ │ ├── plagiarism.ts │ │ │ │ │ │ └── statistics.ts │ │ │ │ │ ├── sessions/ │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ └── pages/ │ │ │ │ │ │ └── AssessmentSessionNew/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── skills/ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ │ └── SkillManagementButtons.tsx │ │ │ │ │ │ │ ├── dialogs/ │ │ │ │ │ │ │ │ └── SkillDialog.tsx │ │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ │ └── SkillForm.tsx │ │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ │ └── SkillsTable.tsx │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ ├── pages/ │ │ │ │ │ │ │ └── SkillsIndex/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── store.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── submission/ │ │ │ │ │ │ ├── actions/ │ │ │ │ │ │ │ ├── annotations.js │ │ │ │ │ │ │ ├── answers/ │ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ │ └── scribing.test.ts │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ ├── programming.js │ │ │ │ │ │ │ │ ├── scribing.ts │ │ │ │ │ │ │ │ ├── textResponse.js │ │ │ │ │ │ │ │ └── voiceResponse.js │ │ │ │ │ │ │ ├── comments.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── live_feedback.ts │ │ │ │ │ │ │ ├── logs.ts │ │ │ │ │ │ │ ├── submissions.js │ │ │ │ │ │ │ └── utils.js │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── AllAttempts/ │ │ │ │ │ │ │ │ ├── AllAttemptsQuestion.tsx │ │ │ │ │ │ │ │ ├── AllAttemptsSequenceView.tsx │ │ │ │ │ │ │ │ ├── AllAttemptsTimelineView.tsx │ │ │ │ │ │ │ │ ├── Comment.tsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── AnswerDetails/ │ │ │ │ │ │ │ │ ├── AnswerDetails.tsx │ │ │ │ │ │ │ │ ├── AttachmentDetails.tsx │ │ │ │ │ │ │ │ ├── FileUploadDetails.tsx │ │ │ │ │ │ │ │ ├── ForumPostResponseComponent/ │ │ │ │ │ │ │ │ │ ├── ParentPostPack.tsx │ │ │ │ │ │ │ │ │ ├── PostContent.tsx │ │ │ │ │ │ │ │ │ └── PostPack.tsx │ │ │ │ │ │ │ │ ├── ForumPostResponseDetails.tsx │ │ │ │ │ │ │ │ ├── MultipleChoiceDetails.tsx │ │ │ │ │ │ │ │ ├── MultipleResponseDetails.tsx │ │ │ │ │ │ │ │ ├── ProgrammingAnswerDetails.tsx │ │ │ │ │ │ │ │ ├── ProgrammingComponent/ │ │ │ │ │ │ │ │ │ ├── CodaveriFeedbackStatus.tsx │ │ │ │ │ │ │ │ │ ├── FileContent.tsx │ │ │ │ │ │ │ │ │ ├── TestCaseRow.tsx │ │ │ │ │ │ │ │ │ └── TestCases.tsx │ │ │ │ │ │ │ │ ├── RubricBasedResponseDetails.tsx │ │ │ │ │ │ │ │ └── TextResponseDetails.tsx │ │ │ │ │ │ │ ├── DropzoneErrorComponent.tsx │ │ │ │ │ │ │ ├── Editor.jsx │ │ │ │ │ │ │ ├── EvaluatorErrorPanel.tsx │ │ │ │ │ │ │ ├── FileInput.jsx │ │ │ │ │ │ │ ├── GetHelpChatPage/ │ │ │ │ │ │ │ │ ├── ChatInputArea.tsx │ │ │ │ │ │ │ │ ├── ChipButton.tsx │ │ │ │ │ │ │ │ ├── ConversationArea.tsx │ │ │ │ │ │ │ │ ├── Header.tsx │ │ │ │ │ │ │ │ ├── SuggestionChips.tsx │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ │ ├── MarkdownText.tsx │ │ │ │ │ │ │ ├── ProgressPanel.tsx │ │ │ │ │ │ │ ├── ReadOnlyEditor/ │ │ │ │ │ │ │ │ ├── AddCommentIcon.jsx │ │ │ │ │ │ │ │ ├── Checkbox.jsx │ │ │ │ │ │ │ │ ├── NarrowEditor.jsx │ │ │ │ │ │ │ │ ├── WideComments.jsx │ │ │ │ │ │ │ │ ├── WideEditor.jsx │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ ├── ScribingView/ │ │ │ │ │ │ │ │ ├── LayersComponent.tsx │ │ │ │ │ │ │ │ ├── ScribingCanvas.tsx │ │ │ │ │ │ │ │ ├── ScribingToolbar.tsx │ │ │ │ │ │ │ │ ├── ScribingView.scss │ │ │ │ │ │ │ │ ├── ToolDropdown.jsx │ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ │ ├── ScribingToolbar.test.tsx │ │ │ │ │ │ │ │ │ └── index.test.tsx │ │ │ │ │ │ │ │ ├── fields/ │ │ │ │ │ │ │ │ │ ├── ColorPickerField.jsx │ │ │ │ │ │ │ │ │ ├── FontFamilyField.jsx │ │ │ │ │ │ │ │ │ ├── FontSizeField.jsx │ │ │ │ │ │ │ │ │ ├── LineStyleField.jsx │ │ │ │ │ │ │ │ │ ├── LineThicknessField.jsx │ │ │ │ │ │ │ │ │ ├── ShapeField.tsx │ │ │ │ │ │ │ │ │ └── __test__/ │ │ │ │ │ │ │ │ │ └── ColorPickerField.test.js │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ └── popovers/ │ │ │ │ │ │ │ │ ├── DrawPopover.jsx │ │ │ │ │ │ │ │ ├── LinePopover.jsx │ │ │ │ │ │ │ │ ├── ShapePopover.jsx │ │ │ │ │ │ │ │ └── TypePopover.jsx │ │ │ │ │ │ │ ├── SubmissionWorkflowState.tsx │ │ │ │ │ │ │ ├── TextResponseSolutions.jsx │ │ │ │ │ │ │ ├── WarningDialog.tsx │ │ │ │ │ │ │ ├── answers/ │ │ │ │ │ │ │ │ ├── Answer.tsx │ │ │ │ │ │ │ │ ├── AnswerHeader.tsx │ │ │ │ │ │ │ │ ├── AnswerNotImplemented.tsx │ │ │ │ │ │ │ │ ├── FileUpload/ │ │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ │ ├── ForumPostResponse/ │ │ │ │ │ │ │ │ │ ├── CardTitle.jsx │ │ │ │ │ │ │ │ │ ├── Error.jsx │ │ │ │ │ │ │ │ │ ├── ForumCard.jsx │ │ │ │ │ │ │ │ │ ├── ForumPost.jsx │ │ │ │ │ │ │ │ │ ├── ForumPostOption.jsx │ │ │ │ │ │ │ │ │ ├── ForumPostSelect.jsx │ │ │ │ │ │ │ │ │ ├── ForumPostSelectDialog.jsx │ │ │ │ │ │ │ │ │ ├── Labels.jsx │ │ │ │ │ │ │ │ │ ├── ParentPost.jsx │ │ │ │ │ │ │ │ │ ├── SelectedPostCard.jsx │ │ │ │ │ │ │ │ │ ├── TopicCard.jsx │ │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ │ ├── MultipleChoice/ │ │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ │ ├── MultipleResponse/ │ │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ │ ├── Programming/ │ │ │ │ │ │ │ │ │ ├── ProgrammingFile.tsx │ │ │ │ │ │ │ │ │ ├── ProgrammingFileDownloadChip.tsx │ │ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ │ │ └── ProgrammingFile.test.tsx │ │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ │ ├── RubricBasedResponse/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── TextResponse/ │ │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ │ ├── adapters/ │ │ │ │ │ │ │ │ │ ├── FileUploadAdapter.tsx │ │ │ │ │ │ │ │ │ ├── ForumPostResponseAdapter.tsx │ │ │ │ │ │ │ │ │ ├── MultipleChoiceAdapter.tsx │ │ │ │ │ │ │ │ │ ├── MultipleResponseAdapter.tsx │ │ │ │ │ │ │ │ │ ├── ProgrammingAdapter.tsx │ │ │ │ │ │ │ │ │ ├── RubricBasedResponseAdapter.tsx │ │ │ │ │ │ │ │ │ ├── ScribingAdapter.tsx │ │ │ │ │ │ │ │ │ ├── TextResponseAdapter.tsx │ │ │ │ │ │ │ │ │ └── VoiceResponseAdapter.tsx │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ └── utils.tsx │ │ │ │ │ │ │ └── comment/ │ │ │ │ │ │ │ ├── CodaveriCommentCard.jsx │ │ │ │ │ │ │ ├── CommentCard.jsx │ │ │ │ │ │ │ └── CommentField.jsx │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ ├── containers/ │ │ │ │ │ │ │ ├── Annotations.jsx │ │ │ │ │ │ │ ├── CodaveriFeedbackStatus.jsx │ │ │ │ │ │ │ ├── Comments.jsx │ │ │ │ │ │ │ ├── GradingPanel.jsx │ │ │ │ │ │ │ ├── PostPreview.tsx │ │ │ │ │ │ │ ├── ProgrammingImport/ │ │ │ │ │ │ │ │ ├── ImportedFileView.jsx │ │ │ │ │ │ │ │ ├── ProgrammingImportEditor.jsx │ │ │ │ │ │ │ │ └── ProgrammingImportHistoryView.jsx │ │ │ │ │ │ │ ├── QuestionGrade.tsx │ │ │ │ │ │ │ ├── ReadOnlyEditor.jsx │ │ │ │ │ │ │ ├── RubricExplanation.tsx │ │ │ │ │ │ │ ├── RubricGrade.tsx │ │ │ │ │ │ │ ├── RubricPanel.tsx │ │ │ │ │ │ │ ├── RubricPanelRow.tsx │ │ │ │ │ │ │ ├── ScribingView.jsx │ │ │ │ │ │ │ ├── TestCaseView/ │ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ │ └── index.test.js │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ ├── UploadedFileView.jsx │ │ │ │ │ │ │ └── VoiceResponseAnswer.jsx │ │ │ │ │ │ ├── localStorage/ │ │ │ │ │ │ │ └── liveFeedbackChat/ │ │ │ │ │ │ │ └── operations.ts │ │ │ │ │ │ ├── pages/ │ │ │ │ │ │ │ ├── LogsIndex/ │ │ │ │ │ │ │ │ ├── LogsContent.tsx │ │ │ │ │ │ │ │ ├── LogsHead.tsx │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ └── translations.ts │ │ │ │ │ │ │ ├── SubmissionEditIndex/ │ │ │ │ │ │ │ │ ├── BlockedSubmission.tsx │ │ │ │ │ │ │ │ ├── ErrorHelper.tsx │ │ │ │ │ │ │ │ ├── SubmissionEmptyForm.tsx │ │ │ │ │ │ │ │ ├── SubmissionForm.tsx │ │ │ │ │ │ │ │ ├── TimeLimitBanner.tsx │ │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ │ ├── ActionButtonsRow.tsx │ │ │ │ │ │ │ │ │ ├── AutogradingErrorPanel.tsx │ │ │ │ │ │ │ │ │ ├── ErrorMessages.tsx │ │ │ │ │ │ │ │ │ ├── ExplanationPanel.tsx │ │ │ │ │ │ │ │ │ ├── QuestionContent.tsx │ │ │ │ │ │ │ │ │ ├── SinglePageQuestions.tsx │ │ │ │ │ │ │ │ │ ├── TabbedViewQuestions.tsx │ │ │ │ │ │ │ │ │ └── button/ │ │ │ │ │ │ │ │ │ ├── AutogradeSubmissionButton.tsx │ │ │ │ │ │ │ │ │ ├── ContinueButton.tsx │ │ │ │ │ │ │ │ │ ├── FinaliseButton.tsx │ │ │ │ │ │ │ │ │ ├── LiveFeedbackButton.tsx │ │ │ │ │ │ │ │ │ ├── MarkButton.tsx │ │ │ │ │ │ │ │ │ ├── PublishButton.tsx │ │ │ │ │ │ │ │ │ ├── ReevaluateButton.tsx │ │ │ │ │ │ │ │ │ ├── ResetAnswerButton.tsx │ │ │ │ │ │ │ │ │ ├── SaveDraftButton.tsx │ │ │ │ │ │ │ │ │ ├── SaveGradeButton.tsx │ │ │ │ │ │ │ │ │ ├── StepperButton.tsx │ │ │ │ │ │ │ │ │ ├── SubmitButton.tsx │ │ │ │ │ │ │ │ │ ├── SubmitEmptyFormButton.tsx │ │ │ │ │ │ │ │ │ ├── UnmarkButton.tsx │ │ │ │ │ │ │ │ │ └── UnsubmitButton.tsx │ │ │ │ │ │ │ │ ├── index.jsx │ │ │ │ │ │ │ │ ├── useErrorTranslation.ts │ │ │ │ │ │ │ │ └── validations/ │ │ │ │ │ │ │ │ ├── AllValidation.tsx │ │ │ │ │ │ │ │ ├── AttachmentValidation.tsx │ │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ │ └── SubmissionsIndex/ │ │ │ │ │ │ │ ├── SubmissionsTable.jsx │ │ │ │ │ │ │ ├── SubmissionsTableRow.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── submissionsTable.test.jsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── translations.js │ │ │ │ │ │ ├── propTypes.js │ │ │ │ │ │ ├── reducers/ │ │ │ │ │ │ │ ├── annotations.js │ │ │ │ │ │ │ ├── answerFlags/ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── answers.js │ │ │ │ │ │ │ ├── assessment.js │ │ │ │ │ │ │ ├── attachments.js │ │ │ │ │ │ │ ├── codaveriFeedbackStatus.js │ │ │ │ │ │ │ ├── commentForms.js │ │ │ │ │ │ │ ├── explanations.js │ │ │ │ │ │ │ ├── grading/ │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ │ ├── history/ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── liveFeedbackChats/ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── posts.js │ │ │ │ │ │ │ ├── questions.js │ │ │ │ │ │ │ ├── questionsFlags.js │ │ │ │ │ │ │ ├── recorder.js │ │ │ │ │ │ │ ├── scribing/ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── submission.js │ │ │ │ │ │ │ ├── submissionFlags.js │ │ │ │ │ │ │ ├── submissions.js │ │ │ │ │ │ │ ├── testCases.js │ │ │ │ │ │ │ └── topics.js │ │ │ │ │ │ ├── selectors/ │ │ │ │ │ │ │ ├── answerFlags.ts │ │ │ │ │ │ │ ├── answers.ts │ │ │ │ │ │ │ ├── assessments.ts │ │ │ │ │ │ │ ├── attachments.ts │ │ │ │ │ │ │ ├── codaveriFeedbackStatus.ts │ │ │ │ │ │ │ ├── comments.ts │ │ │ │ │ │ │ ├── explanations.ts │ │ │ │ │ │ │ ├── grading.ts │ │ │ │ │ │ │ ├── history.ts │ │ │ │ │ │ │ ├── liveFeedbackChats.ts │ │ │ │ │ │ │ ├── questionFlags.ts │ │ │ │ │ │ │ ├── questions.ts │ │ │ │ │ │ │ ├── submissionFlags.ts │ │ │ │ │ │ │ ├── submissions.ts │ │ │ │ │ │ │ └── topics.ts │ │ │ │ │ │ ├── suggestionTranslations.ts │ │ │ │ │ │ ├── translations.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ ├── answers.ts │ │ │ │ │ │ ├── rubrics.ts │ │ │ │ │ │ └── timer.ts │ │ │ │ │ ├── submissions/ │ │ │ │ │ │ ├── SubmissionsIndex.tsx │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ │ └── SubmissionsTableButton.tsx │ │ │ │ │ │ │ ├── misc/ │ │ │ │ │ │ │ │ ├── SubmissionFilter.tsx │ │ │ │ │ │ │ │ └── SubmissionTabs.tsx │ │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ │ └── SubmissionsTable.tsx │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── store.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── translations.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ └── index.test.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── recorderHelper.js │ │ │ │ ├── container/ │ │ │ │ │ ├── Breadcrumbs/ │ │ │ │ │ │ ├── Breadcrumbs.tsx │ │ │ │ │ │ ├── Crumb.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── sliders.tsx │ │ │ │ │ ├── CourseContainer.tsx │ │ │ │ │ ├── CourseLoader.ts │ │ │ │ │ ├── Sidebar/ │ │ │ │ │ │ ├── CourseItem.tsx │ │ │ │ │ │ ├── CourseUserItem.tsx │ │ │ │ │ │ ├── CourseUserProgress.tsx │ │ │ │ │ │ ├── LevelRing.tsx │ │ │ │ │ │ ├── PinSidebarButton.tsx │ │ │ │ │ │ ├── Sidebar.tsx │ │ │ │ │ │ ├── SidebarAccordion.tsx │ │ │ │ │ │ ├── SidebarContainer.tsx │ │ │ │ │ │ ├── SidebarItem.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── unread.ts │ │ │ │ ├── courses/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ ├── TodoAccessButton.tsx │ │ │ │ │ │ │ └── TodoIgnoreButton.tsx │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ ├── CourseInvitationCodeForm.tsx │ │ │ │ │ │ │ └── NewCourseForm.tsx │ │ │ │ │ │ ├── misc/ │ │ │ │ │ │ │ ├── CourseAnnouncements.tsx │ │ │ │ │ │ │ ├── CourseDisplay.tsx │ │ │ │ │ │ │ ├── CourseEnrolOptions.tsx │ │ │ │ │ │ │ ├── CourseInfoBox.tsx │ │ │ │ │ │ │ ├── CourseNotifications.tsx │ │ │ │ │ │ │ ├── CourseSuspendedAlert.tsx │ │ │ │ │ │ │ └── NotificationCard.tsx │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ └── PendingTodosTable.tsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── CourseShow/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── CoursesIndex/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── CoursesNew/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── discussion/ │ │ │ │ │ └── topics/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── cards/ │ │ │ │ │ │ │ ├── CodaveriCommentCard.tsx │ │ │ │ │ │ │ ├── CommentCard.tsx │ │ │ │ │ │ │ └── TopicCard.tsx │ │ │ │ │ │ ├── fields/ │ │ │ │ │ │ │ └── CommentField.tsx │ │ │ │ │ │ └── lists/ │ │ │ │ │ │ └── TopicList.tsx │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── CommentIndex/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── duplication/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── BulkSelectors.jsx │ │ │ │ │ │ ├── CourseDropdownMenu.jsx │ │ │ │ │ │ ├── IndentedCheckbox.jsx │ │ │ │ │ │ ├── TypeBadge/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ └── UnpublishedIcon.jsx │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── operations.js │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── Duplication/ │ │ │ │ │ │ ├── DestinationCourseSelector/ │ │ │ │ │ │ │ ├── InstanceDropdown.tsx │ │ │ │ │ │ │ ├── NewCourseForm.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── DuplicateAllButton.jsx │ │ │ │ │ │ ├── DuplicateButton.jsx │ │ │ │ │ │ ├── DuplicateItemsConfirmation/ │ │ │ │ │ │ │ ├── AchievementsListing.jsx │ │ │ │ │ │ │ ├── AssessmentsListing.jsx │ │ │ │ │ │ │ ├── MaterialsListing.jsx │ │ │ │ │ │ │ ├── SurveyListing.jsx │ │ │ │ │ │ │ ├── VideosListing.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── ItemsSelector/ │ │ │ │ │ │ │ ├── AchievementsSelector.jsx │ │ │ │ │ │ │ ├── AssessmentsSelector.jsx │ │ │ │ │ │ │ ├── MaterialsSelector.jsx │ │ │ │ │ │ │ ├── SurveysSelector.jsx │ │ │ │ │ │ │ ├── VideosSelector.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── ItemsSelectorMenu/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ ├── DuplicateButton.test.tsx │ │ │ │ │ │ │ └── ObjectDuplication.test.jsx │ │ │ │ │ │ └── index.jsx │ │ │ │ │ ├── propTypes.js │ │ │ │ │ ├── selectors/ │ │ │ │ │ │ ├── destinationCourse.js │ │ │ │ │ │ └── destinationInstance.ts │ │ │ │ │ ├── store.js │ │ │ │ │ └── utils.js │ │ │ │ ├── enrol-requests/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ └── PendingEnrolRequestsButtons.tsx │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ └── EnrolRequestsTable.tsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── UserRequests/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── experience-points/ │ │ │ │ │ ├── ExperiencePointsDetails.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── ExperiencePointsDownload.tsx │ │ │ │ │ │ ├── ExperiencePointsFiltering.tsx │ │ │ │ │ │ ├── ExperiencePointsNumberField.tsx │ │ │ │ │ │ ├── ExperiencePointsReasonField.tsx │ │ │ │ │ │ ├── ExperiencePointsTable.tsx │ │ │ │ │ │ └── ExperiencePointsTableRow.tsx │ │ │ │ │ ├── disbursement/ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ │ ├── DuplicateButton.tsx │ │ │ │ │ │ │ │ └── RemoveAllButton.tsx │ │ │ │ │ │ │ ├── fields/ │ │ │ │ │ │ │ │ └── PointField.tsx │ │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ │ ├── DisbursementForm.tsx │ │ │ │ │ │ │ │ ├── FilterForm.tsx │ │ │ │ │ │ │ │ └── ForumDisbursementForm.tsx │ │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ │ ├── DisbursementTable.tsx │ │ │ │ │ │ │ ├── ForumDisbursementTable.tsx │ │ │ │ │ │ │ └── ForumPostTable.tsx │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ ├── pages/ │ │ │ │ │ │ │ ├── ForumDisbursement/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── GeneralDisbursement/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── store.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── selectors.ts │ │ │ │ │ └── store.ts │ │ │ │ ├── forum/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ ├── ForumManagementButtons.tsx │ │ │ │ │ │ │ ├── ForumTopicManagementButtons.tsx │ │ │ │ │ │ │ ├── ForumTopicPostEditActionButtons.tsx │ │ │ │ │ │ │ ├── ForumTopicPostManagementButtons.tsx │ │ │ │ │ │ │ ├── GenerateReplyButton.tsx │ │ │ │ │ │ │ ├── HideButton.tsx │ │ │ │ │ │ │ ├── LockButton.tsx │ │ │ │ │ │ │ ├── MarkAllAsReadButton.tsx │ │ │ │ │ │ │ ├── MarkAnswerAndPublishButton.tsx │ │ │ │ │ │ │ ├── MarkAnswerButton.tsx │ │ │ │ │ │ │ ├── NextUnreadButton.tsx │ │ │ │ │ │ │ ├── ReplyButton.tsx │ │ │ │ │ │ │ ├── SubscribeButton.tsx │ │ │ │ │ │ │ └── VotePostButton.tsx │ │ │ │ │ │ ├── cards/ │ │ │ │ │ │ │ ├── PostCard.tsx │ │ │ │ │ │ │ └── ReplyCard.tsx │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ ├── ForumForm.tsx │ │ │ │ │ │ │ ├── ForumTopicForm.tsx │ │ │ │ │ │ │ └── ForumTopicPostForm.tsx │ │ │ │ │ │ ├── misc/ │ │ │ │ │ │ │ └── PostCreatorObject.tsx │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ ├── ForumTable.tsx │ │ │ │ │ │ └── ForumTopicTable.tsx │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── ForumEdit/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ForumNew/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ForumShow/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ForumTopicEdit/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ForumTopicNew/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ForumTopicPostNew/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ForumTopicShow/ │ │ │ │ │ │ │ ├── TopicPostTrees.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── ForumsIndex/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── translations.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── group/ │ │ │ │ │ ├── actions/ │ │ │ │ │ │ ├── categories.js │ │ │ │ │ │ ├── general.js │ │ │ │ │ │ ├── groups.js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── GroupCard.tsx │ │ │ │ │ │ └── GroupRoleChip.tsx │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── forms/ │ │ │ │ │ │ ├── GroupCreationForm.jsx │ │ │ │ │ │ ├── GroupFormDialog.jsx │ │ │ │ │ │ └── NameDescriptionForm.jsx │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── GroupIndex/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── GroupNew/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ └── GroupShow/ │ │ │ │ │ │ ├── CategoryCard.tsx │ │ │ │ │ │ ├── GroupManager/ │ │ │ │ │ │ │ ├── ChangeSummaryTable.jsx │ │ │ │ │ │ │ ├── GroupManager.jsx │ │ │ │ │ │ │ ├── GroupUserManager.jsx │ │ │ │ │ │ │ ├── GroupUserManagerList.jsx │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── GroupTableCard.tsx │ │ │ │ │ │ └── index.jsx │ │ │ │ │ ├── propTypes.js │ │ │ │ │ ├── reducers/ │ │ │ │ │ │ ├── groupsDialog.js │ │ │ │ │ │ ├── groupsFetch.js │ │ │ │ │ │ └── groupsManage.js │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── groups.js │ │ │ │ │ └── sort.js │ │ │ │ ├── helper/ │ │ │ │ │ ├── achievements.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── leaderboard/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ └── LeaderboardTable.tsx │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── LeaderboardIndex/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── learning-map/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── ConnectionPoint/ │ │ │ │ │ │ │ ├── ConnectionPoint.scss │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── Gate/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── Node/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── NodeMenu/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── UnlockRateDisplay/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ └── ZoomActionElements/ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── containers/ │ │ │ │ │ │ ├── ArrowOverlay/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── Canvas/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── Dashboard/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── GateToNodeArrows/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── LearningMap/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── Levels/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ └── NodeToGateArrows/ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── propTypes.js │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── translations.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── lesson-plan/ │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── containers/ │ │ │ │ │ │ ├── ColumnVisibilityDropdown/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── EventFormDialog/ │ │ │ │ │ │ │ ├── EventForm.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── LessonPlanFilter/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── LessonPlanLayout/ │ │ │ │ │ │ │ ├── EnterEditModeButton.jsx │ │ │ │ │ │ │ ├── NewEventButton.jsx │ │ │ │ │ │ │ ├── NewMilestoneButton.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ ├── NewEventButton.test.jsx │ │ │ │ │ │ │ │ ├── NewMilestoneButton.test.jsx │ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── LessonPlanNav/ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── MilestoneFormDialog/ │ │ │ │ │ │ │ ├── MilestoneForm.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ └── TranslatedItemType.tsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── LessonPlanEdit/ │ │ │ │ │ │ │ ├── ItemRow/ │ │ │ │ │ │ │ │ ├── DateCell.jsx │ │ │ │ │ │ │ │ ├── PublishedCell.jsx │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ ├── MilestoneRow.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ ├── ItemRow.test.jsx │ │ │ │ │ │ │ │ ├── MilestoneRow.test.jsx │ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ └── LessonPlanShow/ │ │ │ │ │ │ ├── LessonPlanGroup.jsx │ │ │ │ │ │ ├── LessonPlanItem/ │ │ │ │ │ │ │ ├── AdminTools.jsx │ │ │ │ │ │ │ ├── Details/ │ │ │ │ │ │ │ │ ├── Chips.jsx │ │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ │ ├── Material.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── AdminTools.test.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── MilestoneAdminTools.jsx │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ ├── LessonPlanShow.test.jsx │ │ │ │ │ │ │ └── MilestoneAdminTools.test.jsx │ │ │ │ │ │ └── index.jsx │ │ │ │ │ ├── reducers/ │ │ │ │ │ │ ├── eventForm.js │ │ │ │ │ │ ├── flags.js │ │ │ │ │ │ ├── lessonPlan.js │ │ │ │ │ │ ├── milestoneForm.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ ├── store.ts │ │ │ │ │ └── translations.ts │ │ │ │ ├── level/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── LevelsTable.tsx │ │ │ │ │ │ └── LevelsTableRow.tsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── LevelsIndex/ │ │ │ │ │ │ ├── LevelsManager.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selector.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── material/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── MaterialStatusPage.tsx │ │ │ │ │ ├── files/ │ │ │ │ │ │ ├── DownloadingFilePage.tsx │ │ │ │ │ │ └── ErrorRetrievingFilePage.tsx │ │ │ │ │ ├── folders/ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ │ ├── DownloadFolderButton.tsx │ │ │ │ │ │ │ │ ├── KnowledgeBaseSwitch.tsx │ │ │ │ │ │ │ │ ├── NewSubfolderButton.tsx │ │ │ │ │ │ │ │ ├── UploadFilesButton.tsx │ │ │ │ │ │ │ │ └── WorkbinTableButtons.tsx │ │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ │ ├── FolderForm.tsx │ │ │ │ │ │ │ │ ├── MaterialForm.tsx │ │ │ │ │ │ │ │ └── MaterialUploadForm.tsx │ │ │ │ │ │ │ ├── misc/ │ │ │ │ │ │ │ │ ├── MaterialEdit.tsx │ │ │ │ │ │ │ │ ├── MaterialUpload.tsx │ │ │ │ │ │ │ │ └── MultipleFileInput.tsx │ │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ │ ├── TableMaterialRow.tsx │ │ │ │ │ │ │ ├── TableSubfolderRow.tsx │ │ │ │ │ │ │ └── WorkbinTable.tsx │ │ │ │ │ │ ├── handles.ts │ │ │ │ │ │ ├── operations.ts │ │ │ │ │ │ ├── pages/ │ │ │ │ │ │ │ ├── ErrorRetrievingFolderPage.tsx │ │ │ │ │ │ │ ├── FolderEdit/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── FolderNew/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── FolderShow/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── store.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ └── materialLoader.ts │ │ │ │ ├── plagiarism/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── AssessmentLinkDialog.tsx │ │ │ │ │ │ └── AssessmentLinkList.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── PlagiarismIndex/ │ │ │ │ │ │ ├── assessments/ │ │ │ │ │ │ │ └── AssessmentsPlagiarismTable.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── reducers/ │ │ │ │ │ │ └── assessments.ts │ │ │ │ │ ├── selectors.ts │ │ │ │ │ └── store.ts │ │ │ │ ├── reference-timelines/ │ │ │ │ │ ├── TimelineDesigner.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── CreateRenameTimelinePrompt.tsx │ │ │ │ │ │ ├── DayCalendar/ │ │ │ │ │ │ │ ├── DayCalendar.tsx │ │ │ │ │ │ │ ├── DayColumn.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── DeleteTimelinePrompt.tsx │ │ │ │ │ │ ├── HorizontallyDraggable.tsx │ │ │ │ │ │ ├── HorizontallyResizable.tsx │ │ │ │ │ │ ├── SeriouslyAnchoredPopup.tsx │ │ │ │ │ │ ├── SubmitIndicator.tsx │ │ │ │ │ │ ├── TimeBar/ │ │ │ │ │ │ │ ├── DurationBar.tsx │ │ │ │ │ │ │ ├── TimeBar.tsx │ │ │ │ │ │ │ ├── TimeBarHandle.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── TimePopup/ │ │ │ │ │ │ │ ├── TimePopup.tsx │ │ │ │ │ │ │ ├── TimePopupForm.tsx │ │ │ │ │ │ │ ├── TimePopupTopBar.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── TimelinesOverview/ │ │ │ │ │ │ │ ├── TimelinesOverview.tsx │ │ │ │ │ │ │ ├── TimelinesOverviewItem.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── TimelinesStack/ │ │ │ │ │ │ ├── AssignableTimeline.tsx │ │ │ │ │ │ ├── AssignedTimeline.tsx │ │ │ │ │ │ ├── Timeline.tsx │ │ │ │ │ │ ├── TimelinesStack.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── contexts/ │ │ │ │ │ │ ├── LastSavedContext.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── translations.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.ts │ │ │ │ │ └── views/ │ │ │ │ │ └── DayView/ │ │ │ │ │ ├── DayView.tsx │ │ │ │ │ ├── ItemsSidebar.tsx │ │ │ │ │ ├── TimelineSidebarItem.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── scholaistic/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── ScholaisticAsyncContainer.tsx │ │ │ │ │ │ ├── ScholaisticErrorPage.tsx │ │ │ │ │ │ └── ScholaisticFramePage.tsx │ │ │ │ │ ├── handles.ts │ │ │ │ │ └── pages/ │ │ │ │ │ ├── ScholaisticAssessmentEdit/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── loader.ts │ │ │ │ │ │ └── operations.ts │ │ │ │ │ ├── ScholaisticAssessmentNew/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── loader.ts │ │ │ │ │ ├── ScholaisticAssessmentSubmissionEdit/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── loader.ts │ │ │ │ │ ├── ScholaisticAssessmentSubmissionsIndex/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── loader.ts │ │ │ │ │ ├── ScholaisticAssessmentView/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── loader.ts │ │ │ │ │ ├── ScholaisticAssessmentsIndex/ │ │ │ │ │ │ ├── ActionButtons.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── loader.ts │ │ │ │ │ ├── ScholaisticAssistantEdit/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── loader.ts │ │ │ │ │ └── ScholaisticAssistantsIndex/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── loader.ts │ │ │ │ ├── statistics/ │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── StatisticsIndex/ │ │ │ │ │ │ ├── assessments/ │ │ │ │ │ │ │ ├── AssessmentsScoreSummaryDownload.tsx │ │ │ │ │ │ │ ├── AssessmentsStatistics.tsx │ │ │ │ │ │ │ └── AssessmentsStatisticsTable.tsx │ │ │ │ │ │ ├── course/ │ │ │ │ │ │ │ ├── CourseStatistics.tsx │ │ │ │ │ │ │ ├── StudentPerformanceTable.tsx │ │ │ │ │ │ │ ├── StudentProgressionChart.tsx │ │ │ │ │ │ │ └── utils.js │ │ │ │ │ │ ├── get_help/ │ │ │ │ │ │ │ ├── CourseGetHelpFilter.tsx │ │ │ │ │ │ │ ├── CourseGetHelpStatistics.tsx │ │ │ │ │ │ │ └── CourseGetHelpStatisticsTable.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── staff/ │ │ │ │ │ │ │ ├── StaffStatistics.tsx │ │ │ │ │ │ │ └── StaffStatisticsTable.tsx │ │ │ │ │ │ └── students/ │ │ │ │ │ │ ├── StudentStatisticsTable.tsx │ │ │ │ │ │ └── StudentsStatistics.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── parseCourseResponse.js │ │ │ │ │ ├── parseStaffResponse.js │ │ │ │ │ └── parseStudentsResponse.js │ │ │ │ ├── stories/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── CikgoChatsPage.tsx │ │ │ │ │ │ ├── CikgoErrorPage.tsx │ │ │ │ │ │ ├── CikgoFramePage.tsx │ │ │ │ │ │ ├── CikgoSidebarItems.tsx │ │ │ │ │ │ └── LearnRedirect.tsx │ │ │ │ │ └── pages/ │ │ │ │ │ ├── LearnPage.tsx │ │ │ │ │ └── MissionControlPage.tsx │ │ │ │ ├── survey/ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ └── index.test.tsx │ │ │ │ │ ├── actions/ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ └── responses.test.ts │ │ │ │ │ │ ├── questions.js │ │ │ │ │ │ ├── responses.js │ │ │ │ │ │ ├── sections.js │ │ │ │ │ │ └── surveys.js │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── Dialogs.jsx │ │ │ │ │ │ └── OptionsListItem.jsx │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── containers/ │ │ │ │ │ │ ├── QuestionFormDialogue/ │ │ │ │ │ │ │ ├── QuestionForm.jsx │ │ │ │ │ │ │ ├── QuestionFormDeletedOptions.jsx │ │ │ │ │ │ │ ├── QuestionFormOption.jsx │ │ │ │ │ │ │ ├── QuestionFormOptions.jsx │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ └── ImageField.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── RespondButton/ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── ResponseForm/ │ │ │ │ │ │ │ ├── ResponseAnswer.jsx │ │ │ │ │ │ │ ├── ResponseSection.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── MultipleChoiceOptionsField.jsx │ │ │ │ │ │ │ │ └── MultipleResponseOptionsField.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── SectionFormDialogue/ │ │ │ │ │ │ │ ├── SectionForm.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── SurveyFormDialogue/ │ │ │ │ │ │ │ ├── SurveyForm.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── SurveyLayout/ │ │ │ │ │ │ │ ├── AdminMenu.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ ├── AdminMenu.test.jsx │ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ └── UnsubmitButton.jsx │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── ResponseEdit/ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── ResponseIndex/ │ │ │ │ │ │ │ ├── RemindButton.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ ├── RemindButton.test.tsx │ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── translations.js │ │ │ │ │ │ ├── ResponseShow/ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── SurveyIndex/ │ │ │ │ │ │ │ ├── NewSurveyButton.jsx │ │ │ │ │ │ │ ├── SurveyBadges.jsx │ │ │ │ │ │ │ ├── SurveysTable.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── NewSurveyButton.test.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── SurveyResults/ │ │ │ │ │ │ │ ├── OptionsQuestionResults.jsx │ │ │ │ │ │ │ ├── ResultsQuestion.jsx │ │ │ │ │ │ │ ├── ResultsSection.jsx │ │ │ │ │ │ │ ├── TextResponseResults.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ ├── ResultsQuestion.test.tsx │ │ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── SurveyShow/ │ │ │ │ │ │ ├── DownloadResponsesButton.jsx │ │ │ │ │ │ ├── NewSectionButton.jsx │ │ │ │ │ │ ├── Section/ │ │ │ │ │ │ │ ├── DeleteSectionButton.jsx │ │ │ │ │ │ │ ├── EditSectionButton.jsx │ │ │ │ │ │ │ ├── MoveDownButton.jsx │ │ │ │ │ │ │ ├── MoveUpButton.jsx │ │ │ │ │ │ │ ├── NewQuestionButton.jsx │ │ │ │ │ │ │ ├── Question.jsx │ │ │ │ │ │ │ ├── QuestionCard.jsx │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ ├── DeleteSectionButton.test.tsx │ │ │ │ │ │ │ │ ├── EditSectionButton.test.jsx │ │ │ │ │ │ │ │ ├── MoveDownButton.test.tsx │ │ │ │ │ │ │ │ ├── MoveUpButton.test.jsx │ │ │ │ │ │ │ │ └── NewQuestionButton.test.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── SurveyDetails.jsx │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ ├── DownloadResponsesButton.test.tsx │ │ │ │ │ │ │ └── NewSectionButton.test.jsx │ │ │ │ │ │ └── index.jsx │ │ │ │ │ ├── propTypes.js │ │ │ │ │ ├── reducers/ │ │ │ │ │ │ ├── questionForm.js │ │ │ │ │ │ ├── responseForm.js │ │ │ │ │ │ ├── responses.js │ │ │ │ │ │ ├── results.js │ │ │ │ │ │ ├── section.js │ │ │ │ │ │ ├── sectionForm.js │ │ │ │ │ │ ├── survey.js │ │ │ │ │ │ ├── surveyForm.js │ │ │ │ │ │ ├── surveys.js │ │ │ │ │ │ └── surveysFlags.js │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── translations.js │ │ │ │ │ └── utils/ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ └── index.test.js │ │ │ │ │ └── index.js │ │ │ │ ├── translations.ts │ │ │ │ ├── user-email-subscriptions/ │ │ │ │ │ ├── UserEmailSubscriptions.tsx │ │ │ │ │ ├── UserEmailSubscriptionsTable.jsx │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ └── index.test.jsx │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── translations.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── user-invitations/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ ├── InvitationActionButtons.tsx │ │ │ │ │ │ │ ├── RegistrationCodeButton.tsx │ │ │ │ │ │ │ ├── ResendAllInvitationsButton.tsx │ │ │ │ │ │ │ └── UploadFileButton.tsx │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ ├── IndividualInvitation.tsx │ │ │ │ │ │ │ ├── IndividualInvitations.tsx │ │ │ │ │ │ │ ├── IndividualInviteForm.tsx │ │ │ │ │ │ │ └── InviteUsersFileUploadForm.tsx │ │ │ │ │ │ ├── misc/ │ │ │ │ │ │ │ ├── InvitationResultDialog.tsx │ │ │ │ │ │ │ └── InvitationsBarChart.tsx │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ ├── InvitationResultInvitationsTable.tsx │ │ │ │ │ │ ├── InvitationResultUsersTable.tsx │ │ │ │ │ │ └── UserInvitationsTable.tsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── InvitationsIndex/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── InviteUsers/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── InviteUsersFileUpload/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── InviteUsersRegistrationCode/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── translations.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── user-notification/ │ │ │ │ │ ├── PopupNotifier.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── AchievementGainedPopup.tsx │ │ │ │ │ │ ├── LevelReachedPopup.tsx │ │ │ │ │ │ ├── PopupDialog.tsx │ │ │ │ │ │ └── __test__/ │ │ │ │ │ │ └── LevelReachedPopup.test.tsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ └── translations.ts │ │ │ │ ├── users/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ ├── PointManagementButtons.tsx │ │ │ │ │ │ │ └── UserManagementButtons.tsx │ │ │ │ │ │ ├── misc/ │ │ │ │ │ │ │ ├── PersonalTimeEditor.tsx │ │ │ │ │ │ │ ├── SelectCourseUser.tsx │ │ │ │ │ │ │ ├── UpgradeToStaff.tsx │ │ │ │ │ │ │ ├── UserProfileAchievements.tsx │ │ │ │ │ │ │ ├── UserProfileCard.scss │ │ │ │ │ │ │ ├── UserProfileCard.tsx │ │ │ │ │ │ │ ├── UserProfileCardStats.tsx │ │ │ │ │ │ │ ├── UserProfileSkills.tsx │ │ │ │ │ │ │ └── __test__/ │ │ │ │ │ │ │ └── UserProfileCard.test.tsx │ │ │ │ │ │ ├── navigation/ │ │ │ │ │ │ │ └── UserManagementTabs.tsx │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ ├── ManageUsersTable/ │ │ │ │ │ │ │ ├── ActiveTableToolbar.tsx │ │ │ │ │ │ │ ├── AlgorithmMenu.tsx │ │ │ │ │ │ │ ├── BulkActionsButton.tsx │ │ │ │ │ │ │ ├── BulkAssignTimelineMenu.tsx │ │ │ │ │ │ │ ├── PhantomSwitch.tsx │ │ │ │ │ │ │ ├── RoleMenu.tsx │ │ │ │ │ │ │ ├── TimelineMenu.tsx │ │ │ │ │ │ │ ├── UserNameField.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── PersonalTimesTable.tsx │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── ExperiencePointsRecords/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ManageStaff/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ManageStudents/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── PersonalTimes/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── PersonalTimesShow/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── UserShow/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── UserStatistics/ │ │ │ │ │ │ │ ├── LearningRateRecords/ │ │ │ │ │ │ │ │ ├── LearningRateRecordsChart.tsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── UsersIndex/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── translations.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── video/ │ │ │ │ │ ├── attemptLoader.ts │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ ├── VideoManagementButtons.tsx │ │ │ │ │ │ │ └── WatchVideoButton.tsx │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ └── VideoForm.tsx │ │ │ │ │ │ ├── misc/ │ │ │ │ │ │ │ ├── VideoBadges.tsx │ │ │ │ │ │ │ └── VideoTabs.tsx │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ └── VideoTable.tsx │ │ │ │ │ ├── handles.ts │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── VideoEdit/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── VideoNew/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── VideoShow/ │ │ │ │ │ │ │ ├── VideoDetails.tsx │ │ │ │ │ │ │ ├── VideoPlayerWithStore.jsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── VideosIndex/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── submission/ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ └── store.test.js │ │ │ │ │ │ ├── actions/ │ │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ │ └── video.test.js │ │ │ │ │ │ │ ├── discussion.js │ │ │ │ │ │ │ └── video.js │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ │ └── VideoSubmissionsTable.tsx │ │ │ │ │ │ ├── containers/ │ │ │ │ │ │ │ ├── Charts/ │ │ │ │ │ │ │ │ ├── HeatMap.jsx │ │ │ │ │ │ │ │ └── ProgressGraph.jsx │ │ │ │ │ │ │ ├── Discussion.jsx │ │ │ │ │ │ │ ├── Discussion.scss │ │ │ │ │ │ │ ├── DiscussionElements/ │ │ │ │ │ │ │ │ ├── Controls.jsx │ │ │ │ │ │ │ │ ├── EditPostContainer.jsx │ │ │ │ │ │ │ │ ├── Editor.jsx │ │ │ │ │ │ │ │ ├── NewPostContainer.jsx │ │ │ │ │ │ │ │ ├── NewReplyContainer.jsx │ │ │ │ │ │ │ │ ├── PostContainer.jsx │ │ │ │ │ │ │ │ ├── PostMenu.jsx │ │ │ │ │ │ │ │ ├── PostPresentation.jsx │ │ │ │ │ │ │ │ ├── Reply.jsx │ │ │ │ │ │ │ │ └── Topic.jsx │ │ │ │ │ │ │ ├── Statistics.jsx │ │ │ │ │ │ │ ├── Statistics.scss │ │ │ │ │ │ │ ├── Submission.jsx │ │ │ │ │ │ │ ├── VideoControls/ │ │ │ │ │ │ │ │ ├── CaptionsButton.jsx │ │ │ │ │ │ │ │ ├── NextVideoButton.jsx │ │ │ │ │ │ │ │ ├── PlayBackRateSelector.jsx │ │ │ │ │ │ │ │ ├── PlayButton.jsx │ │ │ │ │ │ │ │ ├── VideoPlayerSlider.jsx │ │ │ │ │ │ │ │ ├── VideoTimestamp.jsx │ │ │ │ │ │ │ │ ├── VolumeButton.jsx │ │ │ │ │ │ │ │ ├── VolumeSlider.jsx │ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ │ ├── VideoPlayer.jsx │ │ │ │ │ │ │ └── VideoPlayer.scss │ │ │ │ │ │ ├── pages/ │ │ │ │ │ │ │ ├── VideoSubmissionEdit/ │ │ │ │ │ │ │ │ ├── SubmissionEditWithStore.jsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── VideoSubmissionShow/ │ │ │ │ │ │ │ │ ├── StatisticsWithStore.jsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── VideoSubmissionsIndex/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── reducers/ │ │ │ │ │ │ │ ├── discussion.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── oldSessions.js │ │ │ │ │ │ │ └── video.js │ │ │ │ │ │ ├── selectors/ │ │ │ │ │ │ │ └── discussion.js │ │ │ │ │ │ ├── store.js │ │ │ │ │ │ └── translations.js │ │ │ │ │ └── types.ts │ │ │ │ └── video-submissions/ │ │ │ │ ├── components/ │ │ │ │ │ └── tables/ │ │ │ │ │ └── UserVideoSubmissionTable.tsx │ │ │ │ ├── operations.ts │ │ │ │ └── pages/ │ │ │ │ └── UserVideoSubmissionsIndex/ │ │ │ │ └── index.tsx │ │ │ ├── system/ │ │ │ │ └── admin/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── AdminNavigator.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ ├── CoursesButtons.tsx │ │ │ │ │ │ │ ├── InstancesButtons.tsx │ │ │ │ │ │ │ └── UsersButtons.tsx │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ └── InstanceForm.tsx │ │ │ │ │ │ ├── misc/ │ │ │ │ │ │ │ └── SystemGetHelpFilter.tsx │ │ │ │ │ │ └── tables/ │ │ │ │ │ │ ├── CoursesTable.tsx │ │ │ │ │ │ ├── InstancesTable/ │ │ │ │ │ │ │ ├── InstanceField.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── SystemGetHelpActivityTable.tsx │ │ │ │ │ │ └── UsersTable.tsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── AnnouncementsIndex.tsx │ │ │ │ │ │ ├── CoursesIndex.tsx │ │ │ │ │ │ ├── InstanceNew.tsx │ │ │ │ │ │ ├── InstancesIndex.tsx │ │ │ │ │ │ ├── SystemGetHelpActivityIndex.tsx │ │ │ │ │ │ └── UsersIndex.tsx │ │ │ │ │ ├── selectors.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── components/ │ │ │ │ │ └── AdminNavigablePage.tsx │ │ │ │ └── instance/ │ │ │ │ └── instance/ │ │ │ │ ├── InstanceAdminNavigator.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ ├── InvitationActionButtons.tsx │ │ │ │ │ │ ├── PendingRoleRequestsButtons.tsx │ │ │ │ │ │ ├── ResendAllInvitationsButton.tsx │ │ │ │ │ │ └── UsersButtons.tsx │ │ │ │ │ ├── forms/ │ │ │ │ │ │ ├── IndividualInvitation.tsx │ │ │ │ │ │ ├── IndividualInvitations.tsx │ │ │ │ │ │ ├── IndividualInviteForm.tsx │ │ │ │ │ │ ├── InstanceUserRoleRequestForm.tsx │ │ │ │ │ │ └── RejectWithMessageForm.tsx │ │ │ │ │ ├── misc/ │ │ │ │ │ │ ├── InstanceGetHelpFilter.tsx │ │ │ │ │ │ └── InvitationResultDialog.tsx │ │ │ │ │ ├── navigation/ │ │ │ │ │ │ └── InstanceUsersTabs.tsx │ │ │ │ │ └── tables/ │ │ │ │ │ ├── InstanceGetHelpActivityTable.tsx │ │ │ │ │ ├── InstanceUserRoleRequestsTable.tsx │ │ │ │ │ ├── InvitationResultInvitationsTable.tsx │ │ │ │ │ ├── InvitationResultUsersTable.tsx │ │ │ │ │ ├── UserInvitationsTable.tsx │ │ │ │ │ ├── UsersTable.tsx │ │ │ │ │ └── __test__/ │ │ │ │ │ └── InstanceUserRoleRequestsTable.test.tsx │ │ │ │ ├── operations.ts │ │ │ │ ├── pages/ │ │ │ │ │ ├── InstanceAnnouncementsIndex.tsx │ │ │ │ │ ├── InstanceComponentsIndex.tsx │ │ │ │ │ ├── InstanceCoursesIndex.tsx │ │ │ │ │ ├── InstanceGetHelpActivityIndex.tsx │ │ │ │ │ ├── InstanceUserRoleRequestsIndex.tsx │ │ │ │ │ ├── InstanceUsersIndex.tsx │ │ │ │ │ ├── InstanceUsersInvitations.tsx │ │ │ │ │ └── InstanceUsersInvite.tsx │ │ │ │ ├── selectors.ts │ │ │ │ ├── store.ts │ │ │ │ └── types.ts │ │ │ ├── user/ │ │ │ │ ├── AccountSettings/ │ │ │ │ │ ├── AccountSettingsForm.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── AddEmailSubsection.tsx │ │ │ │ │ └── EmailsList.tsx │ │ │ │ ├── operations.ts │ │ │ │ └── translations.ts │ │ │ └── users/ │ │ │ ├── components/ │ │ │ │ ├── Widget.tsx │ │ │ │ └── tables/ │ │ │ │ ├── CoursesTable.tsx │ │ │ │ ├── InstancesTable.tsx │ │ │ │ └── __test__/ │ │ │ │ └── InstancesTable.test.tsx │ │ │ ├── operations.ts │ │ │ ├── pages/ │ │ │ │ ├── ConfirmEmailPage.tsx │ │ │ │ ├── ForgotPasswordLandingPage.tsx │ │ │ │ ├── ForgotPasswordPage.tsx │ │ │ │ ├── ResendConfirmationEmailLandingPage.tsx │ │ │ │ ├── ResendConfirmationEmailPage.tsx │ │ │ │ ├── ResetPasswordPage.tsx │ │ │ │ ├── SignUpLandingPage.tsx │ │ │ │ ├── SignUpPage.tsx │ │ │ │ ├── UserShow.tsx │ │ │ │ └── __test__/ │ │ │ │ └── UserShow.test.tsx │ │ │ ├── selectors.ts │ │ │ ├── store.ts │ │ │ ├── translations.ts │ │ │ ├── types.ts │ │ │ └── validations.ts │ │ ├── declaration.d.ts │ │ ├── index.tsx │ │ ├── lib/ │ │ │ ├── actions/ │ │ │ │ └── index.js │ │ │ ├── components/ │ │ │ │ ├── core/ │ │ │ │ │ ├── AvatarSelector.tsx │ │ │ │ │ ├── AvatarWithLabel.tsx │ │ │ │ │ ├── BarChart.jsx │ │ │ │ │ ├── BetaChip.tsx │ │ │ │ │ ├── CourseUserTypeFragment.tsx │ │ │ │ │ ├── CourseUserTypeTabs.tsx │ │ │ │ │ ├── CustomTooltip.tsx │ │ │ │ │ ├── DescriptionCard.tsx │ │ │ │ │ ├── ErrorText.jsx │ │ │ │ │ ├── Expandable.tsx │ │ │ │ │ ├── ExpandableCode.tsx │ │ │ │ │ ├── ExperimentalChip.tsx │ │ │ │ │ ├── Hint.tsx │ │ │ │ │ ├── ImageCropper/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── InfoLabel.tsx │ │ │ │ │ ├── LinearProgressWithLabel.tsx │ │ │ │ │ ├── Link.tsx │ │ │ │ │ ├── LoadingEllipsis.tsx │ │ │ │ │ ├── LoadingIndicator.tsx │ │ │ │ │ ├── LoadingOverlay.tsx │ │ │ │ │ ├── Note.tsx │ │ │ │ │ ├── NotificationBar.jsx │ │ │ │ │ ├── PopupMenu.tsx │ │ │ │ │ ├── Thumbnail.jsx │ │ │ │ │ ├── UserHTMLText.tsx │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ ├── ErrorText.test.tsx │ │ │ │ │ │ ├── LoadingIndicator.test.tsx │ │ │ │ │ │ └── __snapshots__/ │ │ │ │ │ │ ├── ErrorText.test.tsx.snap │ │ │ │ │ │ └── LoadingIndicator.test.tsx.snap │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ ├── AcceptButton.tsx │ │ │ │ │ │ ├── AddButton.tsx │ │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ │ ├── DeleteButton.tsx │ │ │ │ │ │ ├── DownloadButton.tsx │ │ │ │ │ │ ├── EditButton.tsx │ │ │ │ │ │ ├── EmailButton.tsx │ │ │ │ │ │ ├── IconRadio.tsx │ │ │ │ │ │ ├── RadioButton.tsx │ │ │ │ │ │ ├── SaveButton.tsx │ │ │ │ │ │ └── __test__/ │ │ │ │ │ │ ├── DeleteButton.test.tsx │ │ │ │ │ │ ├── EditButton.test.tsx │ │ │ │ │ │ └── __snapshots__/ │ │ │ │ │ │ ├── DeleteButton.test.tsx.snap │ │ │ │ │ │ └── EditButton.test.tsx.snap │ │ │ │ │ ├── charts/ │ │ │ │ │ │ ├── GeneralChart.tsx │ │ │ │ │ │ ├── LineChart.tsx │ │ │ │ │ │ └── emptyChartPlugin.ts │ │ │ │ │ ├── dialogs/ │ │ │ │ │ │ ├── ConfirmationDialog.jsx │ │ │ │ │ │ ├── ImageCropDialog.tsx │ │ │ │ │ │ ├── Prompt.tsx │ │ │ │ │ │ └── RailsConfirmationDialog.jsx │ │ │ │ │ ├── fields/ │ │ │ │ │ │ ├── AceEditor.css │ │ │ │ │ │ ├── CAPTCHAField.tsx │ │ │ │ │ │ ├── CKEditor.css │ │ │ │ │ │ ├── CKEditorField.tsx │ │ │ │ │ │ ├── CKEditorRichText.tsx │ │ │ │ │ │ ├── DateTimePicker.jsx │ │ │ │ │ │ ├── EditorField.tsx │ │ │ │ │ │ ├── NumberTextField.tsx │ │ │ │ │ │ ├── PasswordTextField.tsx │ │ │ │ │ │ ├── SearchField.tsx │ │ │ │ │ │ ├── SwitchableTextField.tsx │ │ │ │ │ │ └── TextField.tsx │ │ │ │ │ ├── indicators/ │ │ │ │ │ │ └── SavingIndicator/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── layouts/ │ │ │ │ │ ├── Accordion.tsx │ │ │ │ │ ├── BackendPagination.tsx │ │ │ │ │ ├── Banner.tsx │ │ │ │ │ ├── ContactableErrorAlert.tsx │ │ │ │ │ ├── ContextualErrorPage.tsx │ │ │ │ │ ├── DataTable.jsx │ │ │ │ │ ├── Footer.tsx │ │ │ │ │ ├── MarkdownPage.tsx │ │ │ │ │ ├── Page.tsx │ │ │ │ │ ├── Pagination.tsx │ │ │ │ │ ├── Section.tsx │ │ │ │ │ ├── Subsection.tsx │ │ │ │ │ ├── SummaryCard.tsx │ │ │ │ │ ├── TableContainer.tsx │ │ │ │ │ └── layout.scss │ │ │ │ ├── extensions/ │ │ │ │ │ ├── CustomBadge.tsx │ │ │ │ │ ├── CustomSlider.tsx │ │ │ │ │ ├── PersonalStartEndTime.tsx │ │ │ │ │ ├── PersonalTimeBooleanIcon.tsx │ │ │ │ │ ├── StackedBadges.tsx │ │ │ │ │ └── conditions/ │ │ │ │ │ ├── AnyCondition.ts │ │ │ │ │ ├── ConditionRow.tsx │ │ │ │ │ ├── ConditionsManager.tsx │ │ │ │ │ ├── conditions/ │ │ │ │ │ │ ├── AchievementCondition.tsx │ │ │ │ │ │ ├── AssessmentCondition.tsx │ │ │ │ │ │ ├── LevelCondition.tsx │ │ │ │ │ │ ├── ScholaisticAssessmentCondition.tsx │ │ │ │ │ │ └── SurveyCondition.tsx │ │ │ │ │ ├── operations.ts │ │ │ │ │ ├── specifiers.ts │ │ │ │ │ └── translations.ts │ │ │ │ ├── form/ │ │ │ │ │ ├── Form.tsx │ │ │ │ │ ├── FormDialogue.jsx │ │ │ │ │ ├── dialog/ │ │ │ │ │ │ └── FormDialog.tsx │ │ │ │ │ └── fields/ │ │ │ │ │ ├── AutoCompleteField.jsx │ │ │ │ │ ├── CheckboxField.tsx │ │ │ │ │ ├── DataTableInlineEditable/ │ │ │ │ │ │ └── TextField.tsx │ │ │ │ │ ├── DateTimePickerField.jsx │ │ │ │ │ ├── EditorField.jsx │ │ │ │ │ ├── MultiSelectField.jsx │ │ │ │ │ ├── RichTextField.jsx │ │ │ │ │ ├── SelectField.jsx │ │ │ │ │ ├── SingleFileInput/ │ │ │ │ │ │ ├── BadgePreview.jsx │ │ │ │ │ │ ├── DeleteButton.jsx │ │ │ │ │ │ ├── FilePreview.jsx │ │ │ │ │ │ ├── ImagePreview.jsx │ │ │ │ │ │ ├── __test__/ │ │ │ │ │ │ │ ├── BadgePreview.test.js │ │ │ │ │ │ │ ├── ImagePreview.test.js │ │ │ │ │ │ │ └── index.test.js │ │ │ │ │ │ ├── index.jsx │ │ │ │ │ │ └── translations.js │ │ │ │ │ ├── TextField.tsx │ │ │ │ │ ├── ToggleField.jsx │ │ │ │ │ └── utils/ │ │ │ │ │ ├── mapError.js │ │ │ │ │ └── propsAreEqual.js │ │ │ │ ├── icons/ │ │ │ │ │ ├── GhostIcon.tsx │ │ │ │ │ └── PointerIcon.tsx │ │ │ │ ├── navigation/ │ │ │ │ │ ├── AdminPopupMenuList.tsx │ │ │ │ │ ├── BrandingHead.tsx │ │ │ │ │ ├── CourseSwitcherPopupMenu.tsx │ │ │ │ │ ├── UserPopupMenuList.tsx │ │ │ │ │ └── withRouter.jsx │ │ │ │ ├── table/ │ │ │ │ │ ├── MuiTableAdapter/ │ │ │ │ │ │ ├── MuiFilterMenu.tsx │ │ │ │ │ │ ├── MuiFilterMenuItem.tsx │ │ │ │ │ │ ├── MuiTable.tsx │ │ │ │ │ │ ├── MuiTableBody.tsx │ │ │ │ │ │ ├── MuiTableHeader.tsx │ │ │ │ │ │ ├── MuiTablePagination.tsx │ │ │ │ │ │ ├── MuiTableRow.tsx │ │ │ │ │ │ ├── MuiTableRowSelector.tsx │ │ │ │ │ │ ├── MuiTableToolbar.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── translations.ts │ │ │ │ │ ├── Table.tsx │ │ │ │ │ ├── TanStackTableBuilder/ │ │ │ │ │ │ ├── columnsBuilder.ts │ │ │ │ │ │ ├── csvGenerator.ts │ │ │ │ │ │ ├── customFlexRender.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useTanStackTableBuilder.tsx │ │ │ │ │ ├── adapters/ │ │ │ │ │ │ ├── Body.ts │ │ │ │ │ │ ├── Filter.ts │ │ │ │ │ │ ├── Handlers.ts │ │ │ │ │ │ ├── Header.ts │ │ │ │ │ │ ├── Pagination.ts │ │ │ │ │ │ ├── RowSelector.ts │ │ │ │ │ │ ├── Sort.ts │ │ │ │ │ │ ├── Table.ts │ │ │ │ │ │ ├── Toolbar.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── builder/ │ │ │ │ │ │ ├── ColumnTemplate.ts │ │ │ │ │ │ ├── TableTemplate.ts │ │ │ │ │ │ ├── buildColumns.ts │ │ │ │ │ │ ├── featureTemplates.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── utils.ts │ │ │ │ └── wrappers/ │ │ │ │ ├── AttributionsProvider.tsx │ │ │ │ ├── AuthProvider.tsx │ │ │ │ ├── ErrorBoundary.tsx │ │ │ │ ├── FooterProvider.tsx │ │ │ │ ├── I18nProvider.tsx │ │ │ │ ├── Preload.tsx │ │ │ │ ├── Providers.tsx │ │ │ │ ├── RollbarWrapper.tsx │ │ │ │ ├── StoreProvider.tsx │ │ │ │ ├── ThemeProvider.tsx │ │ │ │ └── ToastProvider.tsx │ │ │ ├── constants/ │ │ │ │ ├── icons.ts │ │ │ │ ├── index.js │ │ │ │ ├── sharedConstants.ts │ │ │ │ └── videoConstants.js │ │ │ ├── containers/ │ │ │ │ ├── AppContainer/ │ │ │ │ │ ├── AppContainer.tsx │ │ │ │ │ ├── AppLoader.ts │ │ │ │ │ ├── GlobalAnnouncements.tsx │ │ │ │ │ ├── ServerUnreachableBanner.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── AuthPagesContainer.tsx │ │ │ │ ├── CourselessContainer.tsx │ │ │ │ ├── DeleteConfirmation/ │ │ │ │ │ └── index.jsx │ │ │ │ ├── NotificationPopup/ │ │ │ │ │ └── index.jsx │ │ │ │ └── TableLegends.tsx │ │ │ ├── helpers/ │ │ │ │ ├── __test__/ │ │ │ │ │ └── htmlFormatHelpers.test.js │ │ │ │ ├── htmlFormatHelpers.js │ │ │ │ ├── jobHelpers.ts │ │ │ │ ├── mui-datatables-helpers.ts │ │ │ │ ├── react-hook-form-helper.js │ │ │ │ ├── reducer-helpers.js │ │ │ │ ├── url-builders.js │ │ │ │ ├── url-helpers.ts │ │ │ │ └── videoHelpers.js │ │ │ ├── history.js │ │ │ ├── hooks/ │ │ │ │ ├── items/ │ │ │ │ │ ├── useItems.ts │ │ │ │ │ ├── usePaginate.ts │ │ │ │ │ ├── useSearch.ts │ │ │ │ │ └── useSort.ts │ │ │ │ ├── router/ │ │ │ │ │ ├── dynamicNest.ts │ │ │ │ │ ├── redirect.tsx │ │ │ │ │ └── usePrompt.tsx │ │ │ │ ├── session.ts │ │ │ │ ├── store.ts │ │ │ │ ├── toast/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── loadingToast.ts │ │ │ │ │ └── toast.tsx │ │ │ │ ├── unread.ts │ │ │ │ ├── useDebounce.ts │ │ │ │ ├── useEffectOnce.ts │ │ │ │ ├── useMedia.ts │ │ │ │ └── useTranslation.ts │ │ │ ├── moment.ts │ │ │ ├── reducers/ │ │ │ │ ├── deleteConfirmation.js │ │ │ │ └── notificationPopup.js │ │ │ ├── translations/ │ │ │ │ ├── course/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── roles.ts │ │ │ │ ├── form.ts │ │ │ │ ├── getHelp.ts │ │ │ │ ├── index.ts │ │ │ │ ├── messages.ts │ │ │ │ └── table.ts │ │ │ └── types.js │ │ ├── routers/ │ │ │ ├── AuthenticatableApp.tsx │ │ │ ├── AuthenticatedApp.tsx │ │ │ ├── UnauthenticatedApp.tsx │ │ │ ├── course/ │ │ │ │ ├── achievements.tsx │ │ │ │ ├── admin.tsx │ │ │ │ ├── assessments/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── questions.tsx │ │ │ │ │ └── submissions.tsx │ │ │ │ ├── forums.tsx │ │ │ │ ├── groups.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── lessonPlan.tsx │ │ │ │ ├── materials.tsx │ │ │ │ ├── plagiarism.tsx │ │ │ │ ├── scholaistic.tsx │ │ │ │ ├── statistics.tsx │ │ │ │ ├── surveys.tsx │ │ │ │ ├── users.tsx │ │ │ │ └── videos.tsx │ │ │ ├── courseless/ │ │ │ │ ├── index.tsx │ │ │ │ ├── instanceAdmin.tsx │ │ │ │ ├── systemAdmin.tsx │ │ │ │ └── users.tsx │ │ │ ├── index.ts │ │ │ ├── redirects.tsx │ │ │ └── router.tsx │ │ ├── store.ts │ │ ├── theme/ │ │ │ ├── bouncing-dot.css │ │ │ ├── colors.js │ │ │ ├── github.css │ │ │ ├── index.css │ │ │ ├── mui-style.ts │ │ │ ├── palette.js │ │ │ ├── sidebar.css │ │ │ └── syntax-highlighting.css │ │ ├── types/ │ │ │ ├── channels/ │ │ │ │ ├── heartbeat.ts │ │ │ │ └── liveMonitoring.ts │ │ │ ├── components/ │ │ │ │ └── DataTable.ts │ │ │ ├── course/ │ │ │ │ ├── achievements.ts │ │ │ │ ├── admin/ │ │ │ │ │ ├── announcements.ts │ │ │ │ │ ├── assessments.ts │ │ │ │ │ ├── codaveri.ts │ │ │ │ │ ├── comments.ts │ │ │ │ │ ├── components.ts │ │ │ │ │ ├── course.ts │ │ │ │ │ ├── forums.ts │ │ │ │ │ ├── leaderboard.ts │ │ │ │ │ ├── lessonPlan.ts │ │ │ │ │ ├── materials.ts │ │ │ │ │ ├── notifications.ts │ │ │ │ │ ├── ragWise.ts │ │ │ │ │ ├── scholaistic.ts │ │ │ │ │ ├── sidebar.ts │ │ │ │ │ ├── stories.ts │ │ │ │ │ └── videos.ts │ │ │ │ ├── announcements.ts │ │ │ │ ├── assessment/ │ │ │ │ │ ├── assessments.ts │ │ │ │ │ ├── monitoring.ts │ │ │ │ │ ├── question/ │ │ │ │ │ │ ├── forum-post-responses.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── multiple-responses.ts │ │ │ │ │ │ ├── programming.ts │ │ │ │ │ │ ├── rubric-based-responses.ts │ │ │ │ │ │ ├── scribing.ts │ │ │ │ │ │ ├── text-responses.ts │ │ │ │ │ │ └── voice-responses.ts │ │ │ │ │ ├── question-generation.ts │ │ │ │ │ ├── questions.ts │ │ │ │ │ ├── sessions.ts │ │ │ │ │ ├── skills/ │ │ │ │ │ │ ├── skills.ts │ │ │ │ │ │ └── userSkills.ts │ │ │ │ │ ├── submission/ │ │ │ │ │ │ ├── annotations.ts │ │ │ │ │ │ ├── answer/ │ │ │ │ │ │ │ ├── answer.ts │ │ │ │ │ │ │ ├── forumPostResponse.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── multipleResponse.ts │ │ │ │ │ │ │ ├── programming.ts │ │ │ │ │ │ │ ├── rubricBasedResponse.ts │ │ │ │ │ │ │ ├── scribing.ts │ │ │ │ │ │ │ ├── textResponse.ts │ │ │ │ │ │ │ └── voiceResponse.ts │ │ │ │ │ │ ├── liveFeedback.ts │ │ │ │ │ │ ├── logs.ts │ │ │ │ │ │ ├── question/ │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── submission-question.ts │ │ │ │ │ │ └── submission.ts │ │ │ │ │ └── submissions.ts │ │ │ │ ├── comments.ts │ │ │ │ ├── conditions.ts │ │ │ │ ├── courseUsers.ts │ │ │ │ ├── courses.ts │ │ │ │ ├── disbursement.ts │ │ │ │ ├── duplication.ts │ │ │ │ ├── enrolRequests.ts │ │ │ │ ├── experiencePointsRecords.ts │ │ │ │ ├── forums.ts │ │ │ │ ├── leaderboard.ts │ │ │ │ ├── learn.ts │ │ │ │ ├── lesson-plan/ │ │ │ │ │ └── todos.ts │ │ │ │ ├── material/ │ │ │ │ │ ├── files.ts │ │ │ │ │ └── folders.ts │ │ │ │ ├── notifications.ts │ │ │ │ ├── personalTimes.ts │ │ │ │ ├── plagiarism.ts │ │ │ │ ├── referenceTimelines.ts │ │ │ │ ├── rubrics.ts │ │ │ │ ├── scholaistic.ts │ │ │ │ ├── statistics/ │ │ │ │ │ ├── answer.ts │ │ │ │ │ └── assessmentStatistics.ts │ │ │ │ ├── subscriptions.ts │ │ │ │ ├── userInvitations.ts │ │ │ │ ├── userNotifications.ts │ │ │ │ ├── video/ │ │ │ │ │ └── submissions.ts │ │ │ │ ├── videoSubmissions.ts │ │ │ │ └── videos.ts │ │ │ ├── home.ts │ │ │ ├── index.ts │ │ │ ├── jobs.ts │ │ │ ├── store.ts │ │ │ ├── system/ │ │ │ │ ├── courses.ts │ │ │ │ ├── instance/ │ │ │ │ │ ├── components.ts │ │ │ │ │ ├── invitations.ts │ │ │ │ │ ├── roleRequests.ts │ │ │ │ │ └── users.ts │ │ │ │ └── instances.ts │ │ │ └── users.ts │ │ ├── utilities/ │ │ │ ├── ResizeObserver.ts │ │ │ ├── TestApp.tsx │ │ │ ├── array.ts │ │ │ ├── authentication.ts │ │ │ ├── downloadFile.ts │ │ │ ├── index.ts │ │ │ ├── mirrorCreator.ts │ │ │ ├── socket.ts │ │ │ ├── store.ts │ │ │ └── test-utils.tsx │ │ └── workers/ │ │ ├── constructors.ts │ │ ├── heartbeat.sharedworker.ts │ │ ├── heartbeat.worker.ts │ │ ├── heartbeatChannel.ts │ │ ├── listeners.ts │ │ ├── monitoringDatabase.ts │ │ ├── types.ts │ │ └── withHeartbeatWorker.tsx │ ├── css-includes.json │ ├── env │ ├── env.test │ ├── jest.config.js │ ├── locales/ │ │ ├── en.json │ │ ├── ko.json │ │ └── zh.json │ ├── package.json │ ├── postcss.config.js │ ├── public/ │ │ └── index.html │ ├── tailwind.config.ts │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ ├── webpack.common.js │ ├── webpack.dev.js │ ├── webpack.prod.js │ └── webpack.profile.js ├── config/ │ ├── application.rb │ ├── boot.rb │ ├── cable.yml │ ├── credentials/ │ │ ├── README.md │ │ ├── test.key │ │ └── test.yml.enc │ ├── database.yml │ ├── environment.rb │ ├── environments/ │ │ ├── development.rb │ │ ├── production.rb │ │ └── test.rb │ ├── i18n-js.yml │ ├── i18n-tasks.yml │ ├── image_optim.yml │ ├── initializers/ │ │ ├── action_cable_acts_as_tenant.rb │ │ ├── acts_as_tenant.rb │ │ ├── application_controller_renderer.rb │ │ ├── argument_deserializer.rb │ │ ├── aws.rb │ │ ├── backtrace_silencers.rb │ │ ├── bullet.rb │ │ ├── carrier_wave.rb │ │ ├── content_security_policy.rb │ │ ├── cookies_serializer.rb │ │ ├── coverage.rb │ │ ├── devise.rb │ │ ├── extensions.rb │ │ ├── filter_parameter_logging.rb │ │ ├── formats_filter.rb │ │ ├── inflections.rb │ │ ├── keycloak.rb │ │ ├── llm_langchain.rb │ │ ├── locale.rb │ │ ├── lograge.rb │ │ ├── mail_delivery_job.rb │ │ ├── mime_types.rb │ │ ├── oembed.rb │ │ ├── rack_mini_profiler.rb │ │ ├── recaptcha.rb │ │ ├── redis.rb │ │ ├── send_file.rb │ │ ├── session_store.rb │ │ ├── sidekiq.rb │ │ ├── userstamp.rb │ │ ├── worker_http_listener.rb │ │ └── wrap_parameters.rb │ ├── locales/ │ │ ├── en/ │ │ │ ├── activemodel/ │ │ │ │ └── course/ │ │ │ │ └── experience_points/ │ │ │ │ └── forum_disbursement.yml │ │ │ ├── activerecord/ │ │ │ │ ├── attributes.yml │ │ │ │ └── errors.yml │ │ │ ├── course/ │ │ │ │ └── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ └── text_response_comprehension_auto_grading.yml │ │ │ │ ├── assessments.yml │ │ │ │ ├── question/ │ │ │ │ │ ├── forum_post_response.yml │ │ │ │ │ ├── multiple_responses.yml │ │ │ │ │ ├── programming.yml │ │ │ │ │ ├── scribing.yml │ │ │ │ │ └── voice_responses.yml │ │ │ │ └── question_bundle_assignments.yml │ │ │ ├── csv.yml │ │ │ ├── devise.yml │ │ │ ├── errors.yml │ │ │ ├── jobs.yml │ │ │ ├── mailers.yml │ │ │ └── time.yml │ │ ├── ko/ │ │ │ ├── activemodel/ │ │ │ │ └── course/ │ │ │ │ └── experience_points/ │ │ │ │ └── forum_disbursement.yml │ │ │ ├── activerecord/ │ │ │ │ ├── attributes.yml │ │ │ │ └── errors.yml │ │ │ ├── course/ │ │ │ │ └── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ └── text_response_comprehension_auto_grading.yml │ │ │ │ ├── assessments.yml │ │ │ │ ├── question/ │ │ │ │ │ ├── forum_post_response.yml │ │ │ │ │ ├── multiple_responses.yml │ │ │ │ │ ├── programming.yml │ │ │ │ │ ├── scribing.yml │ │ │ │ │ └── voice_responses.yml │ │ │ │ └── question_bundle_assignments.yml │ │ │ ├── csv.yml │ │ │ ├── devise.yml │ │ │ ├── errors.yml │ │ │ ├── instance_user_role_request_mailer.yml │ │ │ ├── jobs.yml │ │ │ ├── mailers.yml │ │ │ └── time.yml │ │ └── zh/ │ │ ├── activemodel/ │ │ │ └── course/ │ │ │ └── experience_points/ │ │ │ └── forum_disbursement.yml │ │ ├── activerecord/ │ │ │ ├── attributes.yml │ │ │ └── errors.yml │ │ ├── course/ │ │ │ └── assessment/ │ │ │ ├── answer/ │ │ │ │ └── text_response_comprehension_auto_grading.yml │ │ │ ├── assessments.yml │ │ │ ├── question/ │ │ │ │ ├── forum_post_response.yml │ │ │ │ ├── multiple_responses.yml │ │ │ │ ├── programming.yml │ │ │ │ ├── scribing.yml │ │ │ │ └── voice_responses.yml │ │ │ └── question_bundle_assignments.yml │ │ ├── csv.yml │ │ ├── devise.yml │ │ ├── errors.yml │ │ ├── instance_user_role_request_mailer.yml │ │ ├── jobs.yml │ │ ├── mailers.yml │ │ └── time.yml │ ├── puma.rb │ ├── routes.rb │ ├── schedule.yml │ ├── spring.rb │ └── storage.yml ├── config.ru ├── db/ │ ├── migrate/ │ │ ├── .rubocop.yml │ │ ├── 20141203044211_create_instances.rb │ │ ├── 20141204122534_devise_create_users.rb │ │ ├── 20141204122851_create_user_emails.rb │ │ ├── 20141205065248_create_instance_users.rb │ │ ├── 20141210044557_add_role_to_users_and_instance_users.rb │ │ ├── 20141210105742_create_courses.rb │ │ ├── 20141210133147_create_course_users.rb │ │ ├── 20141222074908_add_userstamps_to_courses.rb │ │ ├── 20150106073750_add_name_to_instances.rb │ │ ├── 20150114024350_create_course_announcements.rb │ │ ├── 20150114025131_create_instance_announcements.rb │ │ ├── 20150116102204_add_name_to_users.rb │ │ ├── 20150126080047_add_sticky_to_course_announcements.rb │ │ ├── 20150129040648_create_system_announcements.rb │ │ ├── 20150204075501_create_course_achievements.rb │ │ ├── 20150206020132_create_course_levels.rb │ │ ├── 20150309030221_create_attachments.rb │ │ ├── 20150314025251_add_logo_to_courses.rb │ │ ├── 20150316080645_unread_migration.rb │ │ ├── 20150411065243_create_course_lesson_plan_items.rb │ │ ├── 20150413043822_add_settings_to_instances_and_courses.rb │ │ ├── 20150415033008_create_course_experience_points_records.rb │ │ ├── 20150422152756_create_course_condition_levels.rb │ │ ├── 20150425030128_set_timestamps_nullity.rb │ │ ├── 20150426062119_create_course_conditions.rb │ │ ├── 20150426062133_create_course_conditions_achievements.rb │ │ ├── 20150512014731_add_workflow_state_to_course_users.rb │ │ ├── 20150512015621_add_userstamps_to_course_users.rb │ │ ├── 20150513110737_create_course_groups.rb │ │ ├── 20150513111716_create_course_group_users.rb │ │ ├── 20150614024340_combine_instance_system_announcements.rb │ │ ├── 20150615014716_create_course_invitations.rb │ │ ├── 20150615073135_add_fields_to_course_lesson_plan_item.rb │ │ ├── 20150615075515_create_course_events.rb │ │ ├── 20150616120237_create_activities_and_notifications.rb │ │ ├── 20150617021911_create_course_lesson_plan_milestones.rb │ │ ├── 20150624230355_add_course_registration_key_to_course.rb │ │ ├── 20150702122955_instance_users_change_user_id_unique.rb │ │ ├── 20150713125423_create_assessments.rb │ │ ├── 20150721051322_add_course_assessment_logic.rb │ │ ├── 20150721055754_change_experience_points_record_points_null.rb │ │ ├── 20150721070705_create_user_identities.rb │ │ ├── 20150726062900_create_course_assessment_question_multiple_response.rb │ │ ├── 20150726130555_set_achievement_condition_nullity.rb │ │ ├── 20150726130922_set_conditional_nullity.rb │ │ ├── 20150728020832_add_schema_nullity.rb │ │ ├── 20150728022835_rename_published_to_draft.rb │ │ ├── 20150729133128_rename_course_events_to_course_lesson_plan_events.rb │ │ ├── 20150730074301_rename_start_end_time_to_start_end_at.rb │ │ ├── 20150731010032_rename_valid_from_to_start_end_at.rb │ │ ├── 20150803065430_change_multiple_response_question_option_option_explanation_column_type.rb │ │ ├── 20150803065716_create_materials.rb │ │ ├── 20150803080715_add_assessment_answer_workflow_state.rb │ │ ├── 20150812024950_add_fields_to_course_material_folders.rb │ │ ├── 20151011151130_create_course_user_achievements.rb │ │ ├── 20151016094007_create_discussions_and_forums.rb │ │ ├── 20151016094008_create_forums.rb │ │ ├── 20151016151834_add_root_folder_to_courses.rb │ │ ├── 20151018122902_add_grade_to_course_assessment_answer.rb │ │ ├── 20151021014315_create_course_assessment_question_text_response.rb │ │ ├── 20151022105653_add_unique_index_to_forum_and_topic.rb │ │ ├── 20151027050627_add_submission_grading_statistics.rb │ │ ├── 20151028151258_add_unique_index_to_materials.rb │ │ ├── 20151030063045_add_unique_index_to_course_material_folders.rb │ │ ├── 20151031044810_add_course_assessment_answer_auto_grading.rb │ │ ├── 20151101050627_create_folder_for_categories_and_assessments.rb │ │ ├── 20151114043545_create_jobs.rb │ │ ├── 20151114093538_link_course_assessment_answer_auto_grading_to_jobs.rb │ │ ├── 20151117141053_unread_polymorphic_reader_migration.rb │ │ ├── 20151119020459_create_course_assessment_programming_questions.rb │ │ ├── 20151121070719_create_polyglot_languages.rb │ │ ├── 20151121082432_integrate_assessments_with_polyglot_framework.rb │ │ ├── 20151122011709_create_course_assessment_programming_evaluations.rb │ │ ├── 20151202030421_add_profile_photo_to_users.rb │ │ ├── 20151210055839_create_course_condition_assessments.rb │ │ ├── 20151212091754_normalise_programming_question_file_names.rb │ │ ├── 20151212232827_add_token_authentication_to_user.rb │ │ ├── 20151214080700_add_package_to_programming_evaluation.rb │ │ ├── 20151214081508_add_unique_index_to_course_levels.rb │ │ ├── 20151224034135_add_display_mode_to_assessments.rb │ │ ├── 20151228030006_add_weight_to_questions.rb │ │ ├── 20160119055307_add_correct_to_assessment_answers.rb │ │ ├── 20160124054745_add_exit_code_to_programming_evaluation.rb │ │ ├── 20160126094510_add_badge_to_course_achievements.rb │ │ ├── 20160220081731_rename_assessment_tags_to_skills.rb │ │ ├── 20160220092350_add_course_to_skill_and_skill_branch.rb │ │ ├── 20160226013208_create_course_assessment_answer_programming_file_annotations.rb │ │ ├── 20160229082515_create_attachment_references.rb │ │ ├── 20160330031839_create_course_discussion_post_votes.rb │ │ ├── 20160420005403_change_course_groups_from_user_to_course_user.rb │ │ ├── 20160429135101_add_attributes_to_course_discussion_topics.rb │ │ ├── 20160523093423_add_field_to_course_discussion_topics.rb │ │ ├── 20160628052136_add_staff_only_comments_to_questions.rb │ │ ├── 20160714053644_add_timestamps_to_course_assessment_answers.rb │ │ ├── 20160716091234_add_autograded_to_course_assessments.rb │ │ ├── 20160722020938_add_time_zone_to_users.rb │ │ ├── 20160729022656_add_fields_to_course_assessment_question_programming_test_cases.rb │ │ ├── 20160730044448_chang_attachment_references.rb │ │ ├── 20160801084814_rename_question_type_to_grading_scheme.rb │ │ ├── 20160808023535_change_course_assessment_questions_title_nullity.rb │ │ ├── 20160811064336_change_test_cases_expected_type.rb │ │ ├── 20160815141617_prevent_duplicate_submissions.rb │ │ ├── 20160822092000_add_publisher_to_submissions.rb │ │ ├── 20160823091240_add_unique_index_to_read_marks.rb │ │ ├── 20160823094126_add_unique_index_to_multiple_response_answer_options.rb │ │ ├── 20160830023835_alter_grade_type.rb │ │ ├── 20160906091734_add_fields_to_course_assessment_answer_text_responses.rb │ │ ├── 20160908100211_rename_programming_auto_grading_test_result_messages.rb │ │ ├── 20160916101014_change_discussion_posts_title.rb │ │ ├── 20160920101847_add_hide_text_to_course_assessment_question_text_responses.rb │ │ ├── 20161003094742_create_lesson_plan_todos.rb │ │ ├── 20161006063146_rename_assessments_display_mode.rb │ │ ├── 20161007061116_add_fields_to_assessments.rb │ │ ├── 20161013115452_migrate_graded_submissions_to_published.rb │ │ ├── 20161020020353_add_todos_for_existing_lesson_plan_items.rb │ │ ├── 20161027020646_add_package_type_to_course_assessment_question_programming.rb │ │ ├── 20161027074807_add_session_id_to_submissions.rb │ │ ├── 20161102022455_add_stdout_stderr_to_course_assessment_answer_programming_auto_grading.rb │ │ ├── 20161107023238_add_attempt_limit_to_programming_questions.rb │ │ ├── 20161108030759_add_gamified_to_courses.rb │ │ ├── 20161116075305_add_tabbed_view_to_course_assessments.rb │ │ ├── 20161202071856_add_skippable_to_assessments.rb │ │ ├── 20161206101644_remove_mode_and_invert_draft.rb │ │ ├── 20161207013914_create_course_survey_tables.rb │ │ ├── 20161214050848_add_sent_at_to_course_user_invitations.rb │ │ ├── 20161219105620_change_course_user_invitations.rb │ │ ├── 20161223123359_create_course_enrol_requests.rb │ │ ├── 20161227125455_remove_workflow_state_from_course_users.rb │ │ ├── 20170102053335_create_course_video_tables.rb │ │ ├── 20170103104020_create_course_lectures.rb │ │ ├── 20170110022335_remove_extra_bonus_exp_from_lesson_plan.rb │ │ ├── 20170115105609_add_delayed_grade_publication_to_course_assessments.rb │ │ ├── 20170116103602_add_tokens_to_course_lesson_plan_items.rb │ │ ├── 20170117145558_add_fields_to_courses.rb │ │ ├── 20170117164747_add_awarded_at_and_draft_exp_to_course_experience_points_records.rb │ │ ├── 20170120063357_change_default_value_of_assessment_questions_weight.rb │ │ ├── 20170128041649_change_survey_tables.rb │ │ ├── 20170203020915_add_weight_to_course_assessment_question_multiple_response_options.rb │ │ ├── 20170210073247_add_selected_to_survey_answer_options.rb │ │ ├── 20170214062036_add_index_for_survey_response_user.rb │ │ ├── 20170217041431_add_survey_booleans.rb │ │ ├── 20170220123952_remove_image_from_survey_question_option.rb │ │ ├── 20170222101701_remove_default_from_groups.rb │ │ ├── 20170302054635_add_submitted_at_to_submissions.rb │ │ ├── 20170306051518_rename_lectures_to_virtual_classrooms.rb │ │ ├── 20170307043218_add_instructor_id_to_virtual_classrooms.rb │ │ ├── 20170307080839_add_timestamp_to_trackable_jobs.rb │ │ ├── 20170307090147_add_time_limit_to_existing_programming_questions.rb │ │ ├── 20170308044737_add_recorded_videos_to_virtual_classrooms.rb │ │ ├── 20170308073855_create_course_assessment_submission_logs.rb │ │ ├── 20170308074359_add_course_assessment_submission_question.rb │ │ ├── 20170309094211_add_section_id_to_survey_questions.rb │ │ ├── 20170407083553_add_reminded_at_and_allow_responsee_to_surveys.rb │ │ ├── 20170420063829_remove_length_limit_of_expression.rb │ │ ├── 20170426024809_remove_constraint_in_skills.rb │ │ ├── 20170506010828_create_course_assessment_question_scribings.rb │ │ ├── 20170510233359_remove_selected_from_survey_answer_options.rb │ │ ├── 20170515061739_add_more_options_to_course_assessments.rb │ │ ├── 20170522104534_regroup_course_settings.rb │ │ ├── 20170528035408_create_course_assessment_question_voice_responses.rb │ │ ├── 20170529035430_create_course_assessment_answer_voice_responses.rb │ │ ├── 20170602094949_change_length_of_invitation_key.rb │ │ ├── 20170607033748_create_course_lesson_plan_event_materials.rb │ │ ├── 20170608050653_add_description_to_course_groups.rb │ │ ├── 20170706030838_drop_course_assessment_programming_evaluations.rb │ │ ├── 20170720071251_create_instance_user_role_requests.rb │ │ ├── 20170720071725_rename_assessment_opened_email_settings_key.rb │ │ ├── 20170720080032_add_current_answer_to_course_assessment_answers.rb │ │ ├── 20170721061506_change_lesson_plan_event_type_to_string.rb │ │ ├── 20170816073714_add_confirmer_id_to_course_user_invitations.rb │ │ ├── 20170819040619_add_role_to_course_user_invitation.rb │ │ ├── 20170904093138_add_resolved_to_course_forum_topic.rb │ │ ├── 20170905095543_add_latest_post_at_to_course_forum_topic.rb │ │ ├── 20170915071654_add_last_active_at_to_instance_users.rb │ │ ├── 20170915083041_remove_token_authentication_from_user.rb │ │ ├── 20170925095335_add_answer_to_posts.rb │ │ ├── 20171004053203_rekey_sidebar_settings.rb │ │ ├── 20171005033946_create_course_video_topics.rb │ │ ├── 20171014154130_rename_answer_test_results_table.rb │ │ ├── 20171020042126_create_course_question_assessments.rb │ │ ├── 20171024074942_convert_autograded_text_response_answers_to_plaintext.rb │ │ ├── 20171026141412_add_user_stamps_to_course_video_topics.rb │ │ ├── 20171212063353_create_course_video_sessions.rb │ │ ├── 20171212151525_create_course_video_events.rb │ │ ├── 20171221155021_add_play_back_rate_and_session_video_time.rb │ │ ├── 20171225012500_create_question_text_response_comprehension.rb │ │ ├── 20180111081846_mark_old_user_notification_popups_as_read.rb │ │ ├── 20180111081847_add_read_status_to_topics.rb │ │ ├── 20180117025349_convert_video_posts_to_plain_text.rb │ │ ├── 20180117025350_add_multiple_file_submission_to_question_programming.rb │ │ ├── 20180119064953_add_tokens_to_course_announcements.rb │ │ ├── 20180130023617_reset_reminder_jobs.rb │ │ ├── 20180208070853_remove_read_marks_foreign_key.rb │ │ ├── 20180213165515_create_course_video_tabs.rb │ │ ├── 20180213170056_add_video_tab_to_course_videos.rb │ │ ├── 20180215092210_add_timezone_to_courses.rb │ │ ├── 20180220010332_remove_opening_reminder_token.rb │ │ ├── 20180321141117_remove_incorrectly_cloned_videos.rb │ │ ├── 20180322045000_convert_comprehension_explanation_to_plain_text.rb │ │ ├── 20180329205900_rename_comprehension_explanation_to_information.rb │ │ ├── 20180403011936_add_phantom_to_course_user_invitations.rb │ │ ├── 20180414144225_add_password_to_assessments.rb │ │ ├── 20180424030829_remove_disbursement_component_settings.rb │ │ ├── 20180703023011_create_course_assessment_skills_question_assessments.rb │ │ ├── 20180829123352_change_milestones_to_acts_as_lesson_plan_item.rb │ │ ├── 20180906084425_add_autograde_booleans_to_assessments.rb │ │ ├── 20180926081538_create_instance_user_invitations.rb │ │ ├── 20180929061522_add_reference_timeline.rb │ │ ├── 20181018043204_make_scribing_scribbles_answer_id_non_null.rb │ │ ├── 20181130061333_add_personal_times.rb │ │ ├── 20181204070041_add_duration_to_course_videos.rb │ │ ├── 20181211133628_add_show_personalized_timeline_features_to_course.rb │ │ ├── 20181219060042_add_booleans_to_course_lesson_plan_item.rb │ │ ├── 20190108042524_create_course_video_statistics.rb │ │ ├── 20190129044142_add_cached_to_course_video_submission_statistics.rb │ │ ├── 20190202070915_add_randomized_assessment_tables.rb │ │ ├── 20200409143131_add_randomization_to_mrq.rb │ │ ├── 20210112074249_add_show_mcq_answer_to_course_assessments.rb │ │ ├── 20210817040704_add_show_mcq_mrq_solution_to_course_assessments.rb │ │ ├── 20210819132022_block_student_viewing_submission.rb │ │ ├── 20210821030941_create_course_condition_surveys.rb │ │ ├── 20210914114834_add_foreign_key_constraint_to_active_storage_attachments_for_blob_id.active_storage.rb │ │ ├── 20211003230453_create_course_assessment_question_forum_post_responses.rb │ │ ├── 20211021153003_add_satisfiability_type_to_achievements_and_assessments.rb │ │ ├── 20211021163430_create_course_learning_maps.rb │ │ ├── 20211023070257_add_conditional_satisfiability_evaluation_time_to_courses.rb │ │ ├── 20211024140630_add_last_graded_time_to_course_assessment_submissions.rb │ │ ├── 20211027070551_create_course_settings_emails.rb │ │ ├── 20211027070704_create_course_user_email_unsubscriptions.rb │ │ ├── 20211027083820_add_topics_auto_subscribe_to_forum.rb │ │ ├── 20211210015400_change_forum_post_response_answer_text_type.rb │ │ ├── 20211210085034_add_delayed_post_column.rb │ │ ├── 20211215055726_rename_delayed_to_is_delayed.rb │ │ ├── 20211221163337_add_satisfiability_type_to_surveys.rb │ │ ├── 20211226160941_add_satisfiability_type_to_videos.rb │ │ ├── 20211226161011_create_course_condition_videos.rb │ │ ├── 20220111183806_add_course_group_categories.rb │ │ ├── 20220307174407_add_duplication_traceable.rb │ │ ├── 20220315192851_add_course_learning_rate_records.rb │ │ ├── 20220514085359_add_userstamps_confirmer_workflow_columns_to_request_tables.rb │ │ ├── 20220519015535_add_default_timeline_algorithm_to_course.rb │ │ ├── 20220519055836_add_timeline_algorithm_to_user_invitation.rb │ │ ├── 20220701045213_add_skip_grading_to_mrq.rb │ │ ├── 20220819071113_add_workflow_state_to_post.rb │ │ ├── 20220819081113_add_codaveri_to_programming_question.rb │ │ ├── 20220819091113_create_new_codaveri_feedbacks_table.rb │ │ ├── 20230104073345_add_anonymous_to_forum_post.rb │ │ ├── 20230109024146_add_has_todo_column_to_lesson_plan_items.rb │ │ ├── 20230111111646_add_locale_column_to_user_table.rb │ │ ├── 20230112093308_add_default_locale.rb │ │ ├── 20230115054448_add_title_and_weight_to_reference_timelines.rb │ │ ├── 20230404030133_add_auto_grading_queue_to_question.rb │ │ ├── 20230406063949_create_monitoring.rb │ │ ├── 20230410121228_add_allow_record_draft_answer_to_assessments.rb │ │ ├── 20230417051641_replace_seb_hash_with_secret_in_monitoring.rb │ │ ├── 20230904095037_change_jobs_column_type.rb │ │ ├── 20231017055234_add_blocks_to_monitoring.rb │ │ ├── 20231026165911_add_misses_to_monitoring.rb │ │ ├── 20231107114521_add_session_id_to_answer.rb │ │ ├── 20231215074458_create_doorkeeper_tables.rb │ │ ├── 20240226104135_add_support_to_attachment_type_question.rb │ │ ├── 20240312101723_add_max_size_to_attachment.rb │ │ ├── 20240422100451_create_cikgo_users.rb │ │ ├── 20240510173545_add_time_limit_for_timed_assessment.rb │ │ ├── 20240512092424_add_session_id_column_to_user_table.rb │ │ ├── 20240709020208_add_live_feedback_columns.rb │ │ ├── 20240808083848_add_live_feedback_code_and_comments.rb │ │ ├── 20240830080332_remove_live_feedback_settings_from_assessment.rb │ │ ├── 20240830090759_add_deprecation_support_for_polyglot.rb │ │ ├── 20240904091136_add_browser_authorization_to_monitoring.rb │ │ ├── 20240917170847_add_koditsu_columns.rb │ │ ├── 20241028141424_add_language_whitelist_flags.rb │ │ ├── 20241118152013_drop_virtual_classroom_table.rb │ │ ├── 20241129164745_remove_draft_programming_answer_column.rb │ │ ├── 20241203141804_create_course_material_text_chunks.rb │ │ ├── 20241204104627_add_question_sync_status_with_codaveri.rb │ │ ├── 20241214075118_create_rag_auto_answerings.rb │ │ ├── 20241216104132_add_deleted_column_in_course_user.rb │ │ ├── 20250205154519_create_course_forum_imports_and_discussions.rb │ │ ├── 20250212162346_create_live_feedback_chat_table.rb │ │ ├── 20250222095313_remove_unique_index_from_job_id_in_course_material_text_chunkings.rb │ │ ├── 20250401130928_create_rubric_based_grading_table.rb │ │ ├── 20250421095827_add_rubric_visibility_column_on_assessment_edit.rb │ │ ├── 20250619030938_add_ai_grading_columns_to_course_assessment_question_rubric_based_responses.rb │ │ ├── 20250718054540_add_ssid_columns.rb │ │ ├── 20250722082737_create_course_assessment_links.rb │ │ ├── 20250725030938_create_scholaistic_assessments.rb │ │ ├── 20251002070442_add_v2_rubric_grading_tables.rb │ │ ├── 20251126073121_add_assessments_linkable_tree_id.rb │ │ ├── 20260206070824_add_retryable_flag_to_user_invitations.rb │ │ ├── 20260215164351_add_enrol_auto_approval_to_course.rb │ │ ├── 20260302095446_add_template_text_to_text_based_questions.rb │ │ ├── 20260320023538_add_suspended_to_course_users.rb │ │ └── 20260406122130_add_suspended_to_courses.rb │ ├── schema.rb │ ├── seeds/ │ │ ├── development.rb │ │ ├── production.rb │ │ └── test.rb │ └── seeds.rb ├── env ├── lib/ │ ├── assets/ │ │ └── .keep │ ├── autoload/ │ │ ├── active_job/ │ │ │ └── queue_adapters/ │ │ │ └── background_thread_adapter.rb │ │ ├── authentication_error.rb │ │ ├── aws_wrapped_client.rb │ │ ├── codaveri_error.rb │ │ ├── component_not_found_error.rb │ │ ├── componentize.rb │ │ ├── course/ │ │ │ ├── assessment/ │ │ │ │ ├── java/ │ │ │ │ │ └── java_programming_test_case_report.rb │ │ │ │ ├── programming_package.rb │ │ │ │ ├── programming_test_case_report.rb │ │ │ │ └── programming_test_case_report_builder.rb │ │ │ └── conditional/ │ │ │ └── user_satisfiability_graph.rb │ │ ├── coursemology_docker_container.rb │ │ ├── duplicator.rb │ │ ├── filename_validator.rb │ │ ├── illegal_state_error.rb │ │ ├── invalid_data_error.rb │ │ ├── koditsu_error.rb │ │ ├── notifier/ │ │ │ └── base/ │ │ │ └── activity_wrapper.rb │ │ ├── preformatted_text_line_numbers_filter.rb │ │ ├── preformatted_text_line_split_filter.rb │ │ ├── send_file.rb │ │ ├── ssid_error.rb │ │ ├── time_zone_validator.rb │ │ └── trackable_job.rb │ ├── extensions/ │ │ ├── action_mailer_suppression/ │ │ │ ├── action_mailer/ │ │ │ │ └── message_delivery.rb │ │ │ └── action_mailer.rb │ │ ├── action_mailer_suppression.rb │ │ ├── acts_as_helpers/ │ │ │ ├── active_record/ │ │ │ │ └── base.rb │ │ │ └── active_record.rb │ │ ├── acts_as_helpers.rb │ │ ├── after_commit_action.rb │ │ ├── association_inverse_suppression.rb │ │ ├── attachable/ │ │ │ ├── action_controller/ │ │ │ │ └── base.rb │ │ │ ├── action_controller.rb │ │ │ ├── action_view.rb │ │ │ ├── active_record/ │ │ │ │ └── base.rb │ │ │ └── active_record.rb │ │ ├── attachable.rb │ │ ├── conditional/ │ │ │ ├── active_record/ │ │ │ │ └── base.rb │ │ │ └── active_record.rb │ │ ├── conditional.rb │ │ ├── core_extensions/ │ │ │ ├── active_record/ │ │ │ │ └── relation.rb │ │ │ └── active_record.rb │ │ ├── core_extensions.rb │ │ ├── database_event/ │ │ │ ├── active_record/ │ │ │ │ └── base.rb │ │ │ └── active_record.rb │ │ ├── database_event.rb │ │ ├── date_time_helpers/ │ │ │ ├── active_support/ │ │ │ │ └── time_zone.rb │ │ │ ├── active_support.rb │ │ │ └── time.rb │ │ ├── date_time_helpers.rb │ │ ├── deferred_workflow_state_persistence/ │ │ │ ├── active_record/ │ │ │ │ └── base.rb │ │ │ ├── active_record.rb │ │ │ └── workflow.rb │ │ ├── deferred_workflow_state_persistence.rb │ │ ├── destroy_callbacks/ │ │ │ ├── active_record/ │ │ │ │ └── base.rb │ │ │ └── active_record.rb │ │ ├── destroy_callbacks.rb │ │ ├── devise_async_email/ │ │ │ ├── devise/ │ │ │ │ ├── models/ │ │ │ │ │ └── authenticatable.rb │ │ │ │ └── models.rb │ │ │ └── devise.rb │ │ ├── devise_async_email.rb │ │ ├── discussion_topic/ │ │ │ ├── active_record/ │ │ │ │ └── base.rb │ │ │ └── active_record.rb │ │ ├── discussion_topic.rb │ │ ├── duplication_traceable/ │ │ │ ├── active_record/ │ │ │ │ └── base.rb │ │ │ └── active_record.rb │ │ ├── duplication_traceable.rb │ │ ├── has_many_inverse_through/ │ │ │ ├── active_record/ │ │ │ │ ├── associations/ │ │ │ │ │ ├── builder/ │ │ │ │ │ │ └── has_many.rb │ │ │ │ │ ├── builder.rb │ │ │ │ │ └── has_many_through_association.rb │ │ │ │ ├── associations.rb │ │ │ │ ├── reflection/ │ │ │ │ │ └── through_reflection.rb │ │ │ │ └── reflection.rb │ │ │ └── active_record.rb │ │ ├── has_many_inverse_through.rb │ │ ├── legacy/ │ │ │ ├── active_record/ │ │ │ │ ├── connection_adapters/ │ │ │ │ │ └── table_definition.rb │ │ │ │ └── connection_adapters.rb │ │ │ └── active_record.rb │ │ ├── legacy.rb │ │ ├── materials/ │ │ │ ├── action_controller/ │ │ │ │ └── base.rb │ │ │ ├── action_controller.rb │ │ │ ├── action_view/ │ │ │ │ └── helpers.rb │ │ │ ├── action_view.rb │ │ │ ├── active_record/ │ │ │ │ └── base.rb │ │ │ └── active_record.rb │ │ ├── materials.rb │ │ ├── pathname_helpers/ │ │ │ └── pathname.rb │ │ ├── pathname_helpers.rb │ │ ├── polyglot_with_database/ │ │ │ ├── coursemology/ │ │ │ │ ├── polyglot/ │ │ │ │ │ └── language.rb │ │ │ │ └── polyglot.rb │ │ │ └── coursemology.rb │ │ ├── polyglot_with_database.rb │ │ ├── render_collection_with_prefix_suffix/ │ │ │ ├── action_view/ │ │ │ │ ├── abstract_renderer/ │ │ │ │ │ └── object_rendering.rb │ │ │ │ └── abstract_renderer.rb │ │ │ └── action_view.rb │ │ ├── render_collection_with_prefix_suffix.rb │ │ ├── time_bounded_record/ │ │ │ ├── active_record/ │ │ │ │ ├── base.rb │ │ │ │ ├── connection_adapters/ │ │ │ │ │ └── table_definition.rb │ │ │ │ └── connection_adapters.rb │ │ │ └── active_record.rb │ │ └── time_bounded_record.rb │ ├── extensions.rb │ └── tasks/ │ ├── coursemology/ │ │ ├── seed.rake │ │ └── stats_setup.rake │ ├── db/ │ │ ├── add_missing_email_settings.rake │ │ ├── delete_phantom_course_users.rake │ │ ├── insert_discussion_topics.rake │ │ ├── insert_submission_questions.rake │ │ ├── migrate_comments.rake │ │ ├── migrate_email_settings.rake │ │ ├── migrate_pending_staff_reply.rake │ │ ├── migrate_programming_question_languages.rake │ │ ├── populate_assessment_linkable_tree_id.rake │ │ ├── populate_assessment_links.rake │ │ ├── populate_live_feedback_options.rake │ │ ├── remove_draft_programming_answer.rake │ │ ├── set_polyglot_language_flags.rake │ │ └── set_polyglot_language_weights.rake │ ├── factory_bot.rake │ └── keycloak/ │ └── push_redirect_uris.rake ├── log/ │ └── .keep ├── public/ │ ├── 403.html │ ├── 404.html │ ├── 413.html │ ├── 422.html │ ├── 500.html │ └── 504.html ├── spec/ │ ├── .rubocop.yml │ ├── README.md │ ├── components/ │ │ └── course/ │ │ ├── controller_component_host_spec.rb │ │ ├── controller_component_spec.rb │ │ └── model_component_host_spec.rb │ ├── controllers/ │ │ ├── application_controller_spec.rb │ │ ├── attachment_references_controller_spec.rb │ │ ├── concerns/ │ │ │ ├── codaveri_language_concern_spec.rb │ │ │ ├── course/ │ │ │ │ ├── assessment/ │ │ │ │ │ ├── koditsu_assessment_concern_spec.rb │ │ │ │ │ ├── koditsu_assessment_invitation_concern_spec.rb │ │ │ │ │ ├── live_feedback/ │ │ │ │ │ │ ├── message_concern_spec.rb │ │ │ │ │ │ └── thread_concern_spec.rb │ │ │ │ │ ├── question/ │ │ │ │ │ │ └── koditsu_question_concern_spec.rb │ │ │ │ │ ├── question_bundle_assignment_concern_spec.rb │ │ │ │ │ └── submission/ │ │ │ │ │ └── koditsu/ │ │ │ │ │ └── submissions_concern_spec.rb │ │ │ │ ├── discussion/ │ │ │ │ │ └── posts_concern_spec.rb │ │ │ │ ├── lesson_plan/ │ │ │ │ │ └── personalization_concern_spec.rb │ │ │ │ └── scholaistic/ │ │ │ │ └── concern_spec.rb │ │ │ └── signals/ │ │ │ └── emission_concern_spec.rb │ │ ├── course/ │ │ │ ├── achievement/ │ │ │ │ ├── achievements_controller_spec.rb │ │ │ │ └── condition/ │ │ │ │ ├── achievements_controller_spec.rb │ │ │ │ ├── assessments_controller_spec.rb │ │ │ │ ├── levels_controller_spec.rb │ │ │ │ └── surveys_controller_spec.rb │ │ │ ├── admin/ │ │ │ │ ├── admin_controller_spec.rb │ │ │ │ ├── assessment_settings_controller_spec.rb │ │ │ │ ├── assessments/ │ │ │ │ │ ├── categories_controller_spec.rb │ │ │ │ │ └── tabs_controller_spec.rb │ │ │ │ ├── codaveri_settings_controller_spec.rb │ │ │ │ ├── component_settings_controller_spec.rb │ │ │ │ ├── discussion/ │ │ │ │ │ └── topic_settings_controller_spec.rb │ │ │ │ ├── forum_settings_controller_spec.rb │ │ │ │ ├── leaderboard_settings_controller_spec.rb │ │ │ │ ├── lesson_plan_settings_controller_spec.rb │ │ │ │ ├── material_settings_controller_spec.rb │ │ │ │ ├── notification_settings_controller_spec.rb │ │ │ │ ├── sidebar_settings_controller_spec.rb │ │ │ │ └── videos/ │ │ │ │ └── tabs_controller_spec.rb │ │ │ ├── announcements_controller_spec.rb │ │ │ ├── assessment/ │ │ │ │ ├── assessments_component_spec.rb │ │ │ │ ├── assessments_controller_spec.rb │ │ │ │ ├── condition/ │ │ │ │ │ ├── achievements_controller_spec.rb │ │ │ │ │ ├── assessments_controller_spec.rb │ │ │ │ │ ├── levels_controller_spec.rb │ │ │ │ │ └── surveys_controller_spec.rb │ │ │ │ ├── question/ │ │ │ │ │ ├── forum_post_responses_controller_spec.rb │ │ │ │ │ ├── multiple_response_controller_spec.rb │ │ │ │ │ ├── programming_controller_spec.rb │ │ │ │ │ ├── rubric_based_responses_controller_spec.rb │ │ │ │ │ ├── scribing_controller_spec.rb │ │ │ │ │ ├── text_responses_controller_spec.rb │ │ │ │ │ └── voice_response_controller_spec.rb │ │ │ │ ├── skill_branches_controller_spec.rb │ │ │ │ ├── skills_controller_spec.rb │ │ │ │ ├── submission/ │ │ │ │ │ ├── answer/ │ │ │ │ │ │ ├── answers_controller_spec.rb │ │ │ │ │ │ ├── forum_post_response/ │ │ │ │ │ │ │ └── posts_controller_spec.rb │ │ │ │ │ │ ├── programming/ │ │ │ │ │ │ │ ├── annotations_controller_spec.rb │ │ │ │ │ │ │ └── programming_controller_spec.rb │ │ │ │ │ │ └── text_response/ │ │ │ │ │ │ └── text_response_controller_spec.rb │ │ │ │ │ ├── live_feedback_controller_spec.rb │ │ │ │ │ └── submissions_controller_spec.rb │ │ │ │ ├── submission_question/ │ │ │ │ │ ├── comments_controller_spec.rb │ │ │ │ │ └── submission_questions_controller_spec.rb │ │ │ │ └── submissions_controller_spec.rb │ │ │ ├── conditions_controller_spec.rb │ │ │ ├── controller_spec.rb │ │ │ ├── courses_controller_spec.rb │ │ │ ├── discussion/ │ │ │ │ ├── posts_controller_spec.rb │ │ │ │ └── topics_controller_spec.rb │ │ │ ├── duplications_controller_spec.rb │ │ │ ├── enrol_requests_controller_spec.rb │ │ │ ├── experience_points/ │ │ │ │ ├── disbursement_controller_spec.rb │ │ │ │ └── forum_disbursement_spec.rb │ │ │ ├── experience_points_records_controller_spec.rb │ │ │ ├── forum/ │ │ │ │ ├── forums_controller_spec.rb │ │ │ │ ├── posts_controller_spec.rb │ │ │ │ └── topics_controller_spec.rb │ │ │ ├── groups_controller_spec.rb │ │ │ ├── instance_user_role_requests_controller_spec.rb │ │ │ ├── leaderboards_controller_spec.rb │ │ │ ├── learning_map/ │ │ │ │ └── learning_map_controller_spec.rb │ │ │ ├── lesson_plan/ │ │ │ │ ├── event_controller_spec.rb │ │ │ │ ├── items_controller_spec.rb │ │ │ │ └── milestones_controller_spec.rb │ │ │ ├── levels_controller_spec.rb │ │ │ ├── material/ │ │ │ │ ├── folders_controller_spec.rb │ │ │ │ └── materials_controller_spec.rb │ │ │ ├── object_duplication_controller_spec.rb │ │ │ ├── personal_times_controller_spec.rb │ │ │ ├── plagiarism/ │ │ │ │ └── assessments_controller_spec.rb │ │ │ ├── reference_timelines_controller_spec.rb │ │ │ ├── reference_times_controller_spec.rb │ │ │ ├── statistics/ │ │ │ │ ├── aggregate_controller_spec.rb │ │ │ │ ├── assessment_controller_spec.rb │ │ │ │ └── statistics_controller_spec.rb │ │ │ ├── stories/ │ │ │ │ └── stories_controller_spec.rb │ │ │ ├── survey/ │ │ │ │ ├── responses_controller_spec.rb │ │ │ │ └── surveys_controller_spec.rb │ │ │ ├── user_email_subscriptions_controller_spec.rb │ │ │ ├── user_invitations_controller_spec.rb │ │ │ ├── user_notifications_controller_spec.rb │ │ │ ├── user_registrations_controller_spec.rb │ │ │ ├── users_controller_spec.rb │ │ │ ├── video/ │ │ │ │ ├── submission/ │ │ │ │ │ ├── sessions_controller_spec.rb │ │ │ │ │ └── submissions_controller_spec.rb │ │ │ │ └── topic/ │ │ │ │ └── topics_controller_spec.rb │ │ │ └── video_submissions_controller_spec.rb │ │ ├── health_check_controller_spec.rb │ │ ├── jobs_controller_spec.rb │ │ ├── system/ │ │ │ └── admin/ │ │ │ ├── admin_controller_spec.rb │ │ │ ├── announcements_controller_spec.rb │ │ │ ├── controller_spec.rb │ │ │ ├── courses_controller_spec.rb │ │ │ ├── get_help_controller_spec.rb │ │ │ ├── instance/ │ │ │ │ ├── admin_controller_spec.rb │ │ │ │ ├── announcements_controller_spec.rb │ │ │ │ ├── components_controller_spec.rb │ │ │ │ ├── courses_controller_spec.rb │ │ │ │ ├── get_help_controller_spec.rb │ │ │ │ ├── user_invitations_controller_spec.rb │ │ │ │ └── users_controller_spec.rb │ │ │ ├── instances_controller_spec.rb │ │ │ └── users_controller_spec.rb │ │ ├── user/ │ │ │ ├── emails_controller_spec.rb │ │ │ ├── profiles_controller_spec.rb │ │ │ └── registration_controller_spec.rb │ │ ├── user_login_spec.rb │ │ └── users_controller_spec.rb │ ├── factories/ │ │ ├── activities.rb │ │ ├── attachment_references.rb │ │ ├── attachments.rb │ │ ├── course_achievements.rb │ │ ├── course_announcements.rb │ │ ├── course_assessment_answer_auto_gradings.rb │ │ ├── course_assessment_answer_forum_post_responses.rb │ │ ├── course_assessment_answer_forum_posts.rb │ │ ├── course_assessment_answer_multiple_responses.rb │ │ ├── course_assessment_answer_programming.rb │ │ ├── course_assessment_answer_programming_auto_grading_test_results.rb │ │ ├── course_assessment_answer_programming_auto_gradings.rb │ │ ├── course_assessment_answer_programming_file_annotations.rb │ │ ├── course_assessment_answer_programming_files.rb │ │ ├── course_assessment_answer_rubric_based_response.rb │ │ ├── course_assessment_answer_rubric_based_response_selection.rb │ │ ├── course_assessment_answer_scribing_scribble.rb │ │ ├── course_assessment_answer_scribings.rb │ │ ├── course_assessment_answer_text_responses.rb │ │ ├── course_assessment_answer_voice_responses.rb │ │ ├── course_assessment_answers.rb │ │ ├── course_assessment_assessments.rb │ │ ├── course_assessment_categories.rb │ │ ├── course_assessment_live_feedback_messages.rb │ │ ├── course_assessment_live_feedback_threads.rb │ │ ├── course_assessment_plagiarism_checks.rb │ │ ├── course_assessment_question_forum_post_responses.rb │ │ ├── course_assessment_question_multiple_response_options.rb │ │ ├── course_assessment_question_multiple_responses.rb │ │ ├── course_assessment_question_programming.rb │ │ ├── course_assessment_question_programming_template_files.rb │ │ ├── course_assessment_question_programming_test_cases.rb │ │ ├── course_assessment_question_rubric_based_response.rb │ │ ├── course_assessment_question_rubric_based_response_category.rb │ │ ├── course_assessment_question_rubric_based_response_criterion.rb │ │ ├── course_assessment_question_scribings.rb │ │ ├── course_assessment_question_text_response_comprehension_groups.rb │ │ ├── course_assessment_question_text_response_comprehension_points.rb │ │ ├── course_assessment_question_text_response_comprehension_solutions.rb │ │ ├── course_assessment_question_text_response_solutions.rb │ │ ├── course_assessment_question_text_responses.rb │ │ ├── course_assessment_question_voice_responses.rb │ │ ├── course_assessment_questions.rb │ │ ├── course_assessment_skill_branches.rb │ │ ├── course_assessment_skills.rb │ │ ├── course_assessment_submission_logs.rb │ │ ├── course_assessment_submission_questions.rb │ │ ├── course_assessment_submissions.rb │ │ ├── course_assessment_tabs.rb │ │ ├── course_condition_achievements.rb │ │ ├── course_condition_assessments.rb │ │ ├── course_condition_levels.rb │ │ ├── course_condition_surveys.rb │ │ ├── course_condition_videos.rb │ │ ├── course_discussion_post_codaveri_feedback.rb │ │ ├── course_discussion_post_votes.rb │ │ ├── course_discussion_posts.rb │ │ ├── course_discussion_topic_subscriptions.rb │ │ ├── course_discussion_topics.rb │ │ ├── course_enrol_requests.rb │ │ ├── course_experience_points_records.rb │ │ ├── course_forum_topic_views.rb │ │ ├── course_forum_topics.rb │ │ ├── course_forums.rb │ │ ├── course_group_categories.rb │ │ ├── course_group_users.rb │ │ ├── course_groups.rb │ │ ├── course_learning_map.rb │ │ ├── course_learning_rate_records.rb │ │ ├── course_lesson_plan_events.rb │ │ ├── course_lesson_plan_items.rb │ │ ├── course_lesson_plan_milestones.rb │ │ ├── course_lesson_plan_todos.rb │ │ ├── course_levels.rb │ │ ├── course_material_folders.rb │ │ ├── course_material_text_chunkings.rb │ │ ├── course_materials.rb │ │ ├── course_monitoring_heartbeats.rb │ │ ├── course_monitoring_monitors.rb │ │ ├── course_monitoring_sessions.rb │ │ ├── course_notifications.rb │ │ ├── course_question_assessments.rb │ │ ├── course_reference_timelines.rb │ │ ├── course_reference_times.rb │ │ ├── course_scholaistic_assessments.rb │ │ ├── course_scholaistic_submissions.rb │ │ ├── course_survey_answers.rb │ │ ├── course_survey_question_options.rb │ │ ├── course_survey_questions.rb │ │ ├── course_survey_responses.rb │ │ ├── course_survey_sections.rb │ │ ├── course_surveys.rb │ │ ├── course_user_achievements.rb │ │ ├── course_user_invitations.rb │ │ ├── course_users.rb │ │ ├── course_video_events.rb │ │ ├── course_video_sessions.rb │ │ ├── course_video_submissions.rb │ │ ├── course_video_tabs.rb │ │ ├── course_video_topics.rb │ │ ├── course_video_videos.rb │ │ ├── courses.rb │ │ ├── duplication_traceable_assessments.rb │ │ ├── duplication_traceable_courses.rb │ │ ├── generic_announcements.rb │ │ ├── identities.rb │ │ ├── instance_announcements.rb │ │ ├── instance_user_invitations.rb │ │ ├── instance_user_role_requests.rb │ │ ├── instance_users.rb │ │ ├── instances.rb │ │ ├── nested_attribute_new_ids.rb │ │ ├── system_announcements.rb │ │ ├── trackable_jobs.rb │ │ ├── user_emails.rb │ │ ├── user_notifications.rb │ │ └── users.rb │ ├── features/ │ │ ├── course/ │ │ │ ├── achievement_condition_management_spec.rb │ │ │ ├── achievement_listing_spec.rb │ │ │ ├── achievement_management_spec.rb │ │ │ ├── admin/ │ │ │ │ ├── admin_spec.rb │ │ │ │ ├── announcement_settings_spec.rb │ │ │ │ ├── codaveri_settings_spec.rb │ │ │ │ ├── component_settings_spec.rb │ │ │ │ ├── discussion/ │ │ │ │ │ └── topic_settings_spec.rb │ │ │ │ ├── forum_settings_spec.rb │ │ │ │ ├── leaderboard_settings_spec.rb │ │ │ │ ├── material_settings_spec.rb │ │ │ │ ├── sidebar_settings_spec.rb │ │ │ │ └── video_settings_spec.rb │ │ │ ├── announcement_management_spec.rb │ │ │ ├── announcement_sticky_spec.rb │ │ │ ├── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ ├── forum_post_response_answer_spec.rb │ │ │ │ │ ├── multiple_response_answer_spec.rb │ │ │ │ │ ├── programming_answer_spec.rb │ │ │ │ │ ├── programming_file_submission_answer_spec.rb │ │ │ │ │ └── text_response_answer_spec.rb │ │ │ │ ├── assessment_attempt_spec.rb │ │ │ │ ├── assessment_viewing_spec.rb │ │ │ │ ├── question/ │ │ │ │ │ ├── duplication_spec.rb │ │ │ │ │ ├── forum_post_response_management_spec.rb │ │ │ │ │ ├── multiple_response_management_spec.rb │ │ │ │ │ ├── programming_management_spec.rb │ │ │ │ │ ├── rubric_based_response_management_spec.rb │ │ │ │ │ ├── text_response_management_spec.rb │ │ │ │ │ └── voice_response_management_spec.rb │ │ │ │ ├── skill_branch_management_spec.rb │ │ │ │ ├── skill_management_spec.rb │ │ │ │ ├── submission/ │ │ │ │ │ ├── autograded_spec.rb │ │ │ │ │ ├── download_spec.rb │ │ │ │ │ ├── log_spec.rb │ │ │ │ │ ├── manually_graded_spec.rb │ │ │ │ │ ├── password_protected_and_delayed_publishing_spec.rb │ │ │ │ │ ├── past_answers_spec.rb │ │ │ │ │ ├── programming_answer_comment_spec.rb │ │ │ │ │ └── submissions_spec.rb │ │ │ │ └── submissions_viewing_spec.rb │ │ │ ├── assessment_condition_management_spec.rb │ │ │ ├── assessment_management_spec.rb │ │ │ ├── category_management_spec.rb │ │ │ ├── discussion/ │ │ │ │ └── topic_management_spec.rb │ │ │ ├── duplication_spec.rb │ │ │ ├── enrol_request_management_spec.rb │ │ │ ├── experience_points/ │ │ │ │ ├── disbursement_spec.rb │ │ │ │ └── forum_disbursement_spec.rb │ │ │ ├── experience_points_record_management_spec.rb │ │ │ ├── forum/ │ │ │ │ ├── post_management_spec.rb │ │ │ │ └── topic_management_spec.rb │ │ │ ├── forum_management_spec.rb │ │ │ ├── group_management_spec.rb │ │ │ ├── homepage_spec.rb │ │ │ ├── invitation_management_spec.rb │ │ │ ├── leaderboard_viewing_spec.rb │ │ │ ├── lesson_plan_spec.rb │ │ │ ├── level_management_spec.rb │ │ │ ├── material/ │ │ │ │ ├── files_management_spec.rb │ │ │ │ └── folder_management_spec.rb │ │ │ ├── staff_management_spec.rb │ │ │ ├── staff_statistics_spec.rb │ │ │ ├── student_management_spec.rb │ │ │ ├── students_statistics_spec.rb │ │ │ ├── survey/ │ │ │ │ └── question_management_spec.rb │ │ │ ├── tab_management_spec.rb │ │ │ ├── unread_status_management_spec.rb │ │ │ ├── user_listing_spec.rb │ │ │ ├── user_profile_spec.rb │ │ │ └── video/ │ │ │ ├── submissions_viewing_spec.rb │ │ │ ├── video_management_spec.rb │ │ │ └── video_viewing_and_attempting_spec.rb │ │ ├── course_management_spec.rb │ │ ├── global_announcements_spec.rb │ │ ├── instance_user_role_requests_management_spec.rb │ │ ├── rag_wise/ │ │ │ ├── forum_post_spec.rb │ │ │ ├── forum_topic_spec.rb │ │ │ ├── rag_wise_settings_form_spec.rb │ │ │ ├── rag_wise_settings_forum_spec.rb │ │ │ ├── rag_wise_settings_material_spec.rb │ │ │ └── vector.json │ │ ├── system/ │ │ │ └── admin/ │ │ │ ├── announcement_management_spec.rb │ │ │ ├── components_settings_spec.rb │ │ │ ├── course_management_spec.rb │ │ │ ├── instance/ │ │ │ │ ├── course_management_spec.rb │ │ │ │ ├── instance_announcement_management_spec.rb │ │ │ │ └── user_management_spec.rb │ │ │ ├── instance_management_spec.rb │ │ │ └── user_management_spec.rb │ │ └── user/ │ │ ├── email_management_spec.rb │ │ ├── profile_edit_spec.rb │ │ └── profile_spec.rb │ ├── fixtures/ │ │ ├── activity_mailer/ │ │ │ ├── test_email.html.slim │ │ │ └── test_email.text.erb │ │ ├── course/ │ │ │ ├── codaveri/ │ │ │ │ ├── codaveri_evaluation_test.json │ │ │ │ ├── codaveri_feedback_test.json │ │ │ │ ├── codaveri_problem_generation_java_test.json │ │ │ │ ├── codaveri_problem_generation_python_test.json │ │ │ │ ├── codaveri_problem_generation_r_test.json │ │ │ │ └── codaveri_problem_management_test.json │ │ │ ├── invitation_empty.csv │ │ │ ├── invitation_fuzzy_roles_phantom_timeline.csv │ │ │ ├── invitation_invalid.csv │ │ │ ├── invitation_invalid_email.csv │ │ │ ├── invitation_no_header.csv │ │ │ ├── invitation_whitespace.csv │ │ │ ├── invitation_with_utf_bom.csv │ │ │ ├── koditsu/ │ │ │ │ ├── koditsu_assessment_failure_response_test.json │ │ │ │ ├── koditsu_assessment_success_response_test.json │ │ │ │ ├── koditsu_invitation_some_duplicate_response_test.json │ │ │ │ ├── koditsu_invitation_some_error_response_test.json │ │ │ │ ├── koditsu_invitation_success_response_test.json │ │ │ │ ├── koditsu_question_failure_response_test.json │ │ │ │ ├── koditsu_question_success_response_test.json │ │ │ │ └── koditsu_submissions_response.json │ │ │ ├── programming_java_test_report.xml │ │ │ ├── programming_java_test_report_newlines.xml │ │ │ ├── programming_messages_test_report.xml │ │ │ ├── programming_multiple_test_suite_report.xml │ │ │ ├── programming_other_public_test_report.xml │ │ │ ├── programming_private_test_report.xml │ │ │ ├── programming_properties_test_report.xml │ │ │ ├── programming_public_test_report.xml │ │ │ ├── programming_single_test_suite_report.xml │ │ │ ├── programming_single_test_suite_report_meta.xml │ │ │ ├── programming_single_test_suite_report_pass.xml │ │ │ └── programming_single_test_suite_report_test_case_meta.xml │ │ ├── files/ │ │ │ ├── one-page-word-document.docx │ │ │ ├── template_file │ │ │ ├── template_file_2 │ │ │ ├── template_ipynb.ipynb │ │ │ ├── text.txt │ │ │ └── text2.txt │ │ ├── libraries/ │ │ │ ├── componentize/ │ │ │ │ └── test_component.rb │ │ │ ├── inherited_nested_layouts/ │ │ │ │ ├── content.html │ │ │ │ └── layouts/ │ │ │ │ └── test_layout.html.erb │ │ │ ├── render_partial_with_prefix_suffix/ │ │ │ │ ├── _base.html │ │ │ │ ├── _base_suffix.html │ │ │ │ └── _prefix_base.html │ │ │ └── render_within_layout/ │ │ │ ├── content.html.erb │ │ │ ├── inner_layout.html.erb │ │ │ └── layouts/ │ │ │ └── outer_layout.html.erb │ │ └── parallel_runtime_rspec.log │ ├── helpers/ │ │ ├── application_formatters_helper_spec.rb │ │ ├── application_notifications_helper_spec.rb │ │ ├── consolidated_opening_reminder_mailer_helper_spec.rb │ │ ├── course/ │ │ │ ├── achievement/ │ │ │ │ └── controller_helper_spec.rb │ │ │ ├── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ └── programming_test_case_helper.rb │ │ │ │ ├── question/ │ │ │ │ │ └── programming_helper_spec.rb │ │ │ │ └── submissions_helper_spec.rb │ │ │ ├── condition/ │ │ │ │ └── conditions_helper_spec.rb │ │ │ ├── controller_helper_spec.rb │ │ │ ├── leaderboard_helper_spec.rb │ │ │ └── material/ │ │ │ └── folders_helper_spec.rb │ │ └── route_overrides_helper_spec.rb │ ├── jobs/ │ │ ├── application_job_spec.rb │ │ ├── course/ │ │ │ ├── announcement/ │ │ │ │ └── opening_reminder_job_spec.rb │ │ │ ├── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ ├── auto_grading_job_spec.rb │ │ │ │ │ ├── programming_codaveri_feedback_job_spec.rb │ │ │ │ │ └── reduce_priority_auto_grading_job_spec.rb │ │ │ │ ├── closing_reminder_job_spec.rb │ │ │ │ ├── plagiarism_check_job_spec.rb │ │ │ │ ├── question/ │ │ │ │ │ └── programming_import_job_spec.rb │ │ │ │ └── submission/ │ │ │ │ ├── auto_feedback_job_spec.rb │ │ │ │ ├── auto_grading_job_spec.rb │ │ │ │ ├── csv_download_job_spec.rb │ │ │ │ └── zip_download_job_spec.rb │ │ │ ├── conditionals/ │ │ │ │ ├── conditional_satisfiability_evaluation_job_spec.rb │ │ │ │ └── coursewide_conditional_satisfiability_evaluation_job.rb │ │ │ ├── duplication_job_spec.rb │ │ │ ├── experience_points_download_job_spec.rb │ │ │ ├── lesson_plan/ │ │ │ │ └── coursewide_personalized_timeline_update_job_spec.rb │ │ │ ├── material/ │ │ │ │ └── zip_download_job_spec.rb │ │ │ ├── survey/ │ │ │ │ ├── closing_reminder_job_spec.rb │ │ │ │ └── survey_download_job_spec.rb │ │ │ ├── user_deletion_job_spec.rb │ │ │ └── video/ │ │ │ └── closing_reminder_job_spec.rb │ │ ├── mail_delivery_job_spec.rb │ │ └── video_statistic_update_job_spec.rb │ ├── libraries/ │ │ ├── activity_wrapper_spec.rb │ │ ├── acts_as_condition_spec.rb │ │ ├── acts_as_conditional_spec.rb │ │ ├── acts_as_duplication_traceable.rb │ │ ├── acts_as_exp_record_spec.rb │ │ ├── acts_as_lesson_plan_item_spec.rb │ │ ├── componentize_spec.rb │ │ ├── course/ │ │ │ ├── assessment/ │ │ │ │ ├── java/ │ │ │ │ │ └── java_programming_test_case_report_spec.rb │ │ │ │ ├── programming_package_spec.rb │ │ │ │ └── programming_test_case_report_spec.rb │ │ │ └── conditional/ │ │ │ └── user_satisfiability_graph_spec.rb │ │ ├── coursemology_docker_container_spec.rb │ │ ├── database_event_spec.rb │ │ ├── date_time_helpers.rb │ │ ├── duplicator_spec.rb │ │ ├── filename_validator_spec.rb │ │ ├── has_many_inverse_through_spec.rb │ │ ├── has_one_many_attachments_spec.rb │ │ ├── materials_spec.rb │ │ ├── pathname_helpers_spec.rb │ │ ├── polyglot_spec.rb │ │ ├── render_partial_with_prefix_suffix_spec.rb │ │ ├── send_file_spec.rb │ │ ├── time_bounded_record_spec.rb │ │ └── trackable_job_spec.rb │ ├── mailers/ │ │ ├── activity_mailer_spec.rb │ │ ├── consolidated_opening_reminder_mailer_spec.rb │ │ ├── course/ │ │ │ └── mailer_spec.rb │ │ ├── instance/ │ │ │ └── mailer_spec.rb │ │ └── previews/ │ │ └── activity_mailer_preview.rb │ ├── models/ │ │ ├── activity_spec.rb │ │ ├── attachment_reference_spec.rb │ │ ├── attachment_spec.rb │ │ ├── course/ │ │ │ ├── achievement_ability_spec.rb │ │ │ ├── achievement_spec.rb │ │ │ ├── announcement_ability_spec.rb │ │ │ ├── announcement_spec.rb │ │ │ ├── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ ├── auto_grading_spec.rb │ │ │ │ │ ├── forum_post_response_spec.rb │ │ │ │ │ ├── forum_post_spec.rb │ │ │ │ │ ├── multiple_response_option_spec.rb │ │ │ │ │ ├── multiple_response_spec.rb │ │ │ │ │ ├── programming_ability_spec.rb │ │ │ │ │ ├── programming_auto_grading_spec.rb │ │ │ │ │ ├── programming_auto_grading_test_result_spec.rb │ │ │ │ │ ├── programming_file_annotation_spec.rb │ │ │ │ │ ├── programming_file_spec.rb │ │ │ │ │ ├── programming_spec.rb │ │ │ │ │ ├── scribing_scribble_spec.rb │ │ │ │ │ ├── scribing_spec.rb │ │ │ │ │ ├── text_response_spec.rb │ │ │ │ │ └── voice_response_spec.rb │ │ │ │ ├── answer_spec.rb │ │ │ │ ├── assessment_ability_spec.rb │ │ │ │ ├── category_spec.rb │ │ │ │ ├── duplication_spec.rb │ │ │ │ ├── live_feedback_spec.rb │ │ │ │ ├── plagiarism_check_spec.rb │ │ │ │ ├── question/ │ │ │ │ │ ├── forum_post_response_spec.rb │ │ │ │ │ ├── multiple_response_option_spec.rb │ │ │ │ │ ├── multiple_response_spec.rb │ │ │ │ │ ├── programming_spec.rb │ │ │ │ │ ├── programming_template_file_spec.rb │ │ │ │ │ ├── programming_test_case_spec.rb │ │ │ │ │ ├── rubric_based_response_spec.rb │ │ │ │ │ ├── scribing_spec.rb │ │ │ │ │ ├── text_response_comprehension_group_spec.rb │ │ │ │ │ ├── text_response_comprehension_point_spec.rb │ │ │ │ │ ├── text_response_comprehension_solution_spec.rb │ │ │ │ │ ├── text_response_solution_spec.rb │ │ │ │ │ ├── text_response_spec.rb │ │ │ │ │ └── voice_response_spec.rb │ │ │ │ ├── question_spec.rb │ │ │ │ ├── skill_ability_spec.rb │ │ │ │ ├── skill_branch_spec.rb │ │ │ │ ├── skill_spec.rb │ │ │ │ ├── submission/ │ │ │ │ │ └── log_spec.rb │ │ │ │ ├── submission_spec.rb │ │ │ │ └── tab_spec.rb │ │ │ ├── assessment_spec.rb │ │ │ ├── condition/ │ │ │ │ ├── achievement_ability_spec.rb │ │ │ │ ├── achievement_spec.rb │ │ │ │ ├── assessment_ability_spec.rb │ │ │ │ ├── assessment_spec.rb │ │ │ │ ├── level_ability_spec.rb │ │ │ │ ├── level_spec.rb │ │ │ │ ├── survey_ability_spec.rb │ │ │ │ ├── survey_spec.rb │ │ │ │ ├── video_ability_spec.rb │ │ │ │ └── video_spec.rb │ │ │ ├── condition_spec.rb │ │ │ ├── discussion/ │ │ │ │ ├── post/ │ │ │ │ │ ├── codaveri_feedback_spec.rb │ │ │ │ │ └── vote_spec.rb │ │ │ │ ├── post_spec.rb │ │ │ │ ├── topic/ │ │ │ │ │ └── subscription_spec.rb │ │ │ │ └── topic_spec.rb │ │ │ ├── enrol_request_spec.rb │ │ │ ├── experience_points/ │ │ │ │ └── forum_disbursement_spec.rb │ │ │ ├── experience_points_record_ability_spec.rb │ │ │ ├── experience_points_record_spec.rb │ │ │ ├── forum/ │ │ │ │ ├── search_spec.rb │ │ │ │ ├── subscription_spec.rb │ │ │ │ ├── topic/ │ │ │ │ │ └── view_spec.rb │ │ │ │ ├── topic_ability_spec.rb │ │ │ │ └── topic_spec.rb │ │ │ ├── forum_ability_spec.rb │ │ │ ├── forum_spec.rb │ │ │ ├── group_ability_spec.rb │ │ │ ├── group_spec.rb │ │ │ ├── group_user_spec.rb │ │ │ ├── learning_map_spec.rb │ │ │ ├── learning_rate_record_spec.rb │ │ │ ├── lesson_plan/ │ │ │ │ ├── lesson_plan_event_ability_spec.rb │ │ │ │ ├── lesson_plan_item_ability_spec.rb │ │ │ │ ├── lesson_plan_item_spec.rb │ │ │ │ ├── lesson_plan_milestone_ability_spec.rb │ │ │ │ ├── lesson_plan_todo_ability_spec.rb │ │ │ │ └── lesson_plan_todo_spec.rb │ │ │ ├── level_ability_spec.rb │ │ │ ├── level_spec.rb │ │ │ ├── material/ │ │ │ │ ├── folder_ability_spec.rb │ │ │ │ └── folder_spec.rb │ │ │ ├── material_ability_spec.rb │ │ │ ├── material_spec.rb │ │ │ ├── monitoring/ │ │ │ │ ├── heartbeat_spec.rb │ │ │ │ ├── monitor_spec.rb │ │ │ │ └── session_spec.rb │ │ │ ├── monitoring_ability_spec.rb │ │ │ ├── notification_spec.rb │ │ │ ├── personal_time_spec.rb │ │ │ ├── question_assessment_spec.rb │ │ │ ├── reference_time_spec.rb │ │ │ ├── reference_timeline_ability_spec.rb │ │ │ ├── reference_timeline_spec.rb │ │ │ ├── requirement_spec.rb │ │ │ ├── settings/ │ │ │ │ ├── assessments_component_spec.rb │ │ │ │ ├── codaveri_component_spec.rb │ │ │ │ ├── email_spec.rb │ │ │ │ ├── survey_component_spec.rb │ │ │ │ └── videos_component_spec.rb │ │ │ ├── statistics_ability_spec.rb │ │ │ ├── survey/ │ │ │ │ ├── answer_option_spec.rb │ │ │ │ ├── answer_spec.rb │ │ │ │ ├── question_option_spec.rb │ │ │ │ ├── question_spec.rb │ │ │ │ ├── response_spec.rb │ │ │ │ ├── section_spec.rb │ │ │ │ └── survey_ability_spec.rb │ │ │ ├── survey_spec.rb │ │ │ ├── user_achievement_spec.rb │ │ │ ├── user_email_unsubscription_spec.rb │ │ │ ├── user_invitation_spec.rb │ │ │ ├── video/ │ │ │ │ ├── event_spec.rb │ │ │ │ ├── session_spec.rb │ │ │ │ ├── submission_spec.rb │ │ │ │ ├── tab_spec.rb │ │ │ │ ├── topic_spec.rb │ │ │ │ └── video_ability_spec.rb │ │ │ └── video_spec.rb │ │ ├── course_ability_spec.rb │ │ ├── course_spec.rb │ │ ├── course_user_ability_spec.rb │ │ ├── course_user_spec.rb │ │ ├── duplication_ability_spec.rb │ │ ├── duplication_traceable/ │ │ │ ├── assessment_spec.rb │ │ │ └── course_spec.rb │ │ ├── duplication_traceable_spec.rb │ │ ├── generic_announcement_ability_spec.rb │ │ ├── generic_announcement_spec.rb │ │ ├── instance/ │ │ │ ├── announcement_ability_spec.rb │ │ │ ├── announcement_spec.rb │ │ │ ├── user_invitation_spec.rb │ │ │ └── user_role_request_spec.rb │ │ ├── instance_ability_spec.rb │ │ ├── instance_spec.rb │ │ ├── instance_users_spec.rb │ │ ├── system/ │ │ │ ├── announcement_spec.rb │ │ │ └── system_announcement_ability_spec.rb │ │ ├── user/ │ │ │ ├── email_ability_spec.rb │ │ │ ├── email_spec.rb │ │ │ └── identity_spec.rb │ │ ├── user_notification_spec.rb │ │ └── user_spec.rb │ ├── notifiers/ │ │ ├── consolidated_opening_reminder_notifier_spec.rb │ │ ├── course/ │ │ │ ├── achievement_notifier_spec.rb │ │ │ ├── announcement_notifier_spec.rb │ │ │ ├── assessment/ │ │ │ │ ├── answer/ │ │ │ │ │ └── comment_notifier_spec.rb │ │ │ │ └── submission_question/ │ │ │ │ └── comment_notifier_spec.rb │ │ │ ├── assessment_notifier_spec.rb │ │ │ ├── forum/ │ │ │ │ ├── post_notifier_spec.rb │ │ │ │ └── topic_notifier_spec.rb │ │ │ ├── level_notifier_spec.rb │ │ │ └── video_notifier_spec.rb │ │ └── notifier/ │ │ └── base_spec.rb │ ├── rails_helper.rb │ ├── services/ │ │ ├── course/ │ │ │ ├── announcement/ │ │ │ │ └── reminder_service_spec.rb │ │ │ ├── assessment/ │ │ │ │ ├── achievement_preload_service_spec.rb │ │ │ │ ├── answer/ │ │ │ │ │ ├── ai_generated_post_service_spec.rb │ │ │ │ │ ├── auto_grading_service_spec.rb │ │ │ │ │ ├── multiple_response_auto_grading_service_spec.rb │ │ │ │ │ ├── programming_auto_grading_service_spec.rb │ │ │ │ │ ├── programming_codaveri_auto_grading_service_spec.rb │ │ │ │ │ ├── programming_codaveri_feedback_service_spec.rb │ │ │ │ │ ├── rubric_auto_grading_service_spec.rb │ │ │ │ │ ├── rubric_based_response/ │ │ │ │ │ │ └── answer_adapter_spec.rb │ │ │ │ │ ├── text_response_auto_grading_service_spec.rb │ │ │ │ │ └── text_response_comprehension_auto_grading_service_spec.rb │ │ │ │ ├── monitoring_service_spec.rb │ │ │ │ ├── programming_codaveri_evaluation_service_spec.rb │ │ │ │ ├── programming_evaluation_service_spec.rb │ │ │ │ ├── question/ │ │ │ │ │ ├── answers_evaluation_service_spec.rb │ │ │ │ │ ├── codaveri_problem_generation_service_spec.rb │ │ │ │ │ ├── mrq_generation_service_spec.rb │ │ │ │ │ ├── programming_codaveri/ │ │ │ │ │ │ ├── programming_codaveri_package_service_spec.rb │ │ │ │ │ │ └── python/ │ │ │ │ │ │ └── python_package_service_spec.rb │ │ │ │ │ ├── programming_codaveri_service_spec.rb │ │ │ │ │ ├── programming_import_service_spec.rb │ │ │ │ │ └── rubric_based_response/ │ │ │ │ │ └── rubric_adapter_spec.rb │ │ │ │ ├── reminder_service_spec.rb │ │ │ │ └── submission/ │ │ │ │ ├── auto_grading_service_spec.rb │ │ │ │ ├── csv_download_service_spec.rb │ │ │ │ ├── monitoring_service_spec.rb │ │ │ │ ├── ssid_plagiarism_service_spec.rb │ │ │ │ ├── ssid_zip_download_service_spec.rb │ │ │ │ ├── statistics_download_service_spec.rb │ │ │ │ └── zip_download_service_spec.rb │ │ │ ├── conditional/ │ │ │ │ ├── conditional_satisfiability_evaluation_service_spec.rb │ │ │ │ └── satisfiability_graph_build_service_spec.rb │ │ │ ├── discussion/ │ │ │ │ └── post/ │ │ │ │ └── codaveri_feedback_rating_service_spec.rb │ │ │ ├── duplication/ │ │ │ │ ├── base_service_spec.rb │ │ │ │ ├── course_duplication_service_spec.rb │ │ │ │ └── object_duplication_service_spec.rb │ │ │ ├── experience_points_download_service_spec.rb │ │ │ ├── material/ │ │ │ │ └── zip_download_service_spec.rb │ │ │ ├── reference_time/ │ │ │ │ └── time_offset_service_spec.rb │ │ │ ├── rubric/ │ │ │ │ └── llm_service_spec.rb │ │ │ ├── skills_mastery_preload_service_spec.rb │ │ │ ├── ssid_folder_service_spec.rb │ │ │ ├── statistics/ │ │ │ │ └── assessment_score_summary_download_service_spec.rb │ │ │ ├── survey/ │ │ │ │ ├── reminder_service_spec.rb │ │ │ │ └── survey_download_spec.rb │ │ │ ├── user/ │ │ │ │ └── instance_preload_service_spec.rb │ │ │ ├── user_invitation_service_spec.rb │ │ │ ├── user_registration_service_spec.rb │ │ │ └── video/ │ │ │ └── reminder_service_spec.rb │ │ ├── instance/ │ │ │ └── user_invitation_service_spec.rb │ │ └── rag_wise/ │ │ ├── chunking_service_spec.rb │ │ └── response_evaluation_service_spec.rb │ ├── spec_helper.rb │ ├── support/ │ │ ├── active_job.rb │ │ ├── acts_as_tenant.rb │ │ ├── application_mailer.rb │ │ ├── authentication_performers.rb │ │ ├── bullet.rb │ │ ├── capybara.rb │ │ ├── controller_exceptions.rb │ │ ├── controller_helpers.rb │ │ ├── custom_matchers.rb │ │ ├── devise.rb │ │ ├── factory_bot.rb │ │ ├── frontend.rb │ │ ├── have_content_tag_for_matcher.rb │ │ ├── i18n.rb │ │ ├── langchain.rb │ │ ├── migration.rb │ │ ├── reference_timelines_helper.rb │ │ ├── rspec_html_matchers.rb │ │ ├── settings_on_rails.rb │ │ ├── shoulda_matchers.rb │ │ ├── stubs/ │ │ │ ├── codaveri/ │ │ │ │ ├── _root.rb │ │ │ │ ├── create_problem_api_stubs.rb │ │ │ │ ├── evaluate_api_stubs.rb │ │ │ │ ├── feedback_api_stubs.rb │ │ │ │ └── feedback_rating_api_stubs.rb │ │ │ ├── course/ │ │ │ │ └── assessment/ │ │ │ │ └── stubbed_programming_evaluation_service.rb │ │ │ ├── langchain/ │ │ │ │ ├── _root.rb │ │ │ │ └── llm_stubs.rb │ │ │ └── ssid/ │ │ │ ├── _root.rb │ │ │ └── api_stubs.rb │ │ └── userstamp.rb │ └── uploaders/ │ ├── file_uploader_spec.rb │ └── image_uploader_spec.rb └── tests/ ├── README.md ├── coverage.ts ├── declaration.d.ts ├── helpers.ts ├── package.json ├── playwright.config.ts ├── tests/ │ ├── courses/ │ │ └── registration.spec.ts │ └── users/ │ ├── password-management.spec.ts │ ├── sign-in.spec.ts │ └── sign-up.spec.ts └── tsconfig.json