Recued
Menu
← Back to recipes

Send DeepTutor assignment or exam

by recued-core v7 11 views

Use “Send DeepTutor assignment or exam” in Recued. Scheduled class dish. It uses the connections and settings you choose when you run it.

Complete workflow

DeepTutor Records 9 pinned recipes

Use DeepTutor Records in Recued for education, tutoring, student and assignment record-keeping. It stores students, assessments, answers, artifacts and scorecards, and includes 9 ready-to-run workflows that enrol students, send assessments, capture answers and grade them. It needs the DeepTutor pack for question generation. It runs locally on your machine. Actions that change data use Recued's approval controls.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Use “Send DeepTutor assignment or exam” in Recued. Scheduled class dish. It uses the connections and settings you choose when you run it.

pack:deeptutor-daily-masterydeeptutorassignmentexam
by recued-core pinned v7

Use “Enroll free DeepTutor student” in Recued. Exact-form enrollment template for a free class.

pack:deeptutor-daily-masteryform-response-templatestudentenrollment
by recued-core pinned v4

Use “Register paid DeepTutor student” in Recued. It turns one complete Seller order into a class roster record.

pack:deeptutor-daily-masterystudentenrollmentpaid
by recued-core pinned v4
Capture DeepTutor answer
Background automation

Use “Capture DeepTutor answer” in Recued. It runs on its own when a student emails their answers back, and files that reply as a pending answer so the grading workflow can score it on the next run.

pack:deeptutor-daily-masterydeeptutorstudentanswer
by recued-core pinned v5

Use “Grade DeepTutor answers” in Recued. Scheduled class batch. It uses the connections and settings you choose when you run it.

pack:deeptutor-daily-masterydeeptutorgradingassignment
by recued-core pinned v7

Use “List DeepTutor assignments and exams” in Recued. It provides a read-only class index over the DeepTutor pack's own assessment records.

pack:deeptutor-daily-masterydeeptutorassignmentexam
by recued-core pinned v4
Show all 9 recipes

Use “View DeepTutor assessment” in Recued. It provides a read-only exact detail for one DeepTutor assignment or exam.

pack:deeptutor-daily-masterydeeptutorassignmentexam
by recued-core pinned v3

Use “View DeepTutor scorecards” in Recued. Lists the derived assignment and exam scorecards the DeepTutor pack keeps in its own records. Supply one Seller customer id for that student's rows, or leave it blank for the owner-wide scorecard list.

pack:deeptutor-daily-masterydeeptutorscorecardstudent
by recued-core pinned v3
Require DeepTutor records runtime
Background automation

Use “Require DeepTutor records runtime” in Recued. It confirms this server can store the class records the other DeepTutor workflows depend on, and stops with a clear message when it cannot.

by recued-core pinned v1
View pack details, dependencies, and permissions →

Set up the curriculum

Create one named DeepTutor knowledge base for each curriculum or level, upload the approved material and answer conventions, wait for indexing, and verify it with deeptutor kb info <name>. Select that exact curriculum_kb in the dish. A single DeepTutor instance may hold several named KBs; Question Bank categories are not treated as class authority.

Register artifact storage

Before configuring or scheduling a class dish, register one writable file collection under Connections -> Files. For the simplest local setup, first create an existing absolute directory on the Recued server host, make it readable and writable by the Recued server process, and then enroll it with the Filesystem adapter. The root directory must already exist; Recued does not create or choose a host directory. The collection slug is owner-chosen and is not hardcoded; deeptutor-artifacts is only a recommended example. An enrolled writable S3 collection is also valid and does not require a local folder.

Select that collection in Assessment artifact files on every saved class dish. One collection can serve every class, or classes may use different collections. Keep the selected slug and backing storage available while assessments remain active because assessment manifests retain that exact slug. Recued automatically creates its deeptutor-daily-mastery/assessments/... and deeptutor-daily-mastery/submissions/... subdirectories or object keys beneath the selected collection root.

One scheduled dish per class

