Grading a submission
Once a student hits Submit, the assignment moves into your grading queue. One screen: the doc on the canvas, the rubric in the editorial memo, the provenance recording one click away. Covered here: rubric scoring, inline proofreader marks, the recording, returning work, bulk grading, TA capabilities, LMS gradebook sync.
- Opening a submission for grading
- Default-open review sidebar
- The rubric panel
- Letter or numeric scale, per criterion
- Letter-grade overlay
- Sub-task weighting
- Grade comment templates
- When there's no rubric
- Reflection block — student responses
- Per-student grade adjustment (group work)
- Inline proofreader marks
- The provenance recording — look here first
- Returning work — the lifecycle
- Returning for revision
- Grading by a TA
- Bulk grading — moving through the stack
- When grades sync to the LMS gradebook
- When students know they were graded
Opening a submission for grading
Start on the Teacher dashboard. Pick a class, expand an assignment — one row per student: Not started, In progress, Submitted, or Graded. Click a Submitted row:
- The student's doc loads on the canvas.
- The Editorial Memo opens on the right: rubric scorer up top, submission roster below.
- The opened submission is highlighted in the roster.
From the Classwork tab, clicking an assignment title opens the most useful submission: last one you had open, otherwise oldest still-ungraded (FIFO), otherwise any submission. No blank dashboard.
Score, mark, watch the recording, return — all on this surface.
Default-open review sidebar
The review sidebar — rubric, reflection, status, return-for-revision — is a collapsible panel right of the canvas. Open by default when you land on a submission.
Want the canvas full-width until you're ready? Flip the Default: open toggle on the Rubric header to Default: closed. Saves to your account, follows you across devices.
Per-user (users.preferences.reviewSurfaceDefault), not per-class or per-assignment.
The rubric panel rubricScore
If the assignment has a rubric, the editorial memo shows the rubric scorer first — one row per criterion, scoring buttons across. Tap a level. The header updates from 0 of 4 scored to All scored.
Save is idempotent. The first save flips status to graded and stamps gradedAt. Edits update the score without re-bumping status.
Letter or numeric scale, per criterion
Each criterion picks its own scale: Letter (default, four named levels) or Numeric (1 through a max). Mix in one rubric — holistic "Argument" on letter next to "Citations" out of 10.
- Letter — four buttons: Beginning, Developing, Proficient, Excellent. Maps to 1–4. For judgment calls.
- Numeric — N buttons 1 through your max (default 10). For countable criteria or 10-point department conventions.
Switching is per-criterion. Storage is identical (integer level), so historical scores stay readable across edits.
LMS passback weights each criterion by its own max — 4 of 4 on letter counts the same as 10 of 10 on numeric. See AGS section for the math.
Letter-grade overlay letterGradeScale
The scorer produces 0–100 (sum of chosen levels over max). The letter-grade overlay renders that number with a letter — 82% (B-) in the rubric header, student's grade panel, and workspace status line.
Per-classroom. Open Classroom defaults, pick a preset or build custom. Three presets:
- Standard ± — US plus/minus,
A 93,A- 90,B+ 87, ...,F 0. Default. - A–F only — whole letters at 90/80/70/60.
- Pass/Fail (60%) —
Pat 60,Fbelow.
Custom: add rows with a letter label (up to 4 chars) and an inclusive lower bound. Save rejects non-descending thresholds or duplicate percents.
Sub-task weighting subTasks[].weight
Multi-part assignments support per-part weighting. Default even. Set Weight on a sub-task in the assignment editor.
Weights are relative. 1 / 1 / 2 spreads to 25% / 25% / 50%; 2 / 3 / 5 to 20% / 30% / 50%. The editor shows the computed share per row.
Completion rolls up: done = 100%, in-progress = 50%, not-started = 0%. Students see the share label on their checklist — a 50%-of-grade Part 2 reads "50% of grade" next to its title.
2 / 5 / 3. Shares sum to 100%; rolled-up completion is 85% (Parts 1+2 done = 70%, Part 3 in progress = 15%).
Grade comment templates gradeCommentTemplates
Teachers re-type the same phrases all term — "Strong topic sentence, tighten the second paragraph." "Watch comma splices." Save once, paste with one click.
The rubric panel carries a Comment for student textarea. Templates ▾ opens your library; Save as template stores the current draft.
Two scopes:
- Private — only you, across every class. Default.
- Classroom — visible to every staff member on that class. House-style phrasings.
Rename, delete, or rescope from the library. Paste is additive — clicking a template appends, so you can combine phrasings without losing an in-progress note.
When there's no rubric
Quick journal entries, sub-task check-ins, scaffolded warm-ups often don't earn a rubric. The panel stays visible and reads "No rubric is attached to this assignment yet" with a jump to the assignment editor.
You can still mark the submission graded — the status flip is the "I'm done" signal. Open the kebab on the editorial memo and pick Mark as graded. The student sees the change.
For an LMS numeric grade, attach a rubric. Without one there's nothing to normalize to 0–100. Marks and status flip travel without a number; LMS grades don't.
Reflection block — student responses
If the assignment carries reflection prompts, the workspace shows the student's responses inline beneath the rubric. No separate tab.
Each prompt is a card: prompt in sage, response in body text. Required prompts carry a Required badge. Blank prompts show "No response".
Read-only. Responses are owned by the student, saved through submissions.saveSelfAssessment.
Per-student grade adjustment (group work)
Group assignments grade against one shared rubric — one team score. The Per-student adjustment sidecar (group only) nudges an individual percent up or down without re-scoring.
Signed delta in percent-points plus optional reason:
- Delta — -100 to +100. Positive lifts, negative drops.
- Reason — free-form text, saved with the adjustment for audit.
The live summary shows the effective percent before you commit — "Team grade 80% +5 = 85%".
What flows where
- Team rubric grade stays unchanged. Other members see the same scored rubric.
- Effective grade = clamp(0, team% + delta, 100). 95% team with +10 lands at 100.
- AGS passback uses the effective grade. Saving the adjustment after the rubric re-posts to the LMS.
- Clearing drops the delta; the student returns to the team grade.
Sidecar only renders on group assignments (assignment.kind === 'group').
Inline proofreader marks marks
Red Stet's inline-comment layer is a proofreader's mark system — the same one students use on their drafts. Switch the canvas to mark-up mode and edits land as proofreader glyphs: strikethrough del, caret-flagged ins, circled awk or r-o in the margin, capitalization / italics corrections inline.
Each mark anchors to a block and character range on the student's doc, not a margin sidebar. Mark a word "awk" and the mark stays with that word as the student edits around it. Marks render over the prose — marginalia on the page, not a separate comments doc.
Authorship is recorded. The student sees marks attributed to you (or your TA). Student-made marks on their own draft are separate.
^ below points to the spot. Circled awk is a margin mark on a range.
The provenance recording — look here first
Every doc is captured as a provenance recording: chronological log of keystrokes, pastes, pauses, plus content-similarity flags against the baseline. Open it before you grade — it surfaces what the prose alone can't.
Timeline across the session with dots wherever the system flagged something — a paste off the baseline, a vocabulary jump, a fast burst. Each flag has a category and timestamp. Click to jump to that moment on the canvas and replay the keystroke window.
For each flag, pick a decision: confirmed-issue, non-issue, or pending. Counts ride into the AGS comment field on save — "Provenance review: 2 confirmed · 1 non-issue · 0 pending". Same counts surface to the student.
Decisions live on the submission, server-side. Reopen on any device and the panel arrives with your earlier calls stamped. Co-teachers and TAs see each other's decisions, so handoffs don't restart from blank.
Students can appeal from their assignment view (see Appeals). Appeals land on the rubric's Student appeals sub-card with Acknowledge and Resolve actions.
Classroom owners can pre-configure surfacing per category, a severity floor, and first-pass suggestions in Classroom Provenance policy — capture stays unchanged; only the review queue is filtered.
Returning work — the lifecycle submission.status
Five states. not-started → in-progress → submitted → either graded (finalize) or returned-for-revision (back to the student). Students walk the first three; you choose between the last two. Saving the rubric flips to graded; Return for revision flips to returned-for-revision with a reason on the student's banner.
What each status means
not-started— assignment unopened. Roster row dimmed.in-progress— opened, draft exists. Peek at the draft from your dashboard for a one-on-one conference.submitted—submittedAtrecorded. Attempt cap enforced before re-submit. Grading-queue state.graded— rubric saved or Mark as graded used.gradedAtrecorded. Student sees the rubric.returned-for-revision— reason lands on a red banner with a Resubmit button. Next submit flips back tosubmittedand incrementsattemptCount(the return itself doesn't).
Status flips are role-gated. Students move between not-started, in-progress, submitted; only a teacher (or holder of gradeSubmissions) can flip to graded or returned-for-revision.
graded → (optional) AGS passback.
returned-for-revision → student resubmits → submitted + attemptCount++.
Returning for revision returnForRevision
For "send this back with comments but don't close it out." Button sits next to Save rubric. Modal: required reason, OK. The reason becomes the student's banner verbatim; status flips to returned-for-revision; submission-returned notification fans out.
Mechanically:
- Status flip — from
submitted(orgraded) toreturned-for-revision. - Reason stamping — modal text lands on
submission.returnReason;returnedAt+returnedByUserIdfollow. - No attempt refund —
attemptCountdoesn't move on return; the resubmit costs one. - Bell notification — glyph
↺, title "Returned: …", body is the first ~120 chars of your reason. - Email mirror — same subject, reason verbatim, CTA to the assignment. Both respect the student's
submission-returnedmute. - No LMS post — AGS only fires on Save rubric.
Returning requires gradeSubmissions, same gate as Save rubric. TAs can return by default.
returned-for-revision sits between submitted and graded; the student cycles within maxAttempts.
Grading by a TA gradeSubmissions
TAs grade by default. The capability is gradeSubmissions; TA and co-teacher roles ship with it on.
Grants:
- See the submissions roster (
listForAssignment). - Open any submission's doc and grading panel.
- Save rubric scores —
setRubricScoreis gated here. - Flip a submission to
graded. - Leave inline proofreader marks, attributed to the TA.
What a TA still can't do: edit the assignment (manageAssignments), add or remove students (manageRoster), change classroom defaults, rotate the join code. You keep structural decisions; the TA does throughput.
TA-graded submissions get the same gradedAt stamp and AGS passback. Students don't see "graded by TA" — the rubric is the rubric.
| Capability | Teacher | Co-teacher | TA |
|---|---|---|---|
| Open submissions | Yes | Yes | Yes |
| Save rubric score | Yes | Yes | Yes |
| Leave inline marks | Yes | Yes | Yes |
| Flip status to graded | Yes | Yes | Yes |
| Edit the assignment / rubric | Yes | Yes | No |
| Manage roster | Yes | Yes | No |
Bulk grading — moving through the stack
Twenty-eight essays don't grade themselves. Bulk review mode steps through a stack at speed without losing per-submission depth. Same surface (doc + editorial memo + recording) plus keyboard navigation and pre-rendered next states.
From an assignment's submissions panel — Open bulk review. The overlay docks at the top. Keys:
- J or → — next submission
- K or ← — previous
- G — next still-pending (skip graded)
- C — confirm all visible flags
- N — dismiss all visible flags
- Q or Esc — exit
List sorts pending-first. Rubric scores commit as you go — exit anytime, grades persist. Flag decisions persist server-side.
C and N are blunt — they hit every flag on the current submission. Use when flags cluster. For mixed cases, click individually.
C confirm all · N dismiss all · Q exit
When grades sync to the LMS gradebook AGS
If the assignment launched from Canvas, Schoology, Brightspace, or any LTI-1.3-AGS LMS, Save rubric fires an automatic score passback.
The pipeline
- Local save commits to Convex first. The grade is durable before any network call leaves the browser.
- Normalize: sum of chosen levels over sum of max levels, times 100, rounded. Four letter criteria all Excellent = 16/16 = 100. Three Proficient + one Excellent = 13/16 = 81. Numeric criteria use their own max. Mixed rubrics work the same way.
- Mint an OAuth2 access token against the LMS auth server, then POST an AGS Score-2.0 body to the assignment's lineitem.
- Provenance-review summary travels in the AGS
commentfield — "Provenance review: 2 confirmed · 1 non-issue · 0 pending". - A pill reads Posted to Canvas on success or Canvas sync failed on error.
Multi-LMS broadcast: if an assignment is bound to columns in more than one LMS, the score posts to every bound column.
lmsSyncFailures and retries from your dashboard. Common causes: LMS rotated its key, lineitem URL changed, network blip.
When students know they were graded
The instant Save flips a submission to graded: a bell titled "Graded: …" with the percent in the body, plus an email mirror. Both respect submission-graded mute in Settings → Notifications. Fires once on first flip; re-saves don't re-ping.
The student's rubric panel updates with scored levels, status graded, and gradedAt in the assignment header. The email CTA opens the assignment.
LMS-integrated classes: the AGS score posts back and the LMS sends its own grade-received notification per the student's preferences. LMS-routed students get pinged twice unless they mute one channel — by design.
Related
- Creating an assignment — attach the rubric, set attempt cap, decide LMS-bound.
- Co-teachers & TAs — grading capabilities per role.
- Connecting Red Stet to your LMS — AGS plumbing, multi-LMS broadcast, sync-failure recovery.
- Back to the help library.
Missing something? Email feedback.