You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Rename scoreboard 'wave' to 'assignment' and document optional features
- Replace 'wave' with 'assignment' in SCOREBOARD.md and in comments
and user-facing strings under webapp/ref/{view/api.py, core/scoring.py,
model/exercise_config.py}.
- Add an "Optional Features" section to README.md describing the groups
and scoreboard settings, both disabled by default and configured from
the admin system-settings page.
Copy file name to clipboardExpand all lines: README.md
+9Lines changed: 9 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -176,3 +176,12 @@ User: ref
176
176
Database name: ref
177
177
Password: See settings.yaml (secrets.postgres_password)
178
178
```
179
+
180
+
### Optional Features
181
+
The following features are disabled by default and can be enabled from the admin UI at `/admin/system/settings/`.
182
+
183
+
#### Groups
184
+
Allows students to be organized into named groups with a configurable maximum size. Students pick a group during registration, and admins can manage the available groups and reassign students afterwards. Enable via the `GROUPS_ENABLED` setting and configure the per-group capacity via `GROUP_SIZE`.
185
+
186
+
#### Scoreboard
187
+
A public leaderboard at `/scoreboard` that ranks students based on their exercise submissions. Exercises can be grouped into assignments, the ranking strategy is selected via `SCOREBOARD_RANKING_MODE`, and the visual layout via `SCOREBOARD_VIEW`. Enable via `SCOREBOARD_ENABLED`; optionally set `LANDING_PAGE` to `scoreboard` to use it as the default landing page.
Copy file name to clipboardExpand all lines: docs/SCOREBOARD.md
+13-13Lines changed: 13 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,25 +4,25 @@ This document describes how to integrate a scoreboard into REF, based on the pro
4
4
5
5
## Overview
6
6
7
-
The scoreboard is a public-facing page that shows team/student rankings based on submission scores. Exercises are grouped into **waves** (time-boxed rounds). Each exercise defines a **scoring policy** that maps raw submission scores to scoreboard points. The frontend fetches data via two JSON APIs and renders rankings, badges, charts, and per-challenge plots client-side.
7
+
The scoreboard is a public-facing page that shows team/student rankings based on submission scores. Exercises are grouped into **assignments** (time-boxed rounds). Each exercise defines a **scoring policy** that maps raw submission scores to scoreboard points. The frontend fetches data via two JSON APIs and renders rankings, badges, charts, and per-challenge plots client-side.
8
8
9
9
## What exists in `raid/raid`
10
10
11
11
The prototype adds:
12
12
13
-
-**Two API endpoints** (`/api/waves`, `/api/submissions`) that return exercise metadata and submission scores as JSON.
13
+
-**Two API endpoints** (`/api/assignments`, `/api/submissions`) that return exercise metadata and submission scores as JSON.
14
14
-**Three new Exercise model fields**: `baseline_score`, `badge_score`, `badge_points` — parsed from the exercise YAML config.
15
15
-**A scoreboard page** (`/student/scoreboard`) with a Jinja template and ~2300 lines of client-side JS (`scoreboard.js`, `utils.js`, `plots.js`) using Chart.js.
16
16
-**Badges**: per-challenge achievement icons shown in the ranking table when a team's score exceeds `badge_score`. Each challenge can have custom SVG/PNG assets with a default fallback.
17
17
-**System settings**: `LANDING_PAGE` (choose which page students see first), `DEMO_MODE_ENABLED` (serve dummy JSON data).
18
-
-**A demo/dummy data system** (`dummies/waves.json`, `dummies/submissions.json`) for development without real submissions.
18
+
-**A demo/dummy data system** (`dummies/assignments.json`, `dummies/submissions.json`) for development without real submissions.
19
19
20
-
The prototype is tightly coupled to a fixed 3-waves x 3-challenges layout and hardcodes wave/challenge indices in the template. It also bundles all scoring logic (ranking, badges, rates) in the frontend JS.
20
+
The prototype is tightly coupled to a fixed 3-assignments x 3-challenges layout and hardcodes assignment/challenge indices in the template. It also bundles all scoring logic (ranking, badges, rates) in the frontend JS.
21
21
22
22
## What already exists in `dev`
23
23
24
24
-`SubmissionTestResult.score` (float, nullable) — already in the model. This is the raw per-submission score.
25
-
- Exercise `category` field — used as the wave/group name.
25
+
- Exercise `category` field — used as the assignment/group name.
26
26
-`Submission.all()`, exercise deadlines, the full submission lifecycle.
27
27
28
28
## ExerciseConfig: Separating Administrative from Build-Time Config
@@ -41,7 +41,7 @@ class ExerciseConfig(db.Model):
41
41
42
42
id: Mapped[int] # PK (integer)
43
43
short_name: Mapped[str] # unique constraint
44
-
category: Mapped[Optional[str]] #wave/group name
44
+
category: Mapped[Optional[str]] #assignment/group name
45
45
scoring_policy: Mapped[Optional[dict]] # JSON, see Scoring Architecture
0 commit comments