Save one clone per Seller tier/class. Choose assignment or exam, a stable assessment_key, topic, difficulty, language, question_count, artifact file collection, and sender mail account. question_count defaults to 5 and must be a positive whole number; Recued does not author a maximum. Each question remains bounded to 3,000 characters and its reference answer to 1,500, while the complete portable JSON artifact must fit 5 MiB. The roster remains bounded to 100 validated students. The DeepTutor terminal requested/template/completed/results counts must all equal question_count, every id must be unique, and every observed tool call must be successful RAG against the exact KB.

The compact manifest key is active.assessment.<class_segment>.<assignment|exam>.<assessment_locator>. The email marker carries the same versioned class/kind/locator tuple. Students reply once with all answers labelled by question_id. Use List DeepTutor assignments and exams to open exact details later.

Crash posture

The generated artifact is canonical JSON at a SHA-256-addressed path. Recued writes it, rereads it, verifies its digest and identity, and only then CAS-pins its compact manifest at revision 0 before mail. Same-content concurrent writes are harmless; different generations use different paths, and only one CAS winner can send. A losing race may leave an unreferenced file for later cleanup but cannot replace the winner. Mail uses stable reconciliation ids; revision 1 is written only after all recipients succeed. A prepared run safely resumes from the pinned artifact, and a delivered run is a no-op.

Permissions remain owner-configurable in Pack detail -> Permissions. The KB inspection is a read operation with no default approval; DeepTutor generation, file/shared writes, and mail retain their declared posture.

