|
| 1 | +# SLR-E01: proposed post-feedback deadline rule |
| 2 | + |
| 3 | +**Status: Proposed; awaiting stakeholder approval.** This is a decision input, not |
| 4 | +approved policy, an implementation specification, or evidence that SLR-E01 is complete. |
| 5 | +Merging this document does not authorise changes to student deadlines. |
| 6 | + |
| 7 | +This readable version preserves the proposal contributed by ReneeSleepy in |
| 8 | +[web #248](https://github.com/ontrack-features-t2-2026/doubtfire-web/pull/248). |
| 9 | +The [original PDF](https://github.com/ontrack-features-t2-2026/doubtfire-web/blob/53f6d11340eba4d53e245184507ff3f91743761b/SLR-E01%20.pdf) |
| 10 | +remains in that commit for provenance. It ended partway through its acceptance list; |
| 11 | +the complete candidate checks and unresolved decisions are recorded below. |
| 12 | + |
| 13 | +## Existing implementation and duplication check |
| 14 | + |
| 15 | +The API already implements a resubmission extension. Reuse its named methods and |
| 16 | +[existing rule record](https://github.com/ontrack-features-t2-2026/doubtfire-api/blob/bb360dfa/docs/submission-lifecycle/effective-resubmission-deadline.md) |
| 17 | +before considering new work. This was checked against API `11.0.x` at `bb360dfa` |
| 18 | +on 20 September 2026; API #94 is already included in that history. |
| 19 | + |
| 20 | +| Area | Existing API behavior | Original proposal below | |
| 21 | +| ------------------ | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | |
| 22 | +| Eligible statuses | Fix and Resubmit, Discuss, Rediscuss, Demonstrate | Same four statuses | |
| 23 | +| Eligibility window | Effective deadline less than seven calendar days after assessment | Every eligible feedback event, without that window | |
| 24 | +| New date | Adds configured `extension_weeks_on_resubmit_request` to the existing deadline, subject to limits | Seven calendar days after feedback was recorded | |
| 25 | +| Repeat handling | Guard targets one extension per submission round; known concurrency gaps remain | Each new eligible feedback event may recalculate | |
| 26 | +| Flexible dates | Excluded by existing extension eligibility | Proposed to participate | |
| 27 | +| Time zone | Student campus zone, falling back to application zone; effective deadline uses end-of-day anywhere on earth | Described only as the task/unit system time zone | |
| 28 | +| Configuration | Unit-level extension configuration | Proposed task-level opt-out, enabled by default | |
| 29 | + |
| 30 | +These are material policy differences, not missing frontend features. The existing |
| 31 | +API record also identifies concurrency, transaction and group-comment risks; this |
| 32 | +document does not claim to fix them. No API, web behavior, mobile behavior, deploy |
| 33 | +configuration, migration or notification delivery changes are included here. |
| 34 | + |
| 35 | +## Original proposed rule |
| 36 | + |
| 37 | +When feedback is recorded with **Fix and Resubmit**, **Discuss**, **Rediscuss**, or |
| 38 | +**Demonstrate**, calculate a candidate deadline seven calendar days after the |
| 39 | +recorded feedback timestamp. Do not calculate the candidate by adding seven days |
| 40 | +to the old deadline or by adding a fixed 168 hours. |
| 41 | + |
| 42 | +The author's proposed interactions are: |
| 43 | + |
| 44 | +- Preserve any later approved extension rather than reducing it. |
| 45 | +- Include tasks with flexible dates. |
| 46 | +- Respect final and maximum dates; an authorised exception to a final deadline |
| 47 | + requires explicit approval. |
| 48 | +- Recalculate for each genuinely new eligible feedback event, including another |
| 49 | + event before the current extended deadline. |
| 50 | +- Apply a consistent result to the relevant group submission and its member tasks. |
| 51 | +- Enable the behavior for existing and new tasks, with an opt-out available to |
| 52 | + authorised staff at task level. |
| 53 | +- Apply only to future eligible feedback. Neither deployment, setting changes nor |
| 54 | + old feedback should automatically rewrite historical deadlines. |
| 55 | +- Preserve manually authorised changes and explain the actual resulting deadline |
| 56 | + to the student, including any limiting final/maximum date. |
| 57 | + |
| 58 | +The original suggested message was: "Your task deadline has been extended to |
| 59 | +[date and time] because you received feedback requiring further action." |
| 60 | +It is suitable only when the deadline actually moves later. Wording for no change, |
| 61 | +a cap, or an opt-out needs acceptance alongside the final rule. |
| 62 | + |
| 63 | +## Decisions required before implementation |
| 64 | + |
| 65 | +| Decision | Why it remains open | |
| 66 | +| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| 67 | +| Deadline precedence | Early feedback plus seven days may be earlier than the original deadline. Decide explicitly whether the original deadline, a manual deadline, an approved extension, and an automatic date may ever be shortened. A possible no-shortening rule is a proposal, not an approved formula. | |
| 68 | +| Conflicting caps | A later approved extension can exceed a stated final/maximum date. Decide which authority wins and what exception record is required; do not silently truncate an approved extension. | |
| 69 | +| Authoritative time zone | Choose campus, unit or another named IANA zone and a fallback. Define whether the result is a wall-clock instant or an end-of-day date; current API semantics must not be changed implicitly. | |
| 70 | +| DST transitions | Define the handling of nonexistent or repeated local times, in addition to using calendar days. Include forward and backward clock changes in tests. | |
| 71 | +| Feedback identity | Define a genuinely new event versus a retry, re-save, repeated status change, or resubmission round. Decide whether the current one-extension-per-round rule changes. Duplicate delivery must remain idempotent. | |
| 72 | +| Flexible and group tasks | Confirm the flexible-date change and how per-member deadlines, campus zones and manual extensions interact for groups. | |
| 73 | +| Settings and rollout | Confirm default-on behavior, staff permissions, unit-level configuration interaction, effective start time and treatment of existing extension records. | |
| 74 | +| Communication | Decide the authoritative API fields and whether the explanation is a discussion entry, in-app notice, push/email, or a combination. A visible message does not prove notification delivery. | |
| 75 | + |
| 76 | +No stakeholder approval was supplied with this PR. The authorised policy owner |
| 77 | +must record their name/role, decision date, chosen rules, rationale and approval |
| 78 | +reference before SLR-E02 to SLR-E05 can treat this as an accepted contract. |
| 79 | + |
| 80 | +## Worked examples from the proposal |
| 81 | + |
| 82 | +All dates below illustrate the proposed local-calendar calculation. The zone and |
| 83 | +deadline precedence still require the decisions above; these are not assertions |
| 84 | +about current API output. |
| 85 | + |
| 86 | +| Case | Input | Proposed candidate / result | |
| 87 | +| -------------------------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | |
| 88 | +| Normal | Original 20 Sep 2026 17:00; Fix and Resubmit recorded 15 Sep 14:00 | 22 Sep 14:00, before applying any authorised caps | |
| 89 | +| Feedback after original deadline | Original 15 Sep 17:00; Discuss recorded 16 Sep 10:00 | 23 Sep 10:00, before caps | |
| 90 | +| New feedback event | First feedback 10 Sep 09:00; next eligible event 14 Sep 15:00 | Candidates 17 Sep 09:00 then 21 Sep 15:00; a replay of either event is not a new event | |
| 91 | +| Approved extension | Approved extension dated 25 Sep; feedback 18 Sep 10:00 | Candidate 25 Sep 10:00; the approved extension's exact time/zone is missing, so the later value cannot be selected yet | |
| 92 | +| Task opt-out | Setting disabled; feedback 18 Sep 10:00 | No automatic deadline change under the proposal | |
| 93 | + |
| 94 | +Add an early-feedback example (original 30 September, feedback 15 September, |
| 95 | +candidate 22 September) to the policy decision: blindly replacing the original |
| 96 | +would shorten the available time by eight days. |
| 97 | + |
| 98 | +## Candidate acceptance checks after policy approval |
| 99 | + |
| 100 | +- Each eligible outcome follows the accepted formula; ineligible outcomes do not |
| 101 | + change the deadline. |
| 102 | +- Early, on-time and late feedback follow the explicit precedence rules. |
| 103 | +- Later approved/manual deadlines and final/maximum caps follow the recorded |
| 104 | + authority decision, including a conflict between a later extension and a cap. |
| 105 | +- A genuinely new event follows the repeat policy; retries, duplicate delivery, |
| 106 | + concurrent assessments and failed transactions do not stack extensions. |
| 107 | +- Spring/autumn DST, missing time zones, and cross-zone group members produce the |
| 108 | + agreed date and offset; seven calendar days are not assumed to be 168 hours. |
| 109 | +- Flexible dates, group propagation, unit settings and task opt-out follow the |
| 110 | + accepted configuration and permission rules. |
| 111 | +- Deployment and configuration changes leave historical feedback/deadlines intact |
| 112 | + unless a separately approved migration explicitly says otherwise. |
| 113 | +- Desktop web and the installed mobile PWA show the same server result, including |
| 114 | + a readable date/time/zone, accessible feedback explanation, and any cap/no-change |
| 115 | + wording. Do not recalculate the policy separately in each client. |
| 116 | + |
| 117 | +Use synthetic accounts and dates for evidence. Link the exact API/web/deploy |
| 118 | +revisions and test results after implementation; none are claimed by this proposal. |
0 commit comments