Skip to content

6. Open questions

Only unresolved or partly settled decisions are listed here. Keep their original numbers: a missing number is in settled questions, which preserves the recorded answers and their rationale. Do not reuse numbers. An implemented assumption does not by itself settle a product decision.

The unmarked original questions 3 and 6 remain here: their current assumptions are implemented, but their rows contained no explicit settlement. Question 27 keeps its unresolved student-breakdown part; question 43 keeps its deferred audit.

# Question Current assumption / unresolved part
3 A late student in duration mode: full duration or common end? Full duration, the teacher may close manually
6 Do students see the classroom ranking? No, only their grade and the anonymous distribution
21 Restoring a soft-deleted question: does it exist, or should the filter go? F-QST-11 specifies the soft delete (the question leaves the pool, its published versions stay readable) and requires no way back. Yet the pool screen offers a "Deleted" filter (apps/web/src/pool/QuestionSearchBar.tsx, includeDeleted in pool/filters.ts) that lists deleted questions with nothing a teacher can do to them: no restore route, and, since the audit of 2026-09-22 (B-11), no restoreQuestion service either — it was deleted as speculative, having never had a caller. Open. Assumed for now: the filter stays, as the only way to see that a question was deleted rather than lost, and the pool keeps no restore. The two coherent endings are a POST /questions/:id/restore with the button the filter is missing, or dropping the filter and leaving a deleted question visible only through its frozen versions. Whichever is chosen, it settles both halves at once.
22 Code question: which wall-clock budget judges a VISIBLE case outside the grade? Since the audit of 2026-09-22 (R-06) the grade, the run route (POST /attempts/:id/run), the player and the editor's "try" share one rule (caseVerdict in packages/qt-code), comparison options included, except for time: the grade re-applies each case's own timeMs to the measured time, while the other three count only the runner's own timedOut, which is measured against the request's single, global budget. CodeStudent carries limits.timeMs but no per-case budget. The scenario is the one packages/qt-code/src/grade.test.ts pins ("times a case out on its own budget"): limits.timeMs = 2000, a case with timeMs: 200 that runs in 900 ms reads "Passed" in the player and "Timed out" (0 points) in the grade — the residue of the ADR-015 §2 gap. Open. Assumed for now: the player and the run route stay on the runner's timedOut, because a browser run's timing is not evidence (ADR-015) and the per-case budget is not published. The two coherent endings: carry each visible case's effective timeMs in CodeStudent and pass it to caseVerdict in the run route (and, if a browser timing is accepted as indicative, in the player), or drop per-case budgets altogether so the one global limits.timeMs is the only budget everywhere. Either one settles the three sites at once.
23 Grading queue: paginate GET /evaluations/:id/grading before a class of 100 meets it? Today gradingQueue (apps/api/src/modules/grading/service.ts) answers every cell of the selection in one response — for 100 students × 20 items, 2 000 entries, each carrying its studentView, its solutionView and its grading history (superseded rows included), built before the state filter is applied. The audit of 2026-09-22 (D-12) measured the cost and proposed keyset pagination; it is a contract change (packages/contracts). Since ADR-044 the panel reads one question at a time (?itemId=), so a response holds one item's answers — 100 entries for a class of 100 — and the grading table sorts and filters them in the browser, which pagination would have to take over. Open, deferred (campaign supervisor, 2026-09-23). Assumed for now: one unpaginated response, which holds for the classes of today (≤ 30 students). The coherent ending is keyset pagination on (item position, attempt) with the counts computed separately, so the panel's "validated / proposed" totals stay those of the whole selection; to be taken up before the first class of about 100 students is graded on the platform.
25 Evaluation templates (ADR-031): what does the "promote" screen do — push a change made in one classroom's evaluation back into its template, question by question or as a whole, and how does it show what differs? Open, deferred (#151, 2026-09-27; tracked in #229). Assumed for now: no promote. A teacher changes the template itself (editing in place, #218) or saves the evaluation as a NEW template, which since 2026-09-30 links that evaluation to it (ADR-031, third addendum); the pull of a template revision into an instance (#226) goes the other way. To be decided after one term of use of templates, revisions and the pull.
27 Do the grading criteria of a question (an essay's rubric, a short answer's llm rubric) reach a student when the evaluation shows the key (showKey, an exercise with immediate feedback included)? Settled (ADR-037, decided by the teacher on 2026-09-29): no, they are teacher-only. The key a student reads goes through the type's studentSolution hook in studentSolutionView (apps/api/src/modules/live/studentView.ts): an essay keeps its model answer (as the expected answer); the teacher's surfaces keep everything. A circuit's key is its reference alone, for everyone, and an llm matcher is refused at publication. Whether a student will read a per-criterion LLM breakdown in the grading details (04 §4.8, "Scoring, later") stays open. For now an LLM's justification is kept teacher-only: it lives in the grading's details, never in the comment, and is stripped from every student payload whatever the policy (ADR-045). Amendment (ADR-063, 2026-10-02): a teacher may copy the justification into the comment by hand, from the correction form, and edit it before saving; nothing else carries it to a student, and the per-criterion breakdown (details.ai) stays teacher-only.
29 Does the diagram type (ADR-046) also offer a drawing-only schematic kind: the components of circuit, placed and wired, with no simulation and no stimulus? The product owner asked for it; circuit already has a manual grading mode, which is a schematic drawn and graded by hand, and ADR-021 kept one concept per type. Open. Assumed for now: no schematic kind in diagram v1; a teacher who wants a hand-graded schematic uses circuit in manual mode. The coherent endings: a schematic kind of diagram once circuit's canvas runs on the diagram engine (ADR-046 §7), with circuit kept for simulation; or circuit stays the only home of schematics.
37 Super Powers (ADR-054): does their expiry task superpowers.expire move from the ticker's bare tick tasks (TICK_TASKS, ticker.ts) to the scheduled tasks of D10 (scheduled_tasks, modules/system/catalog.ts), where an admin sees its last run? Open. Assumed for now (product owner, 2026-09-30): it stays a bare tick task, every 60 s, like the live clock. A scheduled task can be paused or slowed by an administrator, and an admin must not be able to pause the expiry of their own Super Powers; the next request of the session expires them anyway, but an open stream would then outlive the hour. To revisit if the admin screen needs to show it.
40 Parameterized questions: a value shown with a comma in French (9,81) or a dot everywhere? Open. Assumed (ADR-056 §6): a dot in every language, rounding half away from zero on the decimal representation; a short answer accepts both separators.
41 Parameterized questions: what does a student get when the draw's condition still fails after 100 tries at serve time? Open. Assumed (ADR-056 §7): the last draw, a warning in the grading details, never an error; publication's 200-draw validation makes it rare.
42 Parameterized questions: may two questions of an evaluation share a variable (two questions about the same cliff)? Open. Assumed (ADR-056 §1): no, variables belong to one question; a multi-part problem is a cloze.
43 Does LLM processing require a no-retention agreement, a European or local model, or approval by the school's data-protection officer (N-DATA-05)? Open, deferred to the data-protection audit. The product owner accepted question content on 2026-10-01 (ADR-058–060), and student answers on 2026-10-02 (ADR-063): essays and diagrams are sent after the close with student names and emails masked. On 2026-10-04 the PO accepted brainstorm ideas, live, with the AI assistance on (ADR-072): an anonymous guest's text is not masked, and the page says so. On 2026-10-07 the PO accepted the teacher assistant (ADR-080): its first phase sends a teacher's typed questions and the documentation, its questions and answers stored 30 days; its second phase sends, unmasked, what the teacher's own seats reach, the names and final results of the teacher's own classrooms included (built under ADR-080's P2 amendment of 2026-10-08, with a notice in the panel); its third phase (P3 amendment of 2026-10-08) also sends the model, from the question editor only, the open draft's free texts and explanation — question content, a cloze's {{…}} blanks (its key) included, as accepted on 2026-10-01 — never stored. On 2026-10-08 the PO accepted, for the one-off sorting of the existing tags into concepts (ADR-081, second addendum §3), sending tag names and descriptions, pool names and at most two question-statement excerpts per tag; no author, course or classroom name. On 2026-10-10 the PO accepted (issue #680, decided 2026-10-09, defaults confirmed 2026-10-10) the proposal of a pool description (ADR-013, amendment of 2026-10-10): purpose describe, triggered by the pool owner, sending the pool name, its concept labels and at most two question-statement excerpts read from the student view; nothing is stored before the owner accepts it. On 2026-10-10 the PO also accepted (same issue, lot 2; ADR-095) the inference of a public pool's bilingual domain label: purpose domain, run when the pool is published and by the nightly job, sending the concept labels (French and English) of its published questions only — no pool name, statement, author or course. On 2026-10-10 the PO also accepted, for the probable duplicates of concepts (ADR-081, fifth addendum §4, implemented as purpose concepts), sending the concept labels and qualifiers (French and English) only, when the admin asks, on the daily cap, the result ephemeral. On 2026-10-10 the PO also accepted, for Suggest concepts in the question editor (ADR-081, sixth addendum §6, purpose suggest), sending the open draft's statement and choices as a student reads them (the model excerpt, never the answer key) and the labels and qualifiers (French and English) of every live concept — no description, alias, usage count, creator, pool or course; at most five existing concepts and two new labels come back, nothing is stored, and a new label is created only through the picker's own form. On 2026-10-13 the PO accepted (issue #817; ADR-081, amendment of 2026-10-13), for Fill with AI on the admin's concept sheet (purpose concepts, triggered by the admin), sending only that concept's labels, qualifiers and existing descriptions in both languages — no question content, journal, course or creator; nothing is stored before the admin saves. On 2026-10-15 the PO accepted (ADR-114 §2, issue #897 step A), for the relations proposed between concepts (purpose concepts, triggered by the admin), sending the labels and qualifiers (French and English) of the live concepts and which of their lines are to be placed, the order of the lines reflecting only which are to place and which have narrower concepts — no edge, description, alias, count, question, pool or person; on the daily cap and the person's share, nothing is stored before the admin accepts, each edge through the relation routes. On 2026-10-12 the PO accepted (ADR-106 §4) a new category, student code and build outputs: for a project in the criteria grading mode, purpose project, on the institutional key, the files the criteria name, the test results and the build outputs of a student repository, masked with the classroom's roster and the repository members' names, e-mail addresses and GitHub logins; a criterion that judges an identity is never sent (it is automatic or teacher-only); the proposals and their rationales are stored, and the student reads them, marked provisional after the repository's definitive freeze and final after the release. That acceptance does not settle the no-retention agreement, provider location or data-protection officer's review.
52 Workspace question (ADR-075, proposed): which points still need the product owner? (a) A multi-file answer: the tar form is collected, but how the runner rebuilds and tests several files is not settled. (b) The ceiling of 30 workspaces per exam, a placeholder for M6-05's measurement; a class of 100 splits into sittings meanwhile. (c) Kiosk stations: a cross-host portal needs proof B (M6-07) and a check of the kiosk cookie across hosts; for online_seb projects see ADR-089 (proposed). (d) The retention of a volume kept after a failed collection. Open. (a) is settled in part on 2026-10-12 (product owner, ADR-106 §3): the runner's archive form — one tar on stdin, unpacked inside the container with every entry sanitized, fixed argv, capped output files — exists, through its project action; whether the workspace question uses it stays open. Assumed for now (ADR-075): one file, 30 per exam, SEB only until proof B, a kept volume reviewed by the teacher and removed by hand.
54 Concepts (ADR-081): which points still need the product owner? (b) Whether the curation role stays the admin's alone or widens (a referent per domain, the owners of the pools using a concept) if proposals pile up. Open. Assumed for now (ADR-081): the admin alone curates. Point (a), the UI names, is settled by the second addendum of ADR-081: "Notions" in French, "Concepts" in English. Point (c), who edits a proposed concept, is settled by the ADR-081 addendum: its creator and the admin. The migration drops every tag that is not a concept (§11). The curation (queue, merge into a validated target, aliases, probable duplicates, the usage-count exception of ADR-054) was settled with the product owner on 2026-10-10 (ADR-081, fifth addendum); relations move to the course concepts (#578).
56 Hosting in Switzerland: does the platform move from its Hetzner VM in Europe to a Swiss host (Switch Cloud), and its backups with it (ADR-009, N-DATA-01)? Open, deferred (product owner, 2026-10-09): the product owner stated on 2026-10-09 that they will decide within 6 to 12 months. Assumed for now (ADR-009 as amended 2026-10-09): one Hetzner VM in Europe, Hetzner Backups, on-VM dumps, and the encrypted off-site copy on a Hetzner Storage Box in Helsinki.
57 Login: should an edu-ID login whose sub is unknown adopt an EXISTING account that carries the same swissEduPersonUniqueID (users.swiss_edu_id)? edu-ID's sub is pairwise per sector (user, issuer, the client's sector_identifier_uri), so another client of another sector gets another sub for the same person; the login (auth/adoption.ts) matches by sub, and ADR-061 limits adoption by swiss_edu_id to the classroom:… placeholders of the import. Seen on 2026-10-10 (M8-06): on staging, whose client had its own sector, the owner's login created a second account next to the copied production one. Open. Assumed for now: no adoption of an existing account; the two clients share one sector identifier instead (deployment.md §8, requested from SWITCH on 2026-10-10), which is the mechanism SWITCH documents for it. The coherent ending, if a second sector ever has to exist, is an adoption by swiss_edu_id of an account whose sub was issued by the same issuer, recorded in the audit log, decided by an ADR amending ADR-061.
58 Onboarding (ADR-105, issue #776): a training course per teacher, provisioned from the empty Courses home, drawing on one public pool installed from the repository; which account owns that pool, where the action is offered to a teacher whose home is not empty, whether the statements are about the platform or a neutral subject, one question per type or the novice path only, French content only. Settled by assumption (2026-10-11): the product owner approved the work and left the points open; ADR-105 takes them in its Assumptions section (the super admin owns the pool; a text link in the empty state, the account menu and the palette; statements about the platform; the automatically graded types in the welcome quiz; French only). He may change any of them.
59 Login admission (issue #722): who may have an account created at a first sign-in, and does a roster line alone admit an external student? Settled (product owner, 2026-10-14): ADR-111 holds the rule; a roster line alone admits. The production value of LOGIN_DOMAINS is not decided: empty (open) until the product owner sets it after a dry-run query (ADR-111 §9).