How it works 139 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Process (139 steps)
class_key_value trim
Trim whitespace from setting class key
class_key_bounded_value truncate
Truncate class key value to a max length
class_key_bounded compare
Check if class key value equals class key bounded value
curriculum_kb_value trim
Trim whitespace from setting curriculum kb
curriculum_kb_bounded_value truncate
Truncate curriculum kb value to a max length
curriculum_kb_bounded compare
Check if curriculum kb value equals curriculum kb bounded value
curriculum_kb_starts_flag starts_with
Check if curriculum kb value starts with -
assessment_key_value trim
Trim whitespace from setting assessment key
assessment_key_bounded_value truncate
Truncate assessment key value to a max length
assessment_key_bounded compare
Check if assessment key value equals assessment key bounded value
topic_value trim
Trim whitespace from setting topic
topic_bounded_value truncate
Truncate topic value to a max length
topic_bounded compare
Check if topic value equals topic bounded value
topic_starts_flag starts_with
Check if topic value starts with -
subject_topic_lf replace
Replace text in topic value
subject_topic_single_line replace
Replace text in subject topic lf
subject_topic truncate
Truncate subject topic single line to a max length
sender_mail default
Apply default
artifact_file_slug default
Apply default
question_count_number to_number
Convert setting question count to a number
question_count_integer math
Calculate question count number floor
question_count_is_integer compare
Check if question count number equals question count integer
inputs_valid all
Check if all conditions are true
inputs_guard guard
Stop if inputs valid equals
today date_period
Apply date_period
today_ms date_parse
Parse today start as a date
date_key date_format
Format as a date
assessment_locator template
Generate text from a template
assessment_locator_bounded_value truncate
Truncate assessment locator to a max length
assessment_locator_bounded compare
Check if assessment locator equals assessment locator bounded value
assessment_locator_guard guard
Stop if assessment locator bounded equals
assessment_id_seed json_stringify
Apply json_stringify
assessment_id sha256
Apply sha256
existing ?
existing_status default
Apply default
existing_supported compare
Check if existing status is one of ,prepared,delivered
existing_identity_valid all
Check if all conditions are true
existing_admissible any
Check if any of the conditions are true
existing_guard guard
Stop if existing admissible equals
needs_prepare all
Check if all conditions are true
curriculum ?
skip: step.needs_prepare not_equal true
curriculum_valid all
Check if all conditions are true
skip: step.needs_prepare not_equal true
curriculum_guard guard
Stop if curriculum valid equals
skip: step.needs_prepare not_equal true
roster ?
skip: step.needs_prepare not_equal true
roster_candidates filter
Filter by condition
skip: step.needs_prepare not_equal true
roster_candidate_count count
Count items in roster candidates
skip: step.needs_prepare not_equal true
roster_email_shapes map
Extract email from each item
skip: step.needs_prepare not_equal true
roster_customer_shapes map
Extract customer_id from each item
skip: step.needs_prepare not_equal true
roster_email_lengths map
Extract email from each item
skip: step.needs_prepare not_equal true
roster_active filter
Filter by condition
skip: step.needs_prepare not_equal true
roster_recipients map
Extract from each item
skip: step.needs_prepare not_equal true
roster_count count
Count items in roster recipients
skip: step.needs_prepare not_equal true
roster_rows_valid compare
Check if roster count equals roster candidate count
skip: step.needs_prepare not_equal true
roster_email_groups group_by
Group by email
skip: step.needs_prepare not_equal true
roster_unique_email_count count
Count items in roster email groups
skip: step.needs_prepare not_equal true
roster_emails_unique compare
Check if roster unique email count equals roster count
skip: step.needs_prepare not_equal true
roster_within_limit compare
Check if roster count is at most 100
skip: step.needs_prepare not_equal true
recipients slice
Take a subset of
skip: step.needs_prepare not_equal true
roster_present all
Check if all conditions are true
skip: step.needs_prepare not_equal true
roster_guard guard
Stop if roster present equals
skip: step.needs_prepare not_equal true
generation_request template
Generate text from a template
skip: step.needs_prepare not_equal true
generate ?
skip: step.needs_prepare not_equal true
generation_tool_calls filter
Filter by condition
skip: step.needs_prepare not_equal true
generation_tool_call_count count
Count items in generation tool calls
skip: step.needs_prepare not_equal true
rag_calls filter
Filter by condition
skip: step.needs_prepare not_equal true
rag_call_count count
Count items in rag calls
skip: step.needs_prepare not_equal true
rag_results filter
Filter by condition
skip: step.needs_prepare not_equal true
rag_result_count count
Count items in rag results
skip: step.needs_prepare not_equal true
rag_errors filter
Filter by condition
skip: step.needs_prepare not_equal true
rag_error_count count
Count items in rag errors
skip: step.needs_prepare not_equal true
rag_grounded all
Check if all conditions are true
skip: step.needs_prepare not_equal true
generate_result_events filter
Filter by condition
skip: step.needs_prepare not_equal true
generate_result_event_count count
Count items in generate result events
skip: step.needs_prepare not_equal true
generated_questions default
Apply default
skip: step.needs_prepare not_equal true
generated_question_count count
Count items in generated questions
skip: step.needs_prepare not_equal true
question_rows map
Extract from each item
skip: step.needs_prepare not_equal true
question_ids_trimmed map
Extract question_id from each item
skip: step.needs_prepare not_equal true
question_types_trimmed map
Extract question_type from each item
skip: step.needs_prepare not_equal true
question_texts_trimmed map
Extract question from each item
skip: step.needs_prepare not_equal true
reference_answers_trimmed map
Extract correct_answer from each item
skip: step.needs_prepare not_equal true
question_id_lengths map
Extract question_id from each item
skip: step.needs_prepare not_equal true
question_text_lengths map
Extract question from each item
skip: step.needs_prepare not_equal true
question_rows_measured map
Extract correct_answer from each item
skip: step.needs_prepare not_equal true
valid_questions filter
Filter by condition
skip: step.needs_prepare not_equal true
valid_question_count count
Count items in valid questions
skip: step.needs_prepare not_equal true
question_id_groups group_by
Group by question_id
skip: step.needs_prepare not_equal true
unique_question_id_count count
Count items in question id groups
skip: step.needs_prepare not_equal true
normalized_questions map
Extract from each item
skip: step.needs_prepare not_equal true
question_valid all
Check if all conditions are true
skip: step.needs_prepare not_equal true
question_guard guard
Stop if question valid equals
skip: step.needs_prepare not_equal true
prepared_at date_add
Add 0 seconds to
skip: step.needs_prepare not_equal true
assessment_artifact merge
Combine objects together
skip: step.needs_prepare not_equal true
assessment_artifact_text json_stringify
Apply json_stringify
skip: step.needs_prepare not_equal true
assessment_artifact_size_bytes utf8_byte_length
Apply utf8_byte_length
skip: step.needs_prepare not_equal true
assessment_artifact_sha256 sha256
Apply sha256
skip: step.needs_prepare not_equal true
assessment_artifact_size_valid all
Check if all conditions are true
skip: step.needs_prepare not_equal true
assessment_artifact_size_guard guard
Stop if assessment artifact size valid equals
skip: step.needs_prepare not_equal true
assessment_artifact_path template
Generate text from a template
skip: step.needs_prepare not_equal true
assessment_artifact_body_b64 encode_base64
Apply encode_base64
skip: step.needs_prepare not_equal true
write_assessment_artifact ?
skip: step.needs_prepare not_equal true
read_written_assessment_artifact ?
skip: step.needs_prepare not_equal true
written_assessment_artifact_text decode_base64
Apply decode_base64
skip: step.needs_prepare not_equal true
written_assessment_artifact_sha256 sha256
Apply sha256
skip: step.needs_prepare not_equal true
written_assessment_artifact json_parse
Apply json_parse
skip: step.needs_prepare not_equal true
written_question_count count
Count items in written assessment artifact questions
skip: step.needs_prepare not_equal true
written_recipient_count count
Count items in written assessment artifact recipients
skip: step.needs_prepare not_equal true
written_assessment_artifact_valid all
Check if all conditions are true
skip: step.needs_prepare not_equal true
written_assessment_artifact_guard guard
Stop if written assessment artifact valid equals
skip: step.needs_prepare not_equal true
new_assessment_envelope merge
Combine objects together
skip: step.needs_prepare not_equal true
artifact_id_seed json_stringify
Apply json_stringify
skip: step.needs_prepare not_equal true
artifact_id sha256
Apply sha256
skip: step.needs_prepare not_equal true
pin_artifact ?
skip: step.needs_prepare not_equal true
pin_assessment ?
skip: step.needs_prepare not_equal true
assessment_record coalesce
Use the first available value from: existing record, pin assessment record
delivery_artifact_id replace
Replace text in assessment record artifact ref
delivery_artifact_row ?
assessment_artifact_read ?
assessment_artifact_read_text decode_base64
Apply decode_base64
assessment_artifact_read_sha256 sha256
Apply sha256
assessment_artifact_record json_parse
Apply json_parse
assessment_artifact_question_count count
Count items in assessment artifact record questions
assessment_artifact_recipient_count count
Count items in assessment artifact record recipients
assessment_artifact_valid all
Check if all conditions are true
assessment_artifact_guard guard
Stop if assessment artifact valid equals
question_mail_lines map
Extract from each item
question_mail_body join
Join items with " "
should_send compare
Check if assessment record status equals prepared
mail_send ?
skip: step.should_send not_equal true
mail_results default
Apply default
mail_succeeded filter
Filter by condition
mail_failed filter
Filter by condition
sent_count count
Count items in mail succeeded
failed_count count
Count items in mail failed
all_delivered all
Check if all conditions are true
delivered_at date_add
Add 0 seconds to
skip: step.all_delivered not_equal true
final_assessment_envelope merge
Combine objects together
skip: step.all_delivered not_equal true
finalize_assessment ?
skip: step.all_delivered not_equal true
outcome switch
Map assessment record status to one of: prepared, delivered
summary to_summary
Format results as a summary card
Settings 10 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

topic setting = [object Object]
language setting = en
class key setting = [object Object]
difficulty setting = medium
curriculum kb setting = [object Object]
assessment key setting = daily
question count setting = 5
assessment kind setting = assignment
artifact file slug setting = [object Object]
sender mail instance setting =

Trust & control

What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.

Permissions it requires

Mail send
Declared by the recipe — Recued grants these at install, where you review them before approving.

Data it touches

Warehousedata.shared

About

Tags

pack:deeptutor-daily-masterydeeptutorassignmentexamscheduledclass-batchemailmail-sendfile-artifactcrash-saferecords

Details

139 steps 10 configurable settings recipe_id: send-deeptutor-assessment