Skip to content

feat(gradebook): external assessments with bounded grades and CSV import#8456

Open
LWS49 wants to merge 1 commit into
lws49/feat-gradebook-weighted-viewfrom
lws49/ext-pr1-foundation
Open

feat(gradebook): external assessments with bounded grades and CSV import#8456
LWS49 wants to merge 1 commit into
lws49/feat-gradebook-weighted-viewfrom
lws49/ext-pr1-foundation

Conversation

@LWS49

@LWS49 LWS49 commented Jun 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds external assessments to the gradebook, the only gradebook columns a professor can create, edit, and delete, on top of the weighted gradebook view (#8436). Each external assessment carries optional floor/cap bound flags, ships with a CSV grade-import core, and stores grades at decimal(5,2) so two-decimal imports (Canvas, SoftMark) round-trip without silent rounding. Also adds the materializedDefaultWeights helper, so a later mutating action that sets a real weight while the equal-split default is showing can freeze that split first (wired up in the next PR).

Design decisions

  • External grade/max columns use decimal(5,2); native grade columns stay decimal(4,1) - externals are fed by Canvas/SoftMark which emit two decimals, while native grading is Coursemology-native where one decimal is fine. Widening every grade column would be a larger, separate change.
  • Floor and cap flags are applied only at weighted-compute time (in effectiveGrade), never mutating the stored grade - the raw "All assessments" view always shows the true entered value, and toggling a flag re-interprets rather than rewrites data.

Regression prevention

Covers: external assessment column-id building, the external assessment and external grade models, store/operations reducers, the import wizard, gradebook table rendering, and the new materializedDefaultWeights helper (frontend suites green - 262 tests). Migrations (20260615 create external tables, 20260616 link externals to contributions, 20260622 bounds, 20260623 decimal(5,2) precision) are reversible. Ruby model/controller specs run on push/CI.

@LWS49 LWS49 force-pushed the lws49/feat-gradebook-weighted-view branch 9 times, most recently from 16ea8b5 to 1c5b845 Compare June 26, 2026 08:51
@LWS49 LWS49 force-pushed the lws49/ext-pr1-foundation branch 2 times, most recently from 1f15ebc to 441d043 Compare June 26, 2026 10:34
…ation, inline grade entry)

Foundation layer for external assessments: data model + migrations, gradebook read serialization, and inline grade entry (update_grade). Management UI (panel, add/edit/delete), weight integration, and CSV import are introduced in later PRs of the stack.
@LWS49 LWS49 force-pushed the lws49/ext-pr1-foundation branch from 441d043 to aeb0e66 Compare June 26, 2026 10:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant