Red Stet
← Back to Help
Help · For teachers & students · Tier 3 — Advanced features

Group assignments

Each team shares one draft. Every block carries the name of the student who wrote it — and stays attributed when a teammate edits or moves it. Covers the Solo/Group toggle, the manager, the per-block authorship trail, and how grading splits between team and individual.

Solo vs. Group — the toggle kind

Every assignment is Solo (default) or Group. The toggle sits below Instructions.

Group is for artifacts that have to be one piece — co-authored research report, panel response, collaborative editorial. If students should discuss a shared idea but each submit their own, stay on Solo and use peer review.

Saving a group assignment opens the group manager. A second field — How groups form — picks among four flavors.

No Solo → Group switch after creating. Archive and recreate if you mis-toggled.
Assignment type
Solo Each student submits their own work.
Group Students collaborate on a shared doc. You'll set up groups after creating.

Three ways groups get formed groupFormationMode

After picking Group, the modal shows How groups form:

  • Teacher-assigned — build every team by hand. Use for explicit control (mixing ability, splitting friends, pairing mentor/mentee).
  • Auto-assign — random — shuffles the roster into groups of N. Use for quick K-8 work.
  • Auto-assign — balanced — same shuffle, spreads tagged students evenly (one ESL per group, one honors per group).
  • Student-self-form — students see forming groups and unplaced peers, pick or create their own up to a cap. Use for HS/college.

Mode is changeable until the first group fills. After that, switching keeps existing groups until you Auto-assign now, which archives and rebuilds.

How groups form
I'll assign students by hand You build every team in the manager.
Auto-assign at random Red Stet shuffles the roster into groups of N.
Auto-assign — balance by tag Spreads tagged students (ESL, honors, …) evenly across teams.
Let students form their own groups Students join, leave, and create groups up to the cap.

Auto-assign — random groupTargetSize

Set target size (default 4). Auto-assign now shuffles into ⌈roster ÷ N⌉ groups named Group 1, Group 2, etc. First student per group becomes lead.

23 students at target 4 → five groups of 4 plus one of 3. No padding. Roster smaller than target → one group with everyone.

Re-running archives the prior round (memberships soft-removed, group docs preserved) and reshuffles. Warn the team first — text in an archived doc stays there, not in the new one.

Assignment groups ×
Formation: auto-random — target size 4.
Auto-assign now
Group 14 members
Ava Chen (lead) Ben Kowalski Diego Reyes Maya Okafor
Group 24 members
Lila Martinez (lead) Tom Park Sara Lee Eli Singh

Auto-assign — balanced by tag groupBalanceTags

Same shuffle as random, but uses enrollment tags to spread cohorts evenly. Type tag names into Balance tags, comma-separated:

  • ESL — multilingual learners one-per-group.
  • honors — advanced writers spread so no team is stacked.
  • IEP, 504 — accommodations distributed.

The algorithm deals tagged cohorts round-robin first, then fills with untagged. Close enough for most class sizes — 3 ESL across 5 groups → 3 groups with one ESL each, 2 without.

Tags are case-insensitive strings matched against the enrollment tags column.

Assignment settings
Formation mode
Auto-assign — balance by tag
Target size
4
Balance tags
ESL, honors
Resulting deal — 3 ESL + 4 honors across 6 groups of 4:
G1 · ESL · honors G2 · ESL · honors G3 · ESL G4 · honors G5 · honors G6 · (none)

Student-self-form groupFormationLockedAt

Set target size. After publish, students see a Join or start a group chip. Two halves:

  • Forming groups list — every active group, member chips, Join / Leave. Capped groups show Full.
  • Available students sidebar — not-yet-placed students.

Starting a team: name + Create & join. Creator becomes lead.

Locking formation

Lock formation freezes joins, leaves, and creates. Existing groups keep working. Reversible — unlock when a late student needs to slot in.

Form your group ×
Target group size: 4. You can only be in one group per assignment.
Team Citrus
Create & join
The Eliot Group2/4 members
Ava Chen (lead) Diego Reyes
Join
The Morrison Project4/4 members
Lila Martinez (lead) Tom Park Sara Lee Eli Singh
Full

Setting up groups after creating

Saving a group assignment opens the Assignment groups manager. Each row is one team.

Type a name in New group"Team Citrus", "The Eliot Project"Create. Red Stet inserts a row in assignmentGroups and spins up an empty shared doc owned by you, writable by members.

Names show in the team chip and the shared draft title — keep them short ("Essay 2 — Team Citrus").

No size cap. Internal limit: 200 groups per assignment.

Assignment groups ×
Create
Team Citrus 0 members
No members yet.

Assigning students & picking a lead groupMemberships.role

Each row has an Add member form: email, role, Add. Student must already be enrolled.

Two roles: member (read + write), lead (member + lock + submit). Co-leads allowed.

Lead is optional. No lead → no submit. Re-add as lead to promote, member to demote. Both idempotent.

Removing a member

× on a chip stamps removedAt; row stays. Past blocks keep authorship — removal is forward-looking. Personal submission doc is unaffected; they lose write access to the shared draft.

Assignment groups ×
Team Citrus 3 members
Ava Chen (lead)× Ben Kowalski× Diego Reyes×
Add

The shared document assignmentGroups.groupDocId

One shared doc per group, created on Create. Title pre-fills as <assignment title> — <group name>.

Active members write unless locked or submitted. Edits propagate via Convex reactivity. Two students in the same paragraph is last-write-wins — no merge. Norm-set teams to "claim a section before you write in it."

Teachers can always read and edit, including post-submission. Removed members keep read until archive.

The shared doc is separate from each student's personal submission. Every member also has a personal draft for private writing before sending text to the team.
Essay 2 — Team Citrus
AC Beloved's repetition of the unspeakable does not soften the trauma — it stages it.
BK The novel returns again and again to the same scenes from new angles…
DR Morrison forces the reader into Sethe's broken time, where memory is not retrieval but ambush.
Each block carries an author orb. Hover for the full name and edit history.

Personal drafts and submitting chunks

Opening a group assignment lands the student on their personal draft — a solo submission doc only they and the teacher can read. Scratch space: outlines, paragraphs, pitches. Invisible to teammates until sent.

A header chip reads Submit selection to group: <group name>. Flow:

  1. Highlight a passage.
  2. Click the chip.
  3. Confirm — modal shows text, char count, chain hash.
  4. Passage appends to the shared doc as a new block with authorship attached.

Teachers see both surfaces: the team's draft and each member's scratch.

+ Submit selection to group: Team Citrus
Confirm submission to group
Morrison forces the reader into Sethe's broken time, where memory is not retrieval but ambush.
92 characters · ~15 words · attributed to you with chain hash a3f9c2e1d8b4…
Cancel Send to group draft

Per-block authorship tracking blockAuthorship

What distinguishes Red Stet from a generic shared editor. Every paragraph, heading, list, and blockquote has a stable blockId and a blockAuthorship row recording original author, subsequent editors, edit kind, timestamp, char delta.

Five event kinds:

  • insert — first appeared (typed fresh or imported from personal draft)
  • edit — text changed
  • move — reordered
  • split — one became two (Enter mid-paragraph)
  • merge — two fused

Detection is client-side: a MutationObserver snapshots blocks 1.5s after the last keystroke and diffs. Each event fires recordBlockEdit. Append-only.

The original author stays the original author. Even if a teammate moves, rewords, and splits your block, originalAuthorUserId doesn't change. Subsequent edits pile up alongside.
Block history — “Morrison forces the reader…”
insert
Diego Reyes imported from personal draft
+92 chars · 2:14 PM
edit
Ava Chen rewrote the second clause
+18 chars · 2:31 PM
move
Ben Kowalski moved up to paragraph 2
2:44 PM
split
Ava Chen split into two sentences
3:02 PM
The original author (Diego) doesn't change — only the editing tail grows.

Provenance for groups sourceDocId · sourceChainHead

Per-student, not per-group. Each member records on their personal draft. Sending a chunk to the shared doc carries a back-reference — sourceDocId, sourceBlockId, sourceChainHead, provenance length.

Click any block in the shared doc and trace it to the contributor's personal recording — Diego's "Morrison forces the reader…" typed at 2:11 PM, paused, revised, sent at 2:14 PM, including paste warnings, AI-flag heuristics, rhythm anomalies.

For blocks typed directly into the shared doc, the chain head is captured at the edit moment. The authorship row is the provenance.

Authorship rows are protected. Only active members and the teacher write them. The server checks group membership on every write.
Trace this block
Group doc — Team Citrus
Block g-a3f9c2e1
Source ↓
Diego Reyes — personal draft
Chain head a3f9c2e1d8b4…
42 minutes of typing · 1 paste flag (resolved)

Teacher's contribution view

Opening a group submission rolls every block-authorship row into a breakdown. Two tables — Original authorship (contributor, blocks, edits to their blocks) and Editing activity (editor, events, char delta) — plus a per-block trail.

How the math works:

  • Edits don't shift attribution. Ben rewording half of Ava's paragraph keeps it Ava's.
  • Inserts count for the inserter. Whoever typed it first owns the block, even if a teammate 4× expands it later.

Diagnostic, not grade-binding. A 70/15/15 split tells you who carried the team; you decide whether grades reflect it.

Original authorship
ContributorBlocks authoredTotal edits to their blocks
Ava Chen74
Diego Reyes43
Ben Kowalski21
Editing activity
EditorEdit eventsChar delta
Ava Chen111,420
Diego Reyes6820
Ben Kowalski3310
Per-block trail follows beneath, sorted most-recently-modified first.

Locking and submitting lockedAt · submittedAt

The lead can lock to freeze edits, and unlock. Teachers can override either way.

Submit is terminal and lead-only. submittedAt stamps, the doc locks, and goes read-only for everyone but the teacher. No un-submit — archive and recreate for a do-over.

Members see state as a banner. Otherwise the chip reads "Draft open — your team can still write."

Lock is reversible. Submit is not. Past submit, only the teacher can revive.
Draft locked by Ava Chen (lead) · 3:14 PM
Unlock
Submitted by Ava Chen (lead) · 3:22 PM
Read-only for the team
The lock banner sits at the top of the shared doc. Submit replaces it with the green confirmation.

Grading the group submission

Grade the shared doc like a solo — scored rubric, free-form comment, annotations. The contribution breakdown sits alongside the rubric.

The saved rubric is the team grade — every member scored on the same criteria.

Per-student grade adjustment

When contribution wasn't even, a Per-student adjustment sidecar nudges a member's percent off the team grade:

  • Delta — signed percent-points. Positive lifts, negative drops.
  • Reason — optional, saved with the adjustment. A delta without narrative reads as arbitrary.
  • Effective grade = clamp(0, team% + delta, 100).
  • Team rubric grade is unchanged for other members.
  • AGS passback uses each member's effective grade.

Full walkthrough in the Grading doc's Per-student adjustment section.

Group submission — Team Citrus
Team rubric score: 88 / 100
Shared across all three members.
Per-student adjustment — Ava
Delta +5
Team grade 88% +5 = 93%
Led the revision passes, coordinated citations across all three drafts.

Group + peer review peerReviews.reviewerGroupId / reviewedGroupId

With groupMode === 'group' and peer review on, the auto-fanout routes between groups, not individuals. Each group reviews N other groups; every member sees the same assigned reviews.

Each peerReviews row carries:

  • reviewerGroupId — group doing the review. Reviewer-user fields exist for accountability; the unit is the group.
  • reviewedGroupId — group being reviewed. No reviewed-user field — the artifact is the team submission.

Fanout matches solo: reviewers per submission = 2 means every group is read by two others; every group reviews two others. Groups don't review themselves.

Anonymization across groups

Reviewer identity is hidden from the reviewed group by default. setGroupReviewerRevealed flips a per-pair flag, and the reviewed group sees who wrote the feedback.

The reviewer-side notification — "your group's identity has been revealed" — is a follow-up.

Fanout — group peer reviews
Team Citrus
reviews → Team Maple, Team Pine
Team Maple
reviews → Team Citrus, Team Pine
Team Pine
reviews → Team Citrus, Team Maple
Reviewed group's view
From: Anonymous group
The thesis is strongest in the second paragraph — pull it up to the open and revise downward from there.
Teacher can flip reviewerRevealed to expose the reviewing team's name.

Gotchas & limits

  • One group per student per assignment. Red Stet picks the first active membership.
  • Concurrent same-paragraph edits are last-write-wins. Two members within the 1.5s debounce overwrite each other. Have teams claim sections.
  • Block-authorship detection is best-effort. Split/merge uses prefix/suffix heuristics; unusual reorgs may attribute as fresh insert. Clean-insert authorship is always correct.
  • Group peer review pairs groups, not individuals. See group + peer review.
  • Removed members lose write access; past blocks stay.
  • No Solo → Group switch post-creation.

Hit a case this doc doesn't cover? Email feedback.

Quick reference
kind
Solo or Group — set on create, immutable.
groupFormationMode
teacher-assigned · auto-random · auto-balanced · student-self-form.
groupTargetSize
Cap N for auto-assign + self-form. Defaults to 4 in code.
groupBalanceTags
Tag names spread across groups under auto-balanced.
role
Member (write) or Lead (write + lock + submit).
groupDocId
One shared doc per group, created on group create.
blockAuthorship
Per-block insert / edit / move / split / merge trail.
lockedAt
Lead-controlled freeze; reversible until submit.
submittedAt
Terminal — read-only for the team, gradeable by teacher.

Related

Back to the help library.

Missing something? Email feedback.