<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Apimbert</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Apimbert"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Apimbert"/>
	<updated>2026-06-26T23:40:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167419</id>
		<title>CSC/ECE 517 Fall 2025 - E2563. Review tableau</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167419"/>
		<updated>2025-12-03T05:00:32Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains information about E2563.Review calibration, which was a project in CSC517 Fall 2025. &lt;br /&gt;
&lt;br /&gt;
Please see below for a description of the design of the project.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Expertiza is an open-source application based on the Ruby on Rails framework. Instructors can create and manage assignments, and students can form teams for each one, as well as peer review other teams’ work. The frontend is written in TypeScript, and the backend is written in Ruby. The current codebase can be found here (FRONTEND, BACKEND), as well as in the external info section below. This work is part of an ongoing reimplementation effort of the following old Expertiza repository.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Instructors need to be able to view the responses made by a student during rounds of peer review in order to accurately assign a grade for that review. To streamline this process, our goal is to design and implement a dedicated page that allows instructors to view all grading reviews submitted by a given student. This page, named the '''review tableau page''', should organize and present the reviews in a clear, structured, and accessible manner. Specifically, the page must display all student grading reviews, grouped by assignment, round, and topic, with each group being rendered as a separate table.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
=== Core Requirements ===&lt;br /&gt;
* A user with the '''Instructor''' role can view the review tableau(s) for a given student from a dedicated page (the ‘tableau page’) of the Expertiza site.&lt;br /&gt;
* The tableau page can be accessed by clicking a “Summary” link under the “Reviews Done” column when viewing students in the instructor’s rewiew-grading dashboard.&lt;br /&gt;
* The tableau page has the following contents:&lt;br /&gt;
** A header, displaying the text “Review by Student, “ followed by the student’s ID.&lt;br /&gt;
** Individual tables (‘tableaus’), each corresponding to a round of reviewing from a specific assignment with a specific rubric used during the review.&lt;br /&gt;
*** Tableaus are displayed in a single column on the tableau page.&lt;br /&gt;
*** Tableaus are sorted first by the '''round in which the review was made''', and then finally by the rubric used for review. This ensures that topics made chronologically close together are displayed sequentially. In the usual case, where the '''same''' rubric is used for all submissions, there will be only a single tableau. If rubric varies by topics, there may be multiple tableaus, reflecting the fact that the rubric may be different for different submissions reviewed by this reviewer.&lt;br /&gt;
* An individual tableau has the following contents:&lt;br /&gt;
** A label for the course number, semester, and year in which the review was made.&lt;br /&gt;
** A label for the assignment for which the review was made.&lt;br /&gt;
** A label for the round number for which the review was made.&lt;br /&gt;
** The primary table, which contains:&lt;br /&gt;
*** A highlighted column, populated with questions asked on the rubric.&lt;br /&gt;
*** An arbitrary number of additional columns, each corresponding to a review for that assignment and round that uses the rubric. Each of these is labelled after the team being reviewed and annotated with the date/time the review was submitted.&lt;br /&gt;
**** Each row of these columns is populated with the student’s responses for the corresponding review and question.&lt;br /&gt;
** Note that a single tableau records the results of all reviews made using the same rubric for a particular round. If a student provided reviews for topics (frontend, backend, full stack) with varying rubrics, then a tableau will be created for each type of rubric filled out.&lt;br /&gt;
* Creating a backend API that can retrieve the student’s grading reviews and sort them per each assignment, round, and topic. ''(Functional and local development)''&lt;br /&gt;
&lt;br /&gt;
=== Design Requirements ===&lt;br /&gt;
[[File:Sample_of_the_review_tableau_layout.png|500px]]&lt;br /&gt;
* Follow the same design guidelines as reimplementation-front-end (https://github.com/AnvithaReddyGutha/reimplementation-front-end/blob/main/design_document.md).&lt;br /&gt;
* Use the same widgets (circles with numbers inside) that are used on the Response views.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
There are three key components to the implementation of the review tableau:&lt;br /&gt;
* A new front end page, &amp;lt;code&amp;gt;ReviewTableau.tsx&amp;lt;/code&amp;gt;, which consists of the view shown to the user accessing the review records.&lt;br /&gt;
* A new front end service, &amp;lt;code&amp;gt;gradesService.ts&amp;lt;/code&amp;gt;, which converts the results of API calls into parameters for the view.&lt;br /&gt;
* A new back end API GET endpoint in &amp;lt;code&amp;gt;grades_controller.rb&amp;lt;/code&amp;gt;, called &amp;lt;code&amp;gt;get_review_tableau_data&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The intended flow, once integration is complete with [https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2568._Finish_tabbed_view_for_Assignments,_including_Topics_and_Calibration_tabs E2568's work], is for admins and instructors to view a dashboard of participants for a given assignment, select one participant whose reviews are to be displayed, and then the review tableau page is loaded with the appropriate information. Because this dashboard does not yet exist, and to avoid redundant work, we have left the review tableau page inaccessible except via manually inputting the corresponding URL. This is for demonstration purposes: authorization still occurs as if the current user had requested the tableau.&lt;br /&gt;
&lt;br /&gt;
The get_review_tableau_data endpoint accepts two parameters: an assignment_id and a participant_id. The Assignment identifier is used to search the &amp;lt;code&amp;gt;AssignmentQuestionnaires&amp;lt;/code&amp;gt; table for all Questionnaires corresponding to each round of review in the target Assignment. The corresponding Items (&amp;quot;questions&amp;quot; on a standard rubric) are retrieved from the &amp;lt;code&amp;gt;Items&amp;lt;/code&amp;gt; table, and hashed with their identifiers into the resulting JSON. The function then searches the &amp;lt;code&amp;gt;ResponseMaps&amp;lt;/code&amp;gt; table for all Responses made for the target assignment by the target participant (the reviewer), and cross-references them with the &amp;lt;code&amp;gt;Responses&amp;lt;/code&amp;gt; table to obtain the round in which the Response was submitted. Finally, the &amp;lt;code&amp;gt;Answers&amp;lt;/code&amp;gt; table is consulted for each response identifier, and the value / comment associated with each answer is stored in the same hash. The JSON output is received by the front end and displayed in tables, one for each round.&lt;br /&gt;
&lt;br /&gt;
[[File:e2563_tableau_api_logic.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE: The current implementation assumes that there is only one Questionnaire associated with each round of a particular Assignment. Although association of several rubrics within a single round of review is an intended feature, and unused support exists for it in both the front end and back end components being introduced, there is currently no way to disambiguate which Response objects correspond to which associated Questionnaires outside of looking at the round number. As such, the feature as described cannot be implemented until changes are made to the database as part of work by the &amp;quot;multiple rubrics per topic&amp;quot; team(s).'''&lt;br /&gt;
&lt;br /&gt;
The API payload adheres to the following structure, before being read and turned into parameters usable by the front end view:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;responses_by_round&amp;quot;: {&lt;br /&gt;
        &amp;quot;1&amp;quot;: {&lt;br /&gt;
            &amp;quot;min_answer_value&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;max_answer_value&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;items&amp;quot;: {&lt;br /&gt;
                &amp;quot;1&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 1&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Checkbox&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            1,&lt;br /&gt;
                            3,&lt;br /&gt;
                            4&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Auto-generated answer 1&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 1: The response meets expectations. A small suggestion for criterion 1: be more specific about implementation details.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 1: Strong submission — add more explanation for criterion 1 to increase clarity.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;2&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 2&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Scale&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            4,&lt;br /&gt;
                            4,&lt;br /&gt;
                            5&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Auto-generated answer 2&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 1: Strong submission — add more explanation for criterion 2 to increase clarity.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 1: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 2.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;min_answer_value&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;max_answer_value&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;items&amp;quot;: {&lt;br /&gt;
                &amp;quot;1&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 1&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Checkbox&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            3,&lt;br /&gt;
                            3,&lt;br /&gt;
                            4&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Round 2: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 1.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 2: The response meets expectations. A small suggestion for criterion 1: be more specific about implementation details.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 2: Strong submission — add more explanation for criterion 1 to increase clarity.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;2&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 2&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Scale&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            3,&lt;br /&gt;
                            4,&lt;br /&gt;
                            5&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Round 2: Good work on criterion 2. Clear and well-structured.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 2: Strong submission — add more explanation for criterion 2 to increase clarity.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 2: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 2.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;3&amp;quot;: {&lt;br /&gt;
            &amp;quot;min_answer_value&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;max_answer_value&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;items&amp;quot;: {&lt;br /&gt;
                &amp;quot;1&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 1&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Checkbox&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            5,&lt;br /&gt;
                            3,&lt;br /&gt;
                            4&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Round 3: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 1.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 3: The response meets expectations. A small suggestion for criterion 1: be more specific about implementation details.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 3: Strong submission — add more explanation for criterion 1 to increase clarity.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;2&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 2&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Scale&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            5,&lt;br /&gt;
                            4,&lt;br /&gt;
                            5&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Round 3: Good work on criterion 2. Clear and well-structured.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 3: Strong submission — add more explanation for criterion 2 to increase clarity.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 3: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 2.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;participant&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;user_id&amp;quot;: 4,&lt;br /&gt;
        &amp;quot;user_name&amp;quot;: &amp;quot;alton_mckenzie&amp;quot;,&lt;br /&gt;
        &amp;quot;full_name&amp;quot;: &amp;quot;Prof. Tyler Keebler&amp;quot;,&lt;br /&gt;
        &amp;quot;handle&amp;quot;: &amp;quot;alton_mckenzie&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;assignment&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;ponder&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The finalized UI looks like this:&lt;br /&gt;
[[File:results_e2563.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
# Login to Expertiza with an admin or instructor account.&lt;br /&gt;
# If the review dashboard exists:&lt;br /&gt;
## Navigate to the review dashboard for the desired assignment. Scroll to the desired participant, and click on the “summary” link.&lt;br /&gt;
# If the review dashboard is unimplemented:&lt;br /&gt;
## Navigate directly to http://localhost:3000/review-tableau?assignmentId=1&amp;amp;participantId=1, with both values replaced with the desired assignment/participant identifiers.&lt;br /&gt;
# Confirm that each table contains the items and answers for individual rubrics, arranged by individual responses and separate rounds of review.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
* npm tests for the new get_review_tableau_data endpoint (Review_Tableau.test.tsx).&lt;br /&gt;
** Parameter Validation - Ensures the component properly handles missing required URL parameters (assignmentId and participantId) by displaying an appropriate error message and preventing unnecessary API calls.&lt;br /&gt;
** Successful Data Loading - Verifies the complete data flow from API call to UI rendering, including proper display of reviewer information, course details, assignment name, and round headers.&lt;br /&gt;
** Error Handling - Tests graceful handling of API failures by mocking network errors and confirming error messages are displayed while hiding the main content.&lt;br /&gt;
** Loading States - Validates that loading indicators appear during data fetch operations and disappear once data is loaded, ensuring good user experience during async operations.&lt;br /&gt;
** Question Types - Tests the component's ability to handle multiple question types (Scale, Criterion, Dropdown) within a single rubric, verifying proper data transformation and rendering of mixed question formats.&lt;br /&gt;
== Team Members ==&lt;br /&gt;
Adam Imbert (apimbert)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Bestin Lalu (blalu)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Yumo Shen (jshen23)&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Results_e2563.png&amp;diff=167418</id>
		<title>File:Results e2563.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Results_e2563.png&amp;diff=167418"/>
		<updated>2025-12-03T04:59:41Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167417</id>
		<title>CSC/ECE 517 Fall 2025 - E2563. Review tableau</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167417"/>
		<updated>2025-12-03T04:57:57Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains information about E2563.Review calibration, which was a project in CSC517 Fall 2025. &lt;br /&gt;
&lt;br /&gt;
Please see below for a description of the design of the project.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Expertiza is an open-source application based on the Ruby on Rails framework. Instructors can create and manage assignments, and students can form teams for each one, as well as peer review other teams’ work. The frontend is written in TypeScript, and the backend is written in Ruby. The current codebase can be found here (FRONTEND, BACKEND), as well as in the external info section below. This work is part of an ongoing reimplementation effort of the following old Expertiza repository.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Instructors need to be able to view the responses made by a student during rounds of peer review in order to accurately assign a grade for that review. To streamline this process, our goal is to design and implement a dedicated page that allows instructors to view all grading reviews submitted by a given student. This page, named the '''review tableau page''', should organize and present the reviews in a clear, structured, and accessible manner. Specifically, the page must display all student grading reviews, grouped by assignment, round, and topic, with each group being rendered as a separate table.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
=== Core Requirements ===&lt;br /&gt;
* A user with the '''Instructor''' role can view the review tableau(s) for a given student from a dedicated page (the ‘tableau page’) of the Expertiza site.&lt;br /&gt;
* The tableau page can be accessed by clicking a “Summary” link under the “Reviews Done” column when viewing students in the instructor’s rewiew-grading dashboard.&lt;br /&gt;
* The tableau page has the following contents:&lt;br /&gt;
** A header, displaying the text “Review by Student, “ followed by the student’s ID.&lt;br /&gt;
** Individual tables (‘tableaus’), each corresponding to a round of reviewing from a specific assignment with a specific rubric used during the review.&lt;br /&gt;
*** Tableaus are displayed in a single column on the tableau page.&lt;br /&gt;
*** Tableaus are sorted first by the '''round in which the review was made''', and then finally by the rubric used for review. This ensures that topics made chronologically close together are displayed sequentially. In the usual case, where the '''same''' rubric is used for all submissions, there will be only a single tableau. If rubric varies by topics, there may be multiple tableaus, reflecting the fact that the rubric may be different for different submissions reviewed by this reviewer.&lt;br /&gt;
* An individual tableau has the following contents:&lt;br /&gt;
** A label for the course number, semester, and year in which the review was made.&lt;br /&gt;
** A label for the assignment for which the review was made.&lt;br /&gt;
** A label for the round number for which the review was made.&lt;br /&gt;
** The primary table, which contains:&lt;br /&gt;
*** A highlighted column, populated with questions asked on the rubric.&lt;br /&gt;
*** An arbitrary number of additional columns, each corresponding to a review for that assignment and round that uses the rubric. Each of these is labelled after the team being reviewed and annotated with the date/time the review was submitted.&lt;br /&gt;
**** Each row of these columns is populated with the student’s responses for the corresponding review and question.&lt;br /&gt;
** Note that a single tableau records the results of all reviews made using the same rubric for a particular round. If a student provided reviews for topics (frontend, backend, full stack) with varying rubrics, then a tableau will be created for each type of rubric filled out.&lt;br /&gt;
* Creating a backend API that can retrieve the student’s grading reviews and sort them per each assignment, round, and topic. ''(Functional and local development)''&lt;br /&gt;
&lt;br /&gt;
=== Design Requirements ===&lt;br /&gt;
[[File:Sample_of_the_review_tableau_layout.png|500px]]&lt;br /&gt;
* Follow the same design guidelines as reimplementation-front-end (https://github.com/AnvithaReddyGutha/reimplementation-front-end/blob/main/design_document.md).&lt;br /&gt;
* Use the same widgets (circles with numbers inside) that are used on the Response views.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
There are three key components to the implementation of the review tableau:&lt;br /&gt;
* A new front end page, &amp;lt;code&amp;gt;ReviewTableau.tsx&amp;lt;/code&amp;gt;, which consists of the view shown to the user accessing the review records.&lt;br /&gt;
* A new front end service, &amp;lt;code&amp;gt;gradesService.ts&amp;lt;/code&amp;gt;, which converts the results of API calls into parameters for the view.&lt;br /&gt;
* A new back end API GET endpoint in &amp;lt;code&amp;gt;grades_controller.rb&amp;lt;/code&amp;gt;, called &amp;lt;code&amp;gt;get_review_tableau_data&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The intended flow, once integration is complete with [https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2568._Finish_tabbed_view_for_Assignments,_including_Topics_and_Calibration_tabs E2568's work], is for admins and instructors to view a dashboard of participants for a given assignment, select one participant whose reviews are to be displayed, and then the review tableau page is loaded with the appropriate information. Because this dashboard does not yet exist, and to avoid redundant work, we have left the review tableau page inaccessible except via manually inputting the corresponding URL. This is for demonstration purposes: authorization still occurs as if the current user had requested the tableau.&lt;br /&gt;
&lt;br /&gt;
The get_review_tableau_data endpoint accepts two parameters: an assignment_id and a participant_id. The Assignment identifier is used to search the &amp;lt;code&amp;gt;AssignmentQuestionnaires&amp;lt;/code&amp;gt; table for all Questionnaires corresponding to each round of review in the target Assignment. The corresponding Items (&amp;quot;questions&amp;quot; on a standard rubric) are retrieved from the &amp;lt;code&amp;gt;Items&amp;lt;/code&amp;gt; table, and hashed with their identifiers into the resulting JSON. The function then searches the &amp;lt;code&amp;gt;ResponseMaps&amp;lt;/code&amp;gt; table for all Responses made for the target assignment by the target participant (the reviewer), and cross-references them with the &amp;lt;code&amp;gt;Responses&amp;lt;/code&amp;gt; table to obtain the round in which the Response was submitted. Finally, the &amp;lt;code&amp;gt;Answers&amp;lt;/code&amp;gt; table is consulted for each response identifier, and the value / comment associated with each answer is stored in the same hash. The JSON output is received by the front end and displayed in tables, one for each round.&lt;br /&gt;
&lt;br /&gt;
[[File:e2563_tableau_api_logic.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE: The current implementation assumes that there is only one Questionnaire associated with each round of a particular Assignment. Although association of several rubrics within a single round of review is an intended feature, and unused support exists for it in both the front end and back end components being introduced, there is currently no way to disambiguate which Response objects correspond to which associated Questionnaires outside of looking at the round number. As such, the feature as described cannot be implemented until changes are made to the database as part of work by the &amp;quot;multiple rubrics per topic&amp;quot; team(s).'''&lt;br /&gt;
&lt;br /&gt;
The API payload adheres to the following structure, before being read and turned into parameters usable by the front end view:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;responses_by_round&amp;quot;: {&lt;br /&gt;
        &amp;quot;1&amp;quot;: {&lt;br /&gt;
            &amp;quot;min_answer_value&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;max_answer_value&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;items&amp;quot;: {&lt;br /&gt;
                &amp;quot;1&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 1&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Checkbox&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            1,&lt;br /&gt;
                            3,&lt;br /&gt;
                            4&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Auto-generated answer 1&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 1: The response meets expectations. A small suggestion for criterion 1: be more specific about implementation details.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 1: Strong submission — add more explanation for criterion 1 to increase clarity.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;2&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 2&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Scale&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            4,&lt;br /&gt;
                            4,&lt;br /&gt;
                            5&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Auto-generated answer 2&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 1: Strong submission — add more explanation for criterion 2 to increase clarity.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 1: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 2.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;min_answer_value&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;max_answer_value&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;items&amp;quot;: {&lt;br /&gt;
                &amp;quot;1&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 1&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Checkbox&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            3,&lt;br /&gt;
                            3,&lt;br /&gt;
                            4&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Round 2: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 1.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 2: The response meets expectations. A small suggestion for criterion 1: be more specific about implementation details.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 2: Strong submission — add more explanation for criterion 1 to increase clarity.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;2&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 2&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Scale&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            3,&lt;br /&gt;
                            4,&lt;br /&gt;
                            5&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Round 2: Good work on criterion 2. Clear and well-structured.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 2: Strong submission — add more explanation for criterion 2 to increase clarity.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 2: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 2.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;3&amp;quot;: {&lt;br /&gt;
            &amp;quot;min_answer_value&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;max_answer_value&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;items&amp;quot;: {&lt;br /&gt;
                &amp;quot;1&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 1&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Checkbox&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            5,&lt;br /&gt;
                            3,&lt;br /&gt;
                            4&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Round 3: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 1.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 3: The response meets expectations. A small suggestion for criterion 1: be more specific about implementation details.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 3: Strong submission — add more explanation for criterion 1 to increase clarity.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;2&amp;quot;: {&lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Criterion 2&amp;quot;,&lt;br /&gt;
                    &amp;quot;question_type&amp;quot;: &amp;quot;Scale&amp;quot;,&lt;br /&gt;
                    &amp;quot;answers&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: [&lt;br /&gt;
                            5,&lt;br /&gt;
                            4,&lt;br /&gt;
                            5&lt;br /&gt;
                        ],&lt;br /&gt;
                        &amp;quot;comments&amp;quot;: [&lt;br /&gt;
                            &amp;quot;Round 3: Good work on criterion 2. Clear and well-structured.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 3: Strong submission — add more explanation for criterion 2 to increase clarity.&amp;quot;,&lt;br /&gt;
                            &amp;quot;Reviewer note 3: Well done. One minor improvement is to illustrate your point with a concrete example for criterion 2.&amp;quot;&lt;br /&gt;
                        ]&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;participant&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;user_id&amp;quot;: 4,&lt;br /&gt;
        &amp;quot;user_name&amp;quot;: &amp;quot;alton_mckenzie&amp;quot;,&lt;br /&gt;
        &amp;quot;full_name&amp;quot;: &amp;quot;Prof. Tyler Keebler&amp;quot;,&lt;br /&gt;
        &amp;quot;handle&amp;quot;: &amp;quot;alton_mckenzie&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;assignment&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;ponder&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
# Login to Expertiza with an admin or instructor account.&lt;br /&gt;
# If the review dashboard exists:&lt;br /&gt;
## Navigate to the review dashboard for the desired assignment. Scroll to the desired participant, and click on the “summary” link.&lt;br /&gt;
# If the review dashboard is unimplemented:&lt;br /&gt;
## Navigate directly to http://localhost:3000/review-tableau?assignmentId=1&amp;amp;participantId=1, with both values replaced with the desired assignment/participant identifiers.&lt;br /&gt;
# Confirm that each table contains the items and answers for individual rubrics, arranged by individual responses and separate rounds of review.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
* npm tests for the new get_review_tableau_data endpoint (Review_Tableau.test.tsx).&lt;br /&gt;
** Parameter Validation - Ensures the component properly handles missing required URL parameters (assignmentId and participantId) by displaying an appropriate error message and preventing unnecessary API calls.&lt;br /&gt;
** Successful Data Loading - Verifies the complete data flow from API call to UI rendering, including proper display of reviewer information, course details, assignment name, and round headers.&lt;br /&gt;
** Error Handling - Tests graceful handling of API failures by mocking network errors and confirming error messages are displayed while hiding the main content.&lt;br /&gt;
** Loading States - Validates that loading indicators appear during data fetch operations and disappear once data is loaded, ensuring good user experience during async operations.&lt;br /&gt;
** Question Types - Tests the component's ability to handle multiple question types (Scale, Criterion, Dropdown) within a single rubric, verifying proper data transformation and rendering of mixed question formats.&lt;br /&gt;
== Team Members ==&lt;br /&gt;
Adam Imbert (apimbert)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Bestin Lalu (blalu)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Yumo Shen (jshen23)&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167259</id>
		<title>CSC/ECE 517 Fall 2025 - E2563. Review tableau</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167259"/>
		<updated>2025-12-02T21:18:00Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains information about E2563.Review calibration, which was a project in CSC517 Fall 2025. &lt;br /&gt;
&lt;br /&gt;
Please see below for a description of the design of the project.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Expertiza is an open-source application based on the Ruby on Rails framework. Instructors can create and manage assignments, and students can form teams for each one, as well as peer review other teams’ work. The frontend is written in TypeScript, and the backend is written in Ruby. The current codebase can be found here (FRONTEND, BACKEND), as well as in the external info section below. This work is part of an ongoing reimplementation effort of the following old Expertiza repository.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Instructors need to be able to view the responses made by a student during rounds of peer review in order to accurately assign a grade for that review. To streamline this process, our goal is to design and implement a dedicated page that allows instructors to view all grading reviews submitted by a given student. This page, named the '''review tableau page''', should organize and present the reviews in a clear, structured, and accessible manner. Specifically, the page must display all student grading reviews, grouped by assignment, round, and topic, with each group being rendered as a separate table.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
=== Core Requirements ===&lt;br /&gt;
* A user with the '''Instructor''' role can view the review tableau(s) for a given student from a dedicated page (the ‘tableau page’) of the Expertiza site.&lt;br /&gt;
* The tableau page can be accessed by clicking a “Summary” link under the “Reviews Done” column when viewing students in the instructor’s rewiew-grading dashboard.&lt;br /&gt;
* The tableau page has the following contents:&lt;br /&gt;
** A header, displaying the text “Review by Student, “ followed by the student’s ID.&lt;br /&gt;
** Individual tables (‘tableaus’), each corresponding to a round of reviewing from a specific assignment with a specific rubric used during the review.&lt;br /&gt;
*** Tableaus are displayed in a single column on the tableau page.&lt;br /&gt;
*** Tableaus are sorted first by the '''round in which the review was made''', and then finally by the rubric used for review. This ensures that topics made chronologically close together are displayed sequentially. In the usual case, where the '''same''' rubric is used for all submissions, there will be only a single tableau. If rubric varies by topics, there may be multiple tableaus, reflecting the fact that the rubric may be different for different submissions reviewed by this reviewer.&lt;br /&gt;
* An individual tableau has the following contents:&lt;br /&gt;
** A label for the course number, semester, and year in which the review was made.&lt;br /&gt;
** A label for the assignment for which the review was made.&lt;br /&gt;
** A label for the round number for which the review was made.&lt;br /&gt;
** The primary table, which contains:&lt;br /&gt;
*** A highlighted column, populated with questions asked on the rubric.&lt;br /&gt;
*** An arbitrary number of additional columns, each corresponding to a review for that assignment and round that uses the rubric. Each of these is labelled after the team being reviewed and annotated with the date/time the review was submitted.&lt;br /&gt;
**** Each row of these columns is populated with the student’s responses for the corresponding review and question.&lt;br /&gt;
** Note that a single tableau records the results of all reviews made using the same rubric for a particular round. If a student provided reviews for topics (frontend, backend, full stack) with varying rubrics, then a tableau will be created for each type of rubric filled out.&lt;br /&gt;
* Creating a backend API that can retrieve the student’s grading reviews and sort them per each assignment, round, and topic. ''(Functional and local development)''&lt;br /&gt;
&lt;br /&gt;
=== Design Requirements ===&lt;br /&gt;
[[File:Sample_of_the_review_tableau_layout.png|500px]]&lt;br /&gt;
* Follow the same design guidelines as reimplementation-front-end (https://github.com/AnvithaReddyGutha/reimplementation-front-end/blob/main/design_document.md).&lt;br /&gt;
* Use the same widgets (circles with numbers inside) that are used on the Response views.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
There are three key components to the implementation of the review tableau:&lt;br /&gt;
* A new front end page, &amp;lt;code&amp;gt;ReviewTableau.tsx&amp;lt;/code&amp;gt;, which consists of the view shown to the user accessing the review records.&lt;br /&gt;
* A new front end service, &amp;lt;code&amp;gt;gradesService.ts&amp;lt;/code&amp;gt;, which converts the results of API calls into parameters for the view.&lt;br /&gt;
* A new back end API GET endpoint in &amp;lt;code&amp;gt;grades_controller.rb&amp;lt;/code&amp;gt;, called &amp;lt;code&amp;gt;get_review_tableau_data&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The intended flow, once integration is complete with [https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2568._Finish_tabbed_view_for_Assignments,_including_Topics_and_Calibration_tabs E2568's work], is for admins and instructors to view a dashboard of participants for a given assignment, select one participant whose reviews are to be displayed, and then the review tableau page is loaded with the appropriate information. Because this dashboard does not yet exist, and to avoid redundant work, we have left the review tableau page inaccessible except via manually inputting the corresponding URL. This is for demonstration purposes: authorization still occurs as if the current user had requested the tableau.&lt;br /&gt;
&lt;br /&gt;
The get_review_tableau_data endpoint accepts two parameters: an assignment_id and a participant_id. The Assignment identifier is used to search the &amp;lt;code&amp;gt;AssignmentQuestionnaires&amp;lt;/code&amp;gt; table for all Questionnaires corresponding to each round of review in the target Assignment. The corresponding Items (&amp;quot;questions&amp;quot; on a standard rubric) are retrieved from the &amp;lt;code&amp;gt;Items&amp;lt;/code&amp;gt; table, and hashed with their identifiers into the resulting JSON. The function then searches the &amp;lt;code&amp;gt;ResponseMaps&amp;lt;/code&amp;gt; table for all Responses made for the target assignment by the target participant (the reviewer), and cross-references them with the &amp;lt;code&amp;gt;Responses&amp;lt;/code&amp;gt; table to obtain the round in which the Response was submitted. Finally, the &amp;lt;code&amp;gt;Answers&amp;lt;/code&amp;gt; table is consulted for each response identifier, and the value / comment associated with each answer is stored in the same hash. The JSON output is received by the front end and displayed in tables, one for each round.&lt;br /&gt;
&lt;br /&gt;
[[File:e2563_tableau_api_logic.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE: The current implementation assumes that there is only one Questionnaire associated with each round of a particular Assignment. Although association of several rubrics within a single round of review is an intended feature, and unused support exists for it in both the front end and back end components being introduced, there is currently no way to disambiguate which Response objects correspond to which associated Questionnaires outside of looking at the round number. As such, the feature as described cannot be implemented until changes are made to the database as part of work by the &amp;quot;multiple rubrics per topic&amp;quot; team(s).'''&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
# Login to Expertiza with an admin or instructor account.&lt;br /&gt;
# If the review dashboard exists:&lt;br /&gt;
## Navigate to the review dashboard for the desired assignment. Scroll to the desired participant, and click on the “summary” link.&lt;br /&gt;
# If the review dashboard is unimplemented:&lt;br /&gt;
## Navigate directly to http://localhost:3000/review-tableau?assignmentId=1&amp;amp;participantId=1, with both values replaced with the desired assignment/participant identifiers.&lt;br /&gt;
# Confirm that each table contains the items and answers for individual rubrics, arranged by individual responses and separate rounds of review.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
* RSpec test(s) for the new get_review_tableau_data endpoint.&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
Adam Imbert (apimbert)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Bestin Lalu (blalu)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Yumo Shen (jshen23)&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E2563_tableau_api_logic.png&amp;diff=167254</id>
		<title>File:E2563 tableau api logic.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E2563_tableau_api_logic.png&amp;diff=167254"/>
		<updated>2025-12-02T21:13:26Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: The logic flows for the get_review_tableau_data GET endpoint.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
The logic flows for the get_review_tableau_data GET endpoint.&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167253</id>
		<title>CSC/ECE 517 Fall 2025 - E2563. Review tableau</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167253"/>
		<updated>2025-12-02T21:11:49Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains information about E2563.Review calibration, which was a project in CSC517 Fall 2025. &lt;br /&gt;
&lt;br /&gt;
Please see below for a description of the design of the project.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Expertiza is an open-source application based on the Ruby on Rails framework. Instructors can create and manage assignments, and students can form teams for each one, as well as peer review other teams’ work. The frontend is written in TypeScript, and the backend is written in Ruby. The current codebase can be found here (FRONTEND, BACKEND), as well as in the external info section below. This work is part of an ongoing reimplementation effort of the following old Expertiza repository.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Instructors need to be able to view the responses made by a student during rounds of peer review in order to accurately assign a grade for that review. To streamline this process, our goal is to design and implement a dedicated page that allows instructors to view all grading reviews submitted by a given student. This page, named the '''review tableau page''', should organize and present the reviews in a clear, structured, and accessible manner. Specifically, the page must display all student grading reviews, grouped by assignment, round, and topic, with each group being rendered as a separate table.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
=== Core Requirements ===&lt;br /&gt;
* A user with the '''Instructor''' role can view the review tableau(s) for a given student from a dedicated page (the ‘tableau page’) of the Expertiza site.&lt;br /&gt;
* The tableau page can be accessed by clicking a “Summary” link under the “Reviews Done” column when viewing students in the instructor’s rewiew-grading dashboard.&lt;br /&gt;
* The tableau page has the following contents:&lt;br /&gt;
** A header, displaying the text “Review by Student, “ followed by the student’s ID.&lt;br /&gt;
** Individual tables (‘tableaus’), each corresponding to a round of reviewing from a specific assignment with a specific rubric used during the review.&lt;br /&gt;
*** Tableaus are displayed in a single column on the tableau page.&lt;br /&gt;
*** Tableaus are sorted first by the '''round in which the review was made''', and then finally by the rubric used for review. This ensures that topics made chronologically close together are displayed sequentially. In the usual case, where the '''same''' rubric is used for all submissions, there will be only a single tableau. If rubric varies by topics, there may be multiple tableaus, reflecting the fact that the rubric may be different for different submissions reviewed by this reviewer.&lt;br /&gt;
* An individual tableau has the following contents:&lt;br /&gt;
** A label for the course number, semester, and year in which the review was made.&lt;br /&gt;
** A label for the assignment for which the review was made.&lt;br /&gt;
** A label for the round number for which the review was made.&lt;br /&gt;
** The primary table, which contains:&lt;br /&gt;
*** A highlighted column, populated with questions asked on the rubric.&lt;br /&gt;
*** An arbitrary number of additional columns, each corresponding to a review for that assignment and round that uses the rubric. Each of these is labelled after the team being reviewed and annotated with the date/time the review was submitted.&lt;br /&gt;
**** Each row of these columns is populated with the student’s responses for the corresponding review and question.&lt;br /&gt;
** Note that a single tableau records the results of all reviews made using the same rubric for a particular round. If a student provided reviews for topics (frontend, backend, full stack) with varying rubrics, then a tableau will be created for each type of rubric filled out.&lt;br /&gt;
* Creating a backend API that can retrieve the student’s grading reviews and sort them per each assignment, round, and topic. ''(Functional and local development)''&lt;br /&gt;
&lt;br /&gt;
=== Design Requirements ===&lt;br /&gt;
[[File:Sample_of_the_review_tableau_layout.png|500px]]&lt;br /&gt;
* Follow the same design guidelines as reimplementation-front-end (https://github.com/AnvithaReddyGutha/reimplementation-front-end/blob/main/design_document.md).&lt;br /&gt;
* Use the same widgets (circles with numbers inside) that are used on the Response views.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
There are three key components to the implementation of the review tableau:&lt;br /&gt;
* A new front end page, &amp;lt;code&amp;gt;ReviewTableau.tsx&amp;lt;/code&amp;gt;, which consists of the view shown to the user accessing the review records.&lt;br /&gt;
* A new front end service, &amp;lt;code&amp;gt;gradesService.ts&amp;lt;/code&amp;gt;, which converts the results of API calls into parameters for the view.&lt;br /&gt;
* A new back end API GET endpoint in &amp;lt;code&amp;gt;grades_controller.rb&amp;lt;/code&amp;gt;, called &amp;lt;code&amp;gt;get_review_tableau_data&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The intended flow, once integration is complete with [https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2568._Finish_tabbed_view_for_Assignments,_including_Topics_and_Calibration_tabs E2568's work], is for admins and instructors to view a dashboard of participants for a given assignment, select one participant whose reviews are to be displayed, and then the review tableau page is loaded with the appropriate information. Because this dashboard does not yet exist, and to avoid redundant work, we have left the review tableau page inaccessible except via manually inputting the corresponding URL. This is for demonstration purposes: authorization still occurs as if the current user had requested the tableau.&lt;br /&gt;
&lt;br /&gt;
The get_review_tableau_data endpoint accepts two parameters: an assignment_id and a participant_id. The Assignment identifier is used to search the &amp;lt;code&amp;gt;AssignmentQuestionnaires&amp;lt;/code&amp;gt; table for all Questionnaires corresponding to each round of review in the target Assignment. The corresponding Items (&amp;quot;questions&amp;quot; on a standard rubric) are retrieved from the &amp;lt;code&amp;gt;Items&amp;lt;/code&amp;gt; table, and hashed with their identifiers into the resulting JSON. The function then searches the &amp;lt;code&amp;gt;ResponseMaps&amp;lt;/code&amp;gt; table for all Responses made for the target assignment by the target participant (the reviewer), and cross-references them with the &amp;lt;code&amp;gt;Responses&amp;lt;/code&amp;gt; table to obtain the round in which the Response was submitted. Finally, the &amp;lt;code&amp;gt;Answers&amp;lt;/code&amp;gt; table is consulted for each response identifier, and the value / comment associated with each answer is stored in the same hash. The JSON output is received by the front end and displayed in tables, one for each round.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: The current implementation assumes that there is only one Questionnaire associated with each round of a particular Assignment. Although association of several rubrics within a single round of review is an intended feature, and unused support exists for it in both the front end and back end components being introduced, there is currently no way to disambiguate which Response objects correspond to which associated Questionnaires outside of looking at the round number. As such, the feature as described cannot be implemented until changes are made to the database as part of work by the &amp;quot;multiple rubrics per topic&amp;quot; team(s).'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
# Login to Expertiza with an admin or instructor account&lt;br /&gt;
# There should be a “Reviews Done” button on the dashboard. Click on “Reviews Done” button&lt;br /&gt;
# A table contains all students who should show up. Click on the “summary” link for one mock student to get to the Review Tableau page&lt;br /&gt;
# Confirm table displays correctly with the assignment name, student name, review rounds -&amp;gt; review tables following each rubric&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
* Unit test cases for correct headers, nested tables, and correct layout.&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
Adam Imbert (apimbert)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Bestin Lalu (blalu)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Yumo Shen (jshen23)&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167242</id>
		<title>CSC/ECE 517 Fall 2025 - E2563. Review tableau</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2563._Review_tableau&amp;diff=167242"/>
		<updated>2025-12-02T20:54:28Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains information about E2563.Review calibration, which was a project in CSC517 Fall 2025. &lt;br /&gt;
&lt;br /&gt;
Please see below for a description of the design of the project.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Expertiza is an open-source application based on the Ruby on Rails framework. Instructors can create and manage assignments, and students can form teams for each one, as well as peer review other teams’ work. The frontend is written in TypeScript, and the backend is written in Ruby. The current codebase can be found here (FRONTEND, BACKEND), as well as in the external info section below. This work is part of an ongoing reimplementation effort of the following old Expertiza repository.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Instructors need to be able to view the responses made by a student during rounds of peer review in order to accurately assign a grade for that review. To streamline this process, our goal is to design and implement a dedicated page that allows instructors to view all grading reviews submitted by a given student. This page, named the '''review tableau page''', should organize and present the reviews in a clear, structured, and accessible manner. Specifically, the page must display all student grading reviews, grouped by assignment, round, and topic, with each group being rendered as a separate table.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
=== Core Requirements ===&lt;br /&gt;
* A user with the '''Instructor''' role can view the review tableau(s) for a given student from a dedicated page (the ‘tableau page’) of the Expertiza site.&lt;br /&gt;
* The tableau page can be accessed by clicking a “Summary” link under the “Reviews Done” column when viewing students in the instructor’s rewiew-grading dashboard.&lt;br /&gt;
* The tableau page has the following contents:&lt;br /&gt;
** A header, displaying the text “Review by Student, “ followed by the student’s ID.&lt;br /&gt;
** Individual tables (‘tableaus’), each corresponding to a round of reviewing from a specific assignment with a specific rubric used during the review.&lt;br /&gt;
*** Tableaus are displayed in a single column on the tableau page.&lt;br /&gt;
*** Tableaus are sorted first by the '''round in which the review was made''', and then finally by the rubric used for review. This ensures that topics made chronologically close together are displayed sequentially. In the usual case, where the '''same''' rubric is used for all submissions, there will be only a single tableau. If rubric varies by topics, there may be multiple tableaus, reflecting the fact that the rubric may be different for different submissions reviewed by this reviewer.&lt;br /&gt;
* An individual tableau has the following contents:&lt;br /&gt;
** A label for the course number, semester, and year in which the review was made.&lt;br /&gt;
** A label for the assignment for which the review was made.&lt;br /&gt;
** A label for the round number for which the review was made.&lt;br /&gt;
** The primary table, which contains:&lt;br /&gt;
*** A highlighted column, populated with questions asked on the rubric.&lt;br /&gt;
*** An arbitrary number of additional columns, each corresponding to a review for that assignment and round that uses the rubric. Each of these is labelled after the team being reviewed and annotated with the date/time the review was submitted.&lt;br /&gt;
**** Each row of these columns is populated with the student’s responses for the corresponding review and question.&lt;br /&gt;
** Note that a single tableau records the results of all reviews made using the same rubric for a particular round. If a student provided reviews for topics (frontend, backend, full stack) with varying rubrics, then a tableau will be created for each type of rubric filled out.&lt;br /&gt;
* Creating a backend API that can retrieve the student’s grading reviews and sort them per each assignment, round, and topic. ''(Functional and local development)''&lt;br /&gt;
&lt;br /&gt;
=== Design Requirements ===&lt;br /&gt;
[[File:Sample_of_the_review_tableau_layout.png|500px]]&lt;br /&gt;
* Follow the same design guidelines as reimplementation-front-end (https://github.com/AnvithaReddyGutha/reimplementation-front-end/blob/main/design_document.md).&lt;br /&gt;
* Use the same widgets (circles with numbers inside) that are used on the Response views.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
There are three key components to the implementation of the review tableau:&lt;br /&gt;
* A new front end page, `ReviewTableau.tsx`, which consists of the view shown to the user accessing the review records.&lt;br /&gt;
* A new front end service, `gradesService.ts`, which converts the results of API calls into parameters for the view.&lt;br /&gt;
* A new back end API GET endpoint in `grades_controller.rb`, called `get_review_tableau_data`.&lt;br /&gt;
&lt;br /&gt;
The intended flow, once integration is complete with [https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2568._Finish_tabbed_view_for_Assignments,_including_Topics_and_Calibration_tabs E2568's work], is for admins and instructors to view a dashboard of participants for a given assignment, select one participant whose reviews are to be displayed, and then the review tableau page is loaded with the appropriate information. Because this dashboard does not yet exist, and to avoid redundant work, we have left the review tableau page inaccessible except via manually inputting the corresponding URL. This is for demonstration purposes: authorization still occurs as if the current user had requested the tableau.&lt;br /&gt;
&lt;br /&gt;
The get_review_tableau_data endpoint accepts two parameters: an assignment_id and a participant_id. The Assignment identifier is used to search the `AssignmentQuestionnaires` table for all Questionnaires corresponding to each round of review in the target Assignment. The corresponding Items (&amp;quot;questions&amp;quot; on a standard rubric) are retrieved from the `Items` table, and hashed with their identifiers into the resulting JSON. The function then searches the `ResponseMaps` table for all Responses made for the target assignment by the target participant (the reviewer), and cross-references them with the `Responses` table to obtain the round in which the Response was submitted. Finally, the `Answers` table is consulted for each response identifier, and the value / comment associated with each answer is stored in the same hash. The JSON output is received by the front end and displayed in tables, one for each round.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: The current implementation assumes that there is only one Questionnaire associated with each round of a particular Assignment. Although association of several rubrics within a single round of review is an intended feature, and unused support exists for it in both the front end and back end components being introduced, there is currently no way to disambiguate which Response objects correspond to which associated Questionnaires outside of looking at the round number. As such, the feature as described cannot be implemented until changes are made to the database as part of work by the &amp;quot;multiple rubrics per topic&amp;quot; team(s).'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
# Login to Expertiza with an admin or instructor account&lt;br /&gt;
# There should be a “Reviews Done” button on the dashboard. Click on “Reviews Done” button&lt;br /&gt;
# A table contains all students who should show up. Click on the “summary” link for one mock student to get to the Review Tableau page&lt;br /&gt;
# Confirm table displays correctly with the assignment name, student name, review rounds -&amp;gt; review tables following each rubric&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
* Unit test cases for correct headers, nested tables, and correct layout.&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
Adam Imbert (apimbert)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Bestin Lalu (blalu)&lt;br /&gt;
‎&amp;lt;br /&amp;gt;&lt;br /&gt;
Yumo Shen (jshen23)&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025&amp;diff=167123</id>
		<title>CSC/ECE 517 Fall 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025&amp;diff=167123"/>
		<updated>2025-11-12T17:07:35Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2025 - E2550. Response hierarchy and responses_controller back end]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2551. Reimplementing SubmittedContentController]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2552. ProjectTopic and SignedUpTeam]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2553.  Heatgrid and Grades Controller (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2554. Front end for View Submissions Page]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2555. Front end for Participants Page]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2556. Front ends for Create Teams and Assign Reviewers]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2558. Tabbed view for creating and editing assignments]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Final Projects ==&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2561. Finish up SubmittedContentController]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2562. Review grading dashboard]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2563. Review tableau]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2564. Review calibration]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2565. Integration of JoinTeamRequests]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2566. Finish DueDates]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2567. Review rubrics varying by round]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2025 - E2568. Finish tabbed view for Assignments, including Topics and Calibration tabs]]&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166909</id>
		<title>CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166909"/>
		<updated>2025-10-30T02:37:13Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.  &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to enable instructors to assign '''different rubrics to different project topics''', allowing for more accurate and flexible assessment methods.  &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Expertiza supports a variety of project types across CSC/ECE 517 courses. However, because only one rubric can be assigned to a course at present, instructors cannot tailor rubrics to the distinct expectations of each project type.  &lt;br /&gt;
&lt;br /&gt;
By implementing specialized rubrics per topic, the evaluation process can better reflect the unique goals and deliverables of each project type.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
Note that several of these functional requirements were shared by the E2552 group, particularly any that rely on frontend implementation.&lt;br /&gt;
&lt;br /&gt;
* By default, each course project uses the rubric specified on the '''Rubrics''' tab.&lt;br /&gt;
* On the '''Topics''' tab (in the Assignment Edit page), a '''dropdown''' should appear next to each topic.  &lt;br /&gt;
** This dropdown allows instructors to choose a rubric specific to that topic.&lt;br /&gt;
** If no rubric is selected, the assignment’s default rubric is used.&lt;br /&gt;
* The '''signup sheet''' interface should display the rubric chosen for each topic.&lt;br /&gt;
* The '''rubric-selection logic''' should not reside within the `signup_sheet_controller`.  &lt;br /&gt;
** Any non-topic-related logic should instead be handled in another controller or helper.&lt;br /&gt;
* A new column, `topic_id`, must be added to the `assignment_questionnaires` table to link a questionnaire to a specific topic.&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
To implement the requirements, we have made the following changes to the backend repository:&lt;br /&gt;
* Implemented rubric_list, a new GET API endpoint in sign_up_topics_controller.rb, which returns the topics and rubrics associated with a specific assignment. These are serialized into a readable JSON format to facilitate frontend use.&lt;br /&gt;
* Inserted &amp;quot;topic_id&amp;quot; as a foreign key assignment_questionnaire.rb, and added a &amp;quot;questionnaire&amp;quot; field to sign_up_topic.rb. These allow topics to be assigned on a per-assignment, per-round basis.&lt;br /&gt;
* Implemented rubric_for_review, a function in the sign_up_topic.rb model that returns the appropriate questionnaire for a topic given a specific round number that questionnaire corresponds to.&lt;br /&gt;
* Implemented has_specific_rubric?, a function in the sign_up_topic.rb model that returns whether or not the topic has an associated rubric for the given round.&lt;br /&gt;
* Introduced topic_rubrics_helper.rb, a helper class designed to carry the assign_rubric_to_topic function. This associates the given assignment, topic, questionnaire, and round number with each other in the database in an unobtrusive way that does not gunk up other classes.&lt;br /&gt;
* Created sign_up_topic_spec.rb, a testing class designed to test the aforementioned new functions in the SignUpTopic class.&lt;br /&gt;
&lt;br /&gt;
== Integration of AI ==&lt;br /&gt;
Artificially intelligent LLM models (ChatGPT, Claude.ai) were leveraged to streamline development and consult regarding critical design decisions.&lt;br /&gt;
&lt;br /&gt;
Firstly: [https://claude.ai/share/fbd40465-86ae-498c-bb22-1b719784a928 unspecific, project-encompassing] conversations served to give us a high-level understanding of what tasks needed to be completed, and what components might comprise a completed implementation. Having this overview is important for project planning, especially with the shorter time window we gave ourselves to complete implementation. While we did not have access to Issues to populate a GitHub project page, we were able to break the implementation into tasks for our own internal production management.&lt;br /&gt;
&lt;br /&gt;
Secondly: [https://chatgpt.com/c/690227fe-a6c4-832d-a485-e284f1a457f0 troubleshooting] or [https://chatgpt.com/share/6902cda2-364c-8007-b18d-d804023b73d1 class-specific] conversations allowed us to isolate a component of the implementation and (hopefully) keep everything modular, extensible, and maintainable. And, of course, promptly fix any bugs we encountered in setup or execution of our implementation!&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
Due to unfortunate time constraints, both circumstantial and self-imposed, the implementation as it stands is lacking in a number of key categories. Chiefly, our rspec tests are undertested due to issues running the rspec test suite. As such, we recommend careful code review is applied to the resulting PR before it is considered for merging. The PR is set to &amp;quot;DRAFT&amp;quot; to reflect this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With that being said, here are a few action steps for future teams tackling this problem:&lt;br /&gt;
* Finalize the API integration with the front-end dropdown component.&lt;br /&gt;
* Implement logic to persist rubric–topic associations.&lt;br /&gt;
* Ensure that current automated test coverage for the new functionality is sufficient and correct.&lt;br /&gt;
* Conduct usability testing and gather instructor feedback, as always!&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
* [https://github.com/Prismly/reimplementation-back-end/tree/main Team GitHub Repository]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-back-end/pull/226 Backend Pull Request]&lt;br /&gt;
* [https://docs.google.com/presentation/d/1dltJz9vOSq-tDVyGDUtLTfuC5gVlylsdjNs7TPJTQBk/edit?usp=sharing Demo Slide Deck] (requires NCSU Google Account)&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
* Adam Imbert (apimbert)&lt;br /&gt;
* Iman Khan (ikhan7)&lt;br /&gt;
* Niranjan Rajendran (nrajend4)&lt;br /&gt;
* '''Mentor''': Ed Gehringer (efg)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Original codebase feature page: [[CSC/ECE 517 Spring 2020 - E2026. Specialized rubrics for different topic types|Project E2026 Wiki Page]]&lt;br /&gt;
* Reimplementation precedent feature page: [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513 Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166908</id>
		<title>CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166908"/>
		<updated>2025-10-30T02:34:56Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.  &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to enable instructors to assign '''different rubrics to different project topics''', allowing for more accurate and flexible assessment methods.  &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Expertiza supports a variety of project types across CSC/ECE 517 courses. However, because only one rubric can be assigned to a course at present, instructors cannot tailor rubrics to the distinct expectations of each project type.  &lt;br /&gt;
&lt;br /&gt;
By implementing specialized rubrics per topic, the evaluation process can better reflect the unique goals and deliverables of each project type.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
Note that several of these functional requirements were shared by the E2552 group, particularly any that rely on frontend implementation.&lt;br /&gt;
&lt;br /&gt;
* By default, each course project uses the rubric specified on the '''Rubrics''' tab.&lt;br /&gt;
* On the '''Topics''' tab (in the Assignment Edit page), a '''dropdown''' should appear next to each topic.  &lt;br /&gt;
** This dropdown allows instructors to choose a rubric specific to that topic.&lt;br /&gt;
** If no rubric is selected, the assignment’s default rubric is used.&lt;br /&gt;
* The '''signup sheet''' interface should display the rubric chosen for each topic.&lt;br /&gt;
* The '''rubric-selection logic''' should not reside within the `signup_sheet_controller`.  &lt;br /&gt;
** Any non-topic-related logic should instead be handled in another controller or helper.&lt;br /&gt;
* A new column, `topic_id`, must be added to the `assignment_questionnaires` table to link a questionnaire to a specific topic.&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
To implement the requirements, we have made the following changes to the backend repository:&lt;br /&gt;
* Implemented rubric_list, a new GET API endpoint in sign_up_topics_controller.rb, which returns the topics and rubrics associated with a specific assignment. These are serialized into a readable JSON format to facilitate frontend use.&lt;br /&gt;
* Inserted &amp;quot;topic_id&amp;quot; as a foreign key assignment_questionnaire.rb, and added a &amp;quot;questionnaire&amp;quot; field to sign_up_topic.rb. These allow topics to be assigned on a per-assignment, per-round basis.&lt;br /&gt;
* Implemented rubric_for_review, a function in the sign_up_topic.rb model that returns the appropriate questionnaire for a topic given a specific round number that questionnaire corresponds to.&lt;br /&gt;
* Implemented has_specific_rubric?, a function in the sign_up_topic.rb model that returns whether or not the topic has an associated rubric for the given round.&lt;br /&gt;
* Introduced topic_rubrics_helper.rb, a helper class designed to carry the assign_rubric_to_topic function. This associates the given assignment, topic, questionnaire, and round number with each other in the database in an unobtrusive way that does not gunk up other classes.&lt;br /&gt;
* Created sign_up_topic_spec.rb, a testing class designed to test the aforementioned new functions in the SignUpTopic class.&lt;br /&gt;
&lt;br /&gt;
== Integration of AI ==&lt;br /&gt;
Artificially intelligent LLM models (ChatGPT, Claude.ai) were leveraged to streamline development and consult regarding critical design decisions.&lt;br /&gt;
&lt;br /&gt;
Firstly: [https://claude.ai/share/fbd40465-86ae-498c-bb22-1b719784a928 unspecific, project-encompassing] conversations served to give us a high-level understanding of what tasks needed to be completed, and what components might comprise a completed implementation. Having this overview is important for project planning, especially with the shorter time window we gave ourselves to complete implementation. While we did not have access to Issues to populate a GitHub project page, we were able to break the implementation into tasks for our own internal production management.&lt;br /&gt;
&lt;br /&gt;
Secondly: [https://chatgpt.com/c/690227fe-a6c4-832d-a485-e284f1a457f0 troubleshooting] or [https://chatgpt.com/share/6902cda2-364c-8007-b18d-d804023b73d1 class-specific] conversations allowed us to isolate a component of the implementation and (hopefully) keep everything modular, extensible, and maintainable. And, of course, promptly fix any bugs we encountered in setup or execution of our implementation!&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
Due to unfortunate time constraints, both circumstantial and self-imposed, the implementation as it stands is lacking in a number of key categories. Chiefly, our rspec tests are undertested due to issues running the rspec test suite. As such, we recommend careful code review is applied to the resulting PR before it is considered for merging. The PR is set to &amp;quot;DRAFT&amp;quot; to reflect this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With that being said, here are a few action steps for future teams tackling this problem:&lt;br /&gt;
* Finalize the API integration with the front-end dropdown component.&lt;br /&gt;
* Implement logic to persist rubric–topic associations.&lt;br /&gt;
* Ensure that current automated test coverage for the new functionality is sufficient and correct.&lt;br /&gt;
* Conduct usability testing and gather instructor feedback, as always!&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
* [https://github.com/Prismly/reimplementation-back-end/tree/main Team GitHub Repository]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-back-end/pull/226 Backend Pull Request]&lt;br /&gt;
* TODO: Demo Recording&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
* Adam Imbert (apimbert)&lt;br /&gt;
* Iman Khan (ikhan7)&lt;br /&gt;
* Niranjan Rajendran (nrajend4)&lt;br /&gt;
* '''Mentor''': Ed Gehringer (efg)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Original codebase feature page: [[CSC/ECE 517 Spring 2020 - E2026. Specialized rubrics for different topic types|Project E2026 Wiki Page]]&lt;br /&gt;
* Reimplementation precedent feature page: [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513 Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166907</id>
		<title>CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166907"/>
		<updated>2025-10-30T02:31:51Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.  &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to enable instructors to assign '''different rubrics to different project topics''', allowing for more accurate and flexible assessment methods.  &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Expertiza supports a variety of project types across CSC/ECE 517 courses. However, because only one rubric can be assigned to a course at present, instructors cannot tailor rubrics to the distinct expectations of each project type.  &lt;br /&gt;
&lt;br /&gt;
By implementing specialized rubrics per topic, the evaluation process can better reflect the unique goals and deliverables of each project type.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
Note that several of these functional requirements were shared by the E2552 group, particularly any that rely on frontend implementation.&lt;br /&gt;
&lt;br /&gt;
* By default, each course project uses the rubric specified on the '''Rubrics''' tab.&lt;br /&gt;
* On the '''Topics''' tab (in the Assignment Edit page), a '''dropdown''' should appear next to each topic.  &lt;br /&gt;
** This dropdown allows instructors to choose a rubric specific to that topic.&lt;br /&gt;
** If no rubric is selected, the assignment’s default rubric is used.&lt;br /&gt;
* The '''signup sheet''' interface should display the rubric chosen for each topic.&lt;br /&gt;
* The '''rubric-selection logic''' should not reside within the `signup_sheet_controller`.  &lt;br /&gt;
** Any non-topic-related logic should instead be handled in another controller or helper.&lt;br /&gt;
* A new column, `topic_id`, must be added to the `assignment_questionnaires` table to link a questionnaire to a specific topic.&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
To implement the requirements, we have made the following changes to the backend repository:&lt;br /&gt;
* Implemented rubric_list, a new GET API endpoint in sign_up_topics_controller.rb, which returns the topics and rubrics associated with a specific assignment. These are serialized into a readable JSON format to facilitate frontend use.&lt;br /&gt;
* Inserted &amp;quot;topic_id&amp;quot; as a foreign key assignment_questionnaire.rb, and added a &amp;quot;questionnaire&amp;quot; field to sign_up_topic.rb. These allow topics to be assigned on a per-assignment, per-round basis.&lt;br /&gt;
* Implemented rubric_for_review, a function in the sign_up_topic.rb model that returns the appropriate questionnaire for a topic given a specific round number that questionnaire corresponds to.&lt;br /&gt;
* Implemented has_specific_rubric?, a function in the sign_up_topic.rb model that returns whether or not the topic has an associated rubric for the given round.&lt;br /&gt;
* Introduced topic_rubrics_helper.rb, a helper class designed to carry the assign_rubric_to_topic function. This associates the given assignment, topic, questionnaire, and round number with each other in the database in an unobtrusive way that does not gunk up other classes.&lt;br /&gt;
* Created sign_up_topic_spec.rb, a testing class designed to test the aforementioned new functions in the SignUpTopic class.&lt;br /&gt;
&lt;br /&gt;
== Integration of AI ==&lt;br /&gt;
Artificially intelligent LLM models (ChatGPT, Claude.ai) were leveraged to streamline development and consult regarding critical design decisions.&lt;br /&gt;
&lt;br /&gt;
Firstly: [https://claude.ai/share/fbd40465-86ae-498c-bb22-1b719784a928 unspecific, project-encompassing] conversations served to give us a high-level understanding of what tasks needed to be completed, and what components might comprise a completed implementation. Having this overview is important for project planning, especially with the shorter time window we gave ourselves to complete implementation. While we did not have access to Issues to populate a GitHub project page, we were able to break the implementation into tasks for our own internal production management.&lt;br /&gt;
&lt;br /&gt;
Secondly: [https://chatgpt.com/c/690227fe-a6c4-832d-a485-e284f1a457f0 troubleshooting] or [https://chatgpt.com/share/6902cda2-364c-8007-b18d-d804023b73d1 class-specific] conversations allowed us to isolate a component of the implementation and (hopefully) keep everything modular, extensible, and maintainable. And, of course, promptly fix any bugs we encountered in setup or execution of our implementation!&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Finalize the API integration with the front-end dropdown component.&lt;br /&gt;
* Implement logic to persist rubric–topic associations.&lt;br /&gt;
* Ensure that current automated test coverage for the new functionality is sufficient and correct.&lt;br /&gt;
* Conduct usability testing and gather instructor feedback, as always!&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
* [https://github.com/Prismly/reimplementation-back-end/tree/main Team GitHub Repository]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-back-end/pull/226 Backend Pull Request]&lt;br /&gt;
* TODO: Demo Recording&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
* Adam Imbert (apimbert)&lt;br /&gt;
* Iman Khan (ikhan7)&lt;br /&gt;
* Niranjan Rajendran (nrajend4)&lt;br /&gt;
* '''Mentor''': Ed Gehringer (efg)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Original codebase feature page: [[CSC/ECE 517 Spring 2020 - E2026. Specialized rubrics for different topic types|Project E2026 Wiki Page]]&lt;br /&gt;
* Reimplementation precedent feature page: [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513 Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''This page will be updated as development progresses to reflect new commits, API changes, and testing results.''&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166906</id>
		<title>CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166906"/>
		<updated>2025-10-30T02:24:01Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.  &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to enable instructors to assign '''different rubrics to different project topics''', allowing for more accurate and flexible assessment methods.  &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Expertiza supports a variety of project types across CSC/ECE 517 courses. However, because only one rubric can be assigned to a course at present, instructors cannot tailor rubrics to the distinct expectations of each project type.  &lt;br /&gt;
&lt;br /&gt;
By implementing specialized rubrics per topic, the evaluation process can better reflect the unique goals and deliverables of each project type.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
Note that several of these functional requirements were shared by the E2552 group, particularly any that rely on frontend implementation.&lt;br /&gt;
&lt;br /&gt;
* By default, each course project uses the rubric specified on the '''Rubrics''' tab.&lt;br /&gt;
* On the '''Topics''' tab (in the Assignment Edit page), a '''dropdown''' should appear next to each topic.  &lt;br /&gt;
** This dropdown allows instructors to choose a rubric specific to that topic.&lt;br /&gt;
** If no rubric is selected, the assignment’s default rubric is used.&lt;br /&gt;
* The '''signup sheet''' interface should display the rubric chosen for each topic.&lt;br /&gt;
* The '''rubric-selection logic''' should not reside within the `signup_sheet_controller`.  &lt;br /&gt;
** Any non-topic-related logic should instead be handled in another controller or helper.&lt;br /&gt;
* A new column, `topic_id`, must be added to the `assignment_questionnaires` table to link a questionnaire to a specific topic.&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
To implement the requirements, we have made the following changes to the backend repository:&lt;br /&gt;
* Implemented rubric_list, a new GET API endpoint in sign_up_topics_controller.rb, which returns the topics and rubrics associated with a specific assignment. These are serialized into a readable JSON format to facilitate frontend use.&lt;br /&gt;
* Inserted &amp;quot;topic_id&amp;quot; as a foreign key assignment_questionnaire.rb, and added a &amp;quot;questionnaire&amp;quot; field to sign_up_topic.rb. These allow topics to be assigned on a per-assignment, per-round basis.&lt;br /&gt;
* Implemented rubric_for_review, a function in the sign_up_topic.rb model that returns the appropriate questionnaire for a topic given a specific round number that questionnaire corresponds to.&lt;br /&gt;
* Implemented has_specific_rubric?, a function in the sign_up_topic.rb model that returns whether or not the topic has an associated rubric for the given round.&lt;br /&gt;
* Introduced topic_rubrics_helper.rb, a helper class designed to carry the assign_rubric_to_topic function. This associates the given assignment, topic, questionnaire, and round number with each other in the database in an unobtrusive way that does not gunk up other classes.&lt;br /&gt;
* Created sign_up_topic_spec.rb, a testing class designed to test the aforementioned new functions in the SignUpTopic class.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Finalize the API integration with the front-end dropdown component.&lt;br /&gt;
* Implement logic to persist rubric–topic associations.&lt;br /&gt;
* Ensure that current automated test coverage for the new functionality is sufficient and correct.&lt;br /&gt;
* Conduct usability testing and gather instructor feedback, as always!&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
* [https://github.com/Prismly/reimplementation-back-end/tree/main Team GitHub Repository]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-back-end/pull/226 Backend Pull Request]&lt;br /&gt;
* TODO: Demo Recording&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
* Adam Imbert (apimbert)&lt;br /&gt;
* Iman Khan (ikhan7)&lt;br /&gt;
* Niranjan Rajendran (nrajend4)&lt;br /&gt;
* '''Mentor''': Ed Gehringer (efg)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Original codebase feature page: [[CSC/ECE 517 Spring 2020 - E2026. Specialized rubrics for different topic types|Project E2026 Wiki Page]]&lt;br /&gt;
* Reimplementation precedent feature page: [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513 Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''This page will be updated as development progresses to reflect new commits, API changes, and testing results.''&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166905</id>
		<title>CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166905"/>
		<updated>2025-10-30T02:22:42Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.  &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to enable instructors to assign '''different rubrics to different project topics''', allowing for more accurate and flexible assessment methods.  &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Expertiza supports a variety of project types across CSC/ECE 517 courses. However, because only one rubric can be assigned to a course at present, instructors cannot tailor rubrics to the distinct expectations of each project type.  &lt;br /&gt;
&lt;br /&gt;
By implementing specialized rubrics per topic, the evaluation process can better reflect the unique goals and deliverables of each project type.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
Note that several of these functional requirements were shared by the E2552 group, particularly any that rely on frontend implementation.&lt;br /&gt;
&lt;br /&gt;
* By default, each course project uses the rubric specified on the '''Rubrics''' tab.&lt;br /&gt;
* On the '''Topics''' tab (in the Assignment Edit page), a '''dropdown''' should appear next to each topic.  &lt;br /&gt;
** This dropdown allows instructors to choose a rubric specific to that topic.&lt;br /&gt;
** If no rubric is selected, the assignment’s default rubric is used.&lt;br /&gt;
* The '''signup sheet''' interface should display the rubric chosen for each topic.&lt;br /&gt;
* The '''rubric-selection logic''' should not reside within the `signup_sheet_controller`.  &lt;br /&gt;
** Any non-topic-related logic should instead be handled in another controller or helper.&lt;br /&gt;
* A new column, `topic_id`, must be added to the `assignment_questionnaires` table to link a questionnaire to a specific topic.&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
To implement the requirements, we have made the following changes to the backend repository:&lt;br /&gt;
* Implemented rubric_list, a new GET API endpoint in sign_up_topics_controller.rb, which returns the topics and rubrics associated with a specific assignment. These are serialized into a readable JSON format to facilitate frontend use.&lt;br /&gt;
* Inserted &amp;quot;topic_id&amp;quot; as a foreign key assignment_questionnaire.rb, and added a &amp;quot;questionnaire&amp;quot; field to sign_up_topic.rb. These allow topics to be assigned on a per-assignment, per-round basis.&lt;br /&gt;
* Implemented rubric_for_review, a function in the sign_up_topic.rb model that returns the appropriate questionnaire for a topic given a specific round number that questionnaire corresponds to.&lt;br /&gt;
* Implemented has_specific_rubric?, a function in the sign_up_topic.rb model that returns whether or not the topic has an associated rubric for the given round.&lt;br /&gt;
* Introduced topic_rubrics_helper.rb, a helper class designed to carry the assign_rubric_to_topic function. This associates the given assignment, topic, questionnaire, and round number with each other in the database in an unobtrusive way that does not gunk up other classes.&lt;br /&gt;
* Created sign_up_topic_spec.rb, a testing class designed to test the aforementioned new functions in the SignUpTopic class.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Finalize the API integration with the front-end dropdown component.&lt;br /&gt;
* Implement logic to persist rubric–topic associations.&lt;br /&gt;
* Ensure that current automated test coverage for the new functionality is sufficient and correct.&lt;br /&gt;
* Conduct usability testing and gather instructor feedback, as always!&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
* [https://github.com/Prismly/reimplementation-back-end/tree/main Team GitHub Repository]&lt;br /&gt;
* [ Backend Pull Request]&lt;br /&gt;
* TODO: Demo Recording&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
* Adam Imbert (apimbert)&lt;br /&gt;
* Iman Khan (ikhan7)&lt;br /&gt;
* Niranjan Rajendran (nrajend4)&lt;br /&gt;
* '''Mentor''': Ed Gehringer (efg)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Original codebase feature page: [[CSC/ECE 517 Spring 2020 - E2026. Specialized rubrics for different topic types|Project E2026 Wiki Page]]&lt;br /&gt;
* Reimplementation precedent feature page: [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513 Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''This page will be updated as development progresses to reflect new commits, API changes, and testing results.''&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166904</id>
		<title>CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166904"/>
		<updated>2025-10-30T02:17:08Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.  &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to enable instructors to assign '''different rubrics to different project topics''', allowing for more accurate and flexible assessment methods.  &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Expertiza supports a variety of project types across CSC/ECE 517 courses. However, because only one rubric can be assigned to a course at present, instructors cannot tailor rubrics to the distinct expectations of each project type.  &lt;br /&gt;
&lt;br /&gt;
By implementing specialized rubrics per topic, the evaluation process can better reflect the unique goals and deliverables of each project type.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
Note that several of these functional requirements were shared by the E2552 group, particularly any that rely on frontend implementation.&lt;br /&gt;
&lt;br /&gt;
* By default, each course project uses the rubric specified on the '''Rubrics''' tab.&lt;br /&gt;
* On the '''Topics''' tab (in the Assignment Edit page), a '''dropdown''' should appear next to each topic.  &lt;br /&gt;
** This dropdown allows instructors to choose a rubric specific to that topic.&lt;br /&gt;
** If no rubric is selected, the assignment’s default rubric is used.&lt;br /&gt;
* The '''signup sheet''' interface should display the rubric chosen for each topic.&lt;br /&gt;
* The '''rubric-selection logic''' should not reside within the `signup_sheet_controller`.  &lt;br /&gt;
** Any non-topic-related logic should instead be handled in another controller or helper.&lt;br /&gt;
* A new column, `topic_id`, must be added to the `assignment_questionnaires` table to link a questionnaire to a specific topic.&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
To implement the requirements, we have made the following changes to the backend repository:&lt;br /&gt;
* Implemented rubric_list, a new GET API endpoint in sign_up_topics_controller.rb, which returns the topics and rubrics associated with a specific assignment. These are serialized into a readable JSON format to facilitate frontend use.&lt;br /&gt;
* Inserted &amp;quot;topic_id&amp;quot; as a foreign key assignment_questionnaire.rb, and added a &amp;quot;questionnaire&amp;quot; field to sign_up_topic.rb. These allow topics to be assigned on a per-assignment, per-round basis.&lt;br /&gt;
* Implemented rubric_for_review, a function in the sign_up_topic.rb model that returns the appropriate questionnaire for a topic given a specific round number that questionnaire corresponds to.&lt;br /&gt;
* Implemented has_specific_rubric?, a function in the sign_up_topic.rb model that returns whether or not the topic has an associated rubric for the given round.&lt;br /&gt;
* Introduced topic_rubrics_helper.rb, a helper class designed to carry the assign_rubric_to_topic function. This associates the given assignment, topic, questionnaire, and round number with each other in the database in an unobtrusive way that does not gunk up other classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Modifications ==&lt;br /&gt;
* Extend the functionality introduced in Project E2513 to support rubric–topic associations.&lt;br /&gt;
* Introduce `topic_id` to the `assignment_questionnaires` table.&lt;br /&gt;
* Implement API endpoints to retrieve rubrics per assignment, including their associated topics.&lt;br /&gt;
* Write automated tests to ensure the correctness of the new features.&lt;br /&gt;
&lt;br /&gt;
== Progress So Far ==&lt;br /&gt;
* Identified and verified prior functionality from the '''E2552''' team:&lt;br /&gt;
** Added the rubric dropdown to the assignment topics page.&lt;br /&gt;
** Introduced the `topic_id` field to the `assignment_questionnaires` table.&lt;br /&gt;
* Added an '''API endpoint''' that retrieves rubrics for a given assignment, serialized together with their assigned topics.&lt;br /&gt;
* Implemented and tested the `topic_id` field integration.&lt;br /&gt;
* Additional backend logic and tests are in progress.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Finalize the API integration with the front-end dropdown component.&lt;br /&gt;
* Implement logic to persist rubric–topic associations.&lt;br /&gt;
* Extend automated test coverage for the new functionality.&lt;br /&gt;
* Conduct usability testing and gather instructor feedback.&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
* [https://github.com/Prismly/reimplementation-back-end/tree/main Team GitHub Repository]&lt;br /&gt;
* [ Backend Pull Request]&lt;br /&gt;
* TODO: Demo Recording&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
* Adam Imbert (apimbert)&lt;br /&gt;
* Iman Khan (ikhan7)&lt;br /&gt;
* Niranjan Rajendran (nrajend4)&lt;br /&gt;
* '''Mentor''': Ed Gehringer (efg)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Original codebase feature page: [[CSC/ECE 517 Spring 2020 - E2026. Specialized rubrics for different topic types|Project E2026 Wiki Page]]&lt;br /&gt;
* Reimplementation precedent feature page: [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513 Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''This page will be updated as development progresses to reflect new commits, API changes, and testing results.''&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166903</id>
		<title>CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166903"/>
		<updated>2025-10-29T21:29:47Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.  &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to enable instructors to assign '''different rubrics to different project topics''', allowing for more accurate and flexible assessment methods.  &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Expertiza supports a variety of project types across CSC/ECE 517 courses. However, because only one rubric can be assigned to a course at present, instructors cannot tailor rubrics to the distinct expectations of each project type.  &lt;br /&gt;
&lt;br /&gt;
By implementing specialized rubrics per topic, the evaluation process can better reflect the unique goals and deliverables of each project type.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
* By default, each course project uses the rubric specified on the '''Rubrics''' tab.&lt;br /&gt;
* On the '''Topics''' tab (in the Assignment Edit page), a '''dropdown''' should appear next to each topic.  &lt;br /&gt;
** This dropdown allows instructors to choose a rubric specific to that topic.&lt;br /&gt;
** If no rubric is selected, the assignment’s default rubric is used.&lt;br /&gt;
* The '''signup sheet''' interface should display the rubric chosen for each topic.&lt;br /&gt;
* The '''rubric-selection logic''' should not reside within the `signup_sheet_controller`.  &lt;br /&gt;
** Any non-topic-related logic should instead be handled in another controller or helper.&lt;br /&gt;
* A new column, `topic_id`, must be added to the `assignment_questionnaires` table to link a questionnaire to a specific topic.&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
This project builds on prior work from [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513]], which reimplemented the topic management system.  &lt;br /&gt;
Key references:&lt;br /&gt;
* [https://github.com/RandomOscillations/reimplementation-back-end Reimplementation Back-End Repository]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-back-end/pull/172 Relevant Pull Request]&lt;br /&gt;
* [https://go.ncsu.edu/testing_video Testing Video]&lt;br /&gt;
&lt;br /&gt;
== Required Modifications ==&lt;br /&gt;
* Extend the functionality introduced in Project E2513 to support rubric–topic associations.&lt;br /&gt;
* Introduce `topic_id` to the `assignment_questionnaires` table.&lt;br /&gt;
* Implement API endpoints to retrieve rubrics per assignment, including their associated topics.&lt;br /&gt;
* Write automated tests to ensure the correctness of the new features.&lt;br /&gt;
&lt;br /&gt;
== Progress So Far ==&lt;br /&gt;
* Identified and verified prior functionality from the '''E2552''' team:&lt;br /&gt;
** Added the rubric dropdown to the assignment topics page.&lt;br /&gt;
** Introduced the `topic_id` field to the `assignment_questionnaires` table.&lt;br /&gt;
* Added an '''API endpoint''' that retrieves rubrics for a given assignment, serialized together with their assigned topics.&lt;br /&gt;
* Implemented and tested the `topic_id` field integration.&lt;br /&gt;
* Additional backend logic and tests are in progress.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Finalize the API integration with the front-end dropdown component.&lt;br /&gt;
* Implement logic to persist rubric–topic associations.&lt;br /&gt;
* Extend automated test coverage for the new functionality.&lt;br /&gt;
* Conduct usability testing and gather instructor feedback.&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
* [https://github.com/Prismly/reimplementation-back-end/tree/main Team GitHub Repository]&lt;br /&gt;
* [ Backend Pull Request]&lt;br /&gt;
* TODO: Demo Recording&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
* Adam Imbert (apimbert)&lt;br /&gt;
* Iman Khan (ikhan7)&lt;br /&gt;
* Niranjan Rajendran (nrajend4)&lt;br /&gt;
* '''Mentor''': Ed Gehringer (efg)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Original codebase feature page: [[CSC/ECE 517 Spring 2020 - E2026. Specialized rubrics for different topic types|Project E2026 Wiki Page]]&lt;br /&gt;
* Reimplementation precedent feature page: [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513 Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''This page will be updated as development progresses to reflect new commits, API changes, and testing results.''&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166899</id>
		<title>CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166899"/>
		<updated>2025-10-29T19:44:14Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.  &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to enable instructors to assign '''different rubrics to different project topics''', allowing for more accurate and flexible assessment methods.  &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Expertiza supports a variety of project types across CSC/ECE 517 courses. However, because only one rubric can be assigned to a course at present, instructors cannot tailor rubrics to the distinct expectations of each project type.  &lt;br /&gt;
&lt;br /&gt;
By implementing specialized rubrics per topic, the evaluation process can better reflect the unique goals and deliverables of each project type.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
* By default, each course project uses the rubric specified on the '''Rubrics''' tab.&lt;br /&gt;
* On the '''Topics''' tab (in the Assignment Edit page), a '''dropdown''' should appear next to each topic.  &lt;br /&gt;
  * This dropdown allows instructors to choose a rubric specific to that topic.&lt;br /&gt;
  * If no rubric is selected, the assignment’s default rubric is used.&lt;br /&gt;
* The '''signup sheet''' interface should display the rubric chosen for each topic.&lt;br /&gt;
* The '''rubric-selection logic''' should not reside within the `signup_sheet_controller`.  &lt;br /&gt;
  * Any non-topic-related logic should instead be handled in another controller or helper.&lt;br /&gt;
* A new column, `topic_id`, must be added to the `assignment_questionnaires` table to link a questionnaire to a specific topic.&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
This project builds on prior work from [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513]], which reimplemented the topic management system.  &lt;br /&gt;
Key references:&lt;br /&gt;
* [https://github.com/RandomOscillations/reimplementation-back-end Reimplementation Back-End Repository]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-back-end/pull/172 Relevant Pull Request]&lt;br /&gt;
* [https://go.ncsu.edu/testing_video Testing Video]&lt;br /&gt;
&lt;br /&gt;
Be cautious when modifying existing code — particularly controllers and serializers — to maintain clear separation of concerns.&lt;br /&gt;
&lt;br /&gt;
== Required Modifications ==&lt;br /&gt;
* Extend the functionality introduced in Project E2513 to support rubric–topic associations.&lt;br /&gt;
* Introduce `topic_id` to the `assignment_questionnaires` table.&lt;br /&gt;
* Implement API endpoints to retrieve rubrics per assignment, including their associated topics.&lt;br /&gt;
* Write automated tests to ensure the correctness of the new features.&lt;br /&gt;
&lt;br /&gt;
== Progress So Far ==&lt;br /&gt;
We are the '''E2557 team''', responsible for the development of '''Specialized Rubrics for Different Topic Types'''.  &lt;br /&gt;
&lt;br /&gt;
Completed and ongoing work includes:&lt;br /&gt;
* Identified and verified prior functionality from the '''E2552''' team:&lt;br /&gt;
  * Added the rubric dropdown to the assignment topics page.&lt;br /&gt;
  * Introduced the `topic_id` field to the `assignment_questionnaires` table.&lt;br /&gt;
* Added an '''API endpoint''' that retrieves rubrics for a given assignment, serialized together with their assigned topics.&lt;br /&gt;
* Implemented and tested the `topic_id` field integration.&lt;br /&gt;
* Additional backend logic and tests are in progress.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Finalize the API integration with the front-end dropdown component.&lt;br /&gt;
* Implement logic to persist rubric–topic associations.&lt;br /&gt;
* Extend automated test coverage for the new functionality.&lt;br /&gt;
* Conduct usability testing and gather instructor feedback.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513 Wiki Page]]&lt;br /&gt;
* [https://github.com/RandomOscillations/reimplementation-back-end Reimplementation Back-End Repository]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-back-end/pull/172 Pull Request #172]&lt;br /&gt;
* [https://go.ncsu.edu/testing_video Testing Video]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''This page will be updated as development progresses to reflect new commits, API changes, and testing results.''&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166898</id>
		<title>CSC/ECE 517 Fall 2025 - E2557. Specialized rubrics for different topic types</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2025_-_E2557._Specialized_rubrics_for_different_topic_types&amp;diff=166898"/>
		<updated>2025-10-29T19:41:10Z</updated>

		<summary type="html">&lt;p&gt;Apimbert: Created page with &amp;quot;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =  == Overview == In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.    The goal of this project is to enable instructors to assign **different rubrics to different project topics**, allowing for...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Fall 2025 – E2557. Specialized Rubrics for Different Topic Types =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In the current Expertiza system, all projects within a course share a single rubric. This means that projects of different types — such as refactoring projects, testing projects, or front-end projects — must be evaluated using the same criteria.  &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to enable instructors to assign **different rubrics to different project topics**, allowing for more accurate and flexible assessment methods.  &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Expertiza supports a variety of project types across CSC/ECE 517 courses. However, because only one rubric can be assigned to a course at present, instructors cannot tailor rubrics to the distinct expectations of each project type.  &lt;br /&gt;
&lt;br /&gt;
By implementing specialized rubrics per topic, the evaluation process can better reflect the unique goals and deliverables of each project type.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
* By default, each course project uses the rubric specified on the **Rubrics** tab.&lt;br /&gt;
* On the **Topics** tab (in the Assignment Edit page), a **dropdown** should appear next to each topic.  &lt;br /&gt;
  * This dropdown allows instructors to choose a rubric specific to that topic.&lt;br /&gt;
  * If no rubric is selected, the assignment’s default rubric is used.&lt;br /&gt;
* The **signup sheet** interface should display the rubric chosen for each topic.&lt;br /&gt;
* The **rubric-selection logic** should not reside within the `signup_sheet_controller`.  &lt;br /&gt;
  * Any non-topic-related logic should instead be handled in another controller or helper.&lt;br /&gt;
* A new column, `topic_id`, must be added to the `assignment_questionnaires` table to link a questionnaire to a specific topic.&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
This project builds on prior work from [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513]], which reimplemented the topic management system.  &lt;br /&gt;
Key references:&lt;br /&gt;
* [https://github.com/RandomOscillations/reimplementation-back-end Reimplementation Back-End Repository]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-back-end/pull/172 Relevant Pull Request]&lt;br /&gt;
* [https://go.ncsu.edu/testing_video Testing Video]&lt;br /&gt;
&lt;br /&gt;
Be cautious when modifying existing code — particularly controllers and serializers — to maintain clear separation of concerns.&lt;br /&gt;
&lt;br /&gt;
== Required Modifications ==&lt;br /&gt;
* Extend the functionality introduced in Project E2513 to support rubric–topic associations.&lt;br /&gt;
* Introduce `topic_id` to the `assignment_questionnaires` table.&lt;br /&gt;
* Implement API endpoints to retrieve rubrics per assignment, including their associated topics.&lt;br /&gt;
* Write automated tests to ensure the correctness of the new features.&lt;br /&gt;
&lt;br /&gt;
== Progress So Far ==&lt;br /&gt;
We are the **E2557 team**, responsible for the development of ''Specialized Rubrics for Different Topic Types''.  &lt;br /&gt;
&lt;br /&gt;
Completed and ongoing work includes:&lt;br /&gt;
* Identified and verified prior functionality from the **E2552** team:&lt;br /&gt;
  * Added the rubric dropdown to the assignment topics page.&lt;br /&gt;
  * Introduced the `topic_id` field to the `assignment_questionnaires` table.&lt;br /&gt;
* Added an **API endpoint** that retrieves rubrics for a given assignment, serialized together with their assigned topics.&lt;br /&gt;
* Implemented and tested the `topic_id` field integration.&lt;br /&gt;
* Additional backend logic and tests are in progress.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Finalize the API integration with the front-end dropdown component.&lt;br /&gt;
* Implement logic to persist rubric–topic associations.&lt;br /&gt;
* Extend automated test coverage for the new functionality.&lt;br /&gt;
* Conduct usability testing and gather instructor feedback.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[CSC/ECE_517_Spring_2025_-_E2513._Reimplement_sign_up_topic.rb_as_project_topic.rb|Project E2513 Wiki Page]]&lt;br /&gt;
* [https://github.com/RandomOscillations/reimplementation-back-end Reimplementation Back-End Repository]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-back-end/pull/172 Pull Request #172]&lt;br /&gt;
* [https://go.ncsu.edu/testing_video Testing Video]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''This page will be updated as development progresses to reflect new commits, API changes, and testing results.''&lt;/div&gt;</summary>
		<author><name>Apimbert</name></author>
	</entry>
</feed>