Skip to main content

Module outcomes

Module outcomes 

Source
Expand description

Every move the pipeline makes on one ledger row, decided apart from the phases that apply it: what an answer from the study registry does to its row, and the moves a phase makes without asking. No outcome here may return a state that leads back to import: a row whose import may have landed must never be sent again. The one exception is verify’s notRegistered, which is the registry itself saying the submission did not land.

Structs§

Outcome
What the phase writes for this row.
RowFacts
The row’s scheduling history, which is all these decisions need from it.
UnaskedMove
A move a phase makes on a claimed row without an answer to decide from: the outcome, and the timeline line that explains it.

Enums§

Failure 🔒
Whether a failure could go away on its own.
NextAttempt
When the pipeline may claim the row again.

Constants§

NO_VERIFIED_STUDENT_NUMBER_MESSAGE
The timeline line for a row waiting on a student number, whichever phase found it missing.

Functions§

duplicate_of_other_registrar
Import found the completion already registered by another registrar.
import_success_outcome
What an import answer that settled the row does to it, including the wait Sisu needs before the first verify poll can find anything.
incomplete_payload
The frozen payload lacks a field, so the enrolment is resolved again.
invalid_payload_field
field of the frozen payload is one Sisu would refuse, and the whole batch with it.
isolated_malformed_request_outcome
A row Suotar refused as a malformed request even in a batch of its own: resending the same request is refused the same way, so it needs a human.
missing_context
A row resolve-enrolments claimed but has no completion or module to ask about. Retryable like any other failure, and it accrues retry age, so a row whose context never comes back expires instead of being repolled forever.
module_not_configured
The module lacks what the enrolment lookup needs; code says what.
no_verified_student_number
No verified student number to resolve the enrolment with.
released_unsent_split_half
An import row a split still held unsent when a shutdown or an error stopped the split.
request_level_code
The ledger error code for a request the study registry rejected, or never answered, as a whole.
request_level_outcome
The outcome for every row of a batch Suotar rejected as a whole. On import all that matters is whether the request could have been acted on: a connection that never opened proves it was not. A waiting row’s lookup keeps waiting only through an outage; a refusal of the request itself would come back every retry, so it ages out like any other failure.
resolving_enrolment
Holds a first resolve out of import’s claim while its lookup is out.
retry_or_expire 🔒
Retryable until the row has been failing for a week, and then a support case rather than an endless one. A transient failure of a waiting row’s lookup is not counted as one at all; see waiting_lookup_failed.
submission_uncertain
The one state whose only way out is verify; every path that cannot prove nothing was created ends here.
submit_error_outcome
A per-item error on the calls leading towards a submission. Only import creates attainments, so anything uncertain there is verify-only, while the same code on resolve-enrolments retries.
submitting
Committed before the import request leaves: a row found in submitting after a restart has an unknown outcome and is never sent again.
unanswered_item_outcome
An item we sent and Suotar did not answer. On import that leaves us where a timeout does; elsewhere the call simply did not happen for that row.
uncertain_recheck_outcome
A fruitless look through existingAttainments for an attainment we may have created. Once the attainment has had a day to show up a human checks Sisu by hand; the row still never resubmits.
unknown_grade
The frozen grade is not one Sisu accepts.
verify_error_outcome
A per-item error while polling verify. Never a failure: the attainment may exist, and a row marked failed invites a second submission later. notRegistered is not an error here; see verify_not_registered_outcome.
verify_inconclusive_outcome
A verify poll with no usable answer: nothing came back, or nothing we act on.
verify_not_registered_outcome
A verify poll answered notRegistered: Suotar has no trace of the submission, so the row is new work again and goes back through resolve-enrolments and import. reimport_count counts this resend too.
verify_partial_outcome
A verify poll that found only the assessment item attainment. The submission landed, so an uncertain row stops being uncertain, but the row is not registered until the course unit attainment appears. partially_registered_at is when a poll first saw this.
verify_poll_lease_until
How long a verify poll pushes the row out of reach while its request is out, so a concurrent iteration cannot poll it twice. The poll’s own outcome overwrites this. calls is the longest the iteration’s registry calls may take together: the poll and the recovery lookup after it.
waiting_lookup_failed 🔒
A lookup for a row waiting for an enrolment that failed in transit: the row keeps waiting and retries the same check shortly, with none of a failure’s retry window or count, which over a schedule of months would expire it. None for any other row or operation.