Skip to content

feat(gradebook): bounded grade entry, out-of-range flags, and save confirmation#8464

Open
LWS49 wants to merge 1 commit into
lws49/feat-ext-assessments-pr2-manage-reorderfrom
lws49/feat-ext-assessments-pr3-validation
Open

feat(gradebook): bounded grade entry, out-of-range flags, and save confirmation#8464
LWS49 wants to merge 1 commit into
lws49/feat-ext-assessments-pr2-manage-reorderfrom
lws49/feat-ext-assessments-pr3-validation

Conversation

@LWS49

@LWS49 LWS49 commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator

Summary

Hardens external grade entry and surfaces out-of-range data. Grade and max entry are capped at the decimal(5,2) ceiling at the input layer; negative manual entry is allowed (floor-at-zero presumes penalty columns) while non-numeric input is rejected at entry instead of being silently discarded. Over-max and below-zero grades show an inline indicator whose tooltip copy is weighted-view-aware. A persistent below-the-tabs banner aggregates how many grades across how many externals are outside their range. A successful inline edit now confirms with a persistent toast that echoes the student, assessment, and old-to-new grade.

Design decisions

  • Inline max-marks editing was removed; max is editable only through the panel's Edit prompt - max is a column-definition value (the subheader), not per-student data, so it belongs in a deliberate dialog, and it is coupled to the "Cap at max" toggle which only the Edit prompt shows alongside it.
  • Out-of-range is surfaced at distinct layers with distinct jobs: per-cell icons (locate) and the aggregate banner (review-before-export), each scoped to a bound flag that is on, since nothing is clamped when a flag is off. The import flow adds an entry-time Verify warning in a later PR.
  • The save-confirmation toast is persistent (no auto-dismiss) and echoes the full mutation rather than a generic "Saved" - external grades flow to exported finals and the optimistic update has already discarded the old value from the cell, so the toast is the only in-session record of what changed and helps catch a row/column misclick. There is no undo button, which the toast wrapper does not support and the re-editable cell makes unnecessary.

Regression prevention

Covers: out-of-range computation, the OutOfRangeAlert component and the GradebookIndex summary, cap-at-two-decimals entry, below-zero and over-max icon presence/absence, weighted vs non-weighted tooltip copy, the read-only max cell, the active-cell accept/revert controls, and the save-confirmation toast (fires with student/assessment/old-to-new, does not fire on a no-op edit). No change to stored grades - all bound and warning behavior is read-time only. This PR is frontend-only.

@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr2-manage-reorder branch from 947f45d to e26ee62 Compare June 28, 2026 14:41
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr3-validation branch from 38c0e8e to c75dd03 Compare June 28, 2026 14:42
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr2-manage-reorder branch from e26ee62 to dc5c67b Compare June 29, 2026 04:43
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr3-validation branch from c75dd03 to 32c59d0 Compare June 29, 2026 04:43
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr2-manage-reorder branch 3 times, most recently from 9fab10f to d256c98 Compare July 2, 2026 06:39
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr3-validation branch 3 times, most recently from 79fe3b4 to b9d4ef3 Compare July 2, 2026 09:16
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr2-manage-reorder branch from d256c98 to 96e03c6 Compare July 2, 2026 09:16
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr3-validation branch from b9d4ef3 to fc1a3fb Compare July 2, 2026 10:11
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr2-manage-reorder branch 2 times, most recently from d86b4c4 to cf994c1 Compare July 2, 2026 11:19
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr3-validation branch 2 times, most recently from 4498638 to 03634d3 Compare July 2, 2026 11:37
Base automatically changed from lws49/feat-ext-assessments-pr2-manage-reorder to lws49/feat-gradebook-export July 2, 2026 11:50
@LWS49 LWS49 force-pushed the lws49/feat-gradebook-export branch from afbf1ce to 359f808 Compare July 2, 2026 11:59
@LWS49 LWS49 changed the base branch from lws49/feat-gradebook-export to lws49/feat-ext-assessments-pr2-manage-reorder July 2, 2026 12:00
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr2-manage-reorder branch from cf994c1 to 5a7ff91 Compare July 2, 2026 12:15
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr3-validation branch from 03634d3 to d36dee7 Compare July 2, 2026 12:15
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr2-manage-reorder branch 2 times, most recently from 72fa402 to 232064d Compare July 2, 2026 14:46
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr3-validation branch 2 times, most recently from dee2b98 to 88b2a31 Compare July 2, 2026 15:05
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr2-manage-reorder branch from 232064d to 2796717 Compare July 2, 2026 15:27
…warnings

External grade cells gain decimal-bounded inline editing with explicit
accept/revert controls, a saving indicator, and a persistent save
confirmation that echoes the student, assessment, and old → new grade so a
row/column misclick is caught. Over-max and below-zero warning markers flag
out-of-bound values. The weighted view annotates contributions that an
active bound capped or floored. GradebookIndex surfaces an out-of-range
summary alert above the table, and threads weightedViewEnabled into
GradebookTable so the cell messaging matches the active view.

m
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr3-validation branch from 88b2a31 to 173bc6f Compare July 2, 2026 15:28
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