Parent scope: #56 (preserved cohort project behavior)
User outcome
When a learner's first project submission is rejected by validation, the page must not claim
that a submission was saved. The learner sees the validation errors, the entered form remains
available for correction, and the status stays explicitly Not submitted until a submission is
actually persisted. A persisted submission continues to show Submitted with its saved time and
the update action.
This is a narrow target-native correctness slice. It does not complete #56 or change project
validation, scoring, peer review, or cohort migration behavior.
Scope
- Expose an explicit persisted-submission boolean from the project-page context rather than using
the truthiness of a temporary validation object.
- Use that boolean consistently for the status badge, saved-status text, update/remove affordances,
and the save/update button label.
- Preserve the existing invalid-submission form values and validation errors.
- Refresh the adoption manifest for every candidate-owned copied file whose bytes change.
Non-goals
Acceptance criteria
Dependencies
Uses the existing copied project behavior from #30. The later Course → Cohort work in #51/#56
must preserve this explicit persisted-state contract.
Existing evidence to reattach
The preserved candidate in .tmp/project-submission-status-current-20260827 was implemented
before this issue was formally groomed. It is not accepted automatically; it may be reused only
after the normal current-main engineer/tester/PM lifecycle is recorded against this issue.
Parent scope: #56 (preserved cohort project behavior)
User outcome
When a learner's first project submission is rejected by validation, the page must not claim
that a submission was saved. The learner sees the validation errors, the entered form remains
available for correction, and the status stays explicitly Not submitted until a submission is
actually persisted. A persisted submission continues to show Submitted with its saved time and
the update action.
This is a narrow target-native correctness slice. It does not complete #56 or change project
validation, scoring, peer review, or cohort migration behavior.
Scope
the truthiness of a temporary validation object.
and the save/update button label.
Non-goals
Acceptance criteria
saved yet, with no saved timestamp or update/remove action.
corrected and resubmitted.
states.
the adoption manifest agrees with the changed copied files.
Dependencies
Uses the existing copied project behavior from #30. The later Course → Cohort work in #51/#56
must preserve this explicit persisted-state contract.
Existing evidence to reattach
The preserved candidate in
.tmp/project-submission-status-current-20260827was implementedbefore this issue was formally groomed. It is not accepted automatically; it may be reused only
after the normal current-main engineer/tester/PM lifecycle is recorded against this issue.