Recued
Menu
← Back to recipes

Send DeepTutor assignment or exam

by recued-core v10 40 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 tutoring, student and assignment record-keeping. It stores students, assessments, answers, artifacts and scorecards, and includes 7 ready-to-run workflows that enrol students, send assessments, capture answers and grade them. Paid students arrive through any Seller provider lane (Stripe, Paddle, Lemon Squeezy). 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 v10

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 v7

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 v7
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 v8

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 v10

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 recued-core.deeptutor-records.assessment.get
Get assessment on deeptutor records
■ 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 recued-core.deeptutor.curriculum.inspect
Inspect curriculum on deeptutor
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 recued-core.deeptutor-records.student.search
Search student on deeptutor records
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 recued-core.deeptutor.assessment.generate
Generate assessment on deeptutor
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 core.storage.file.write
Write storage file
skip: step.needs_prepare not_equal true
◆ read_written_assessment_artifact core.storage.file.read
Read storage file
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 recued-core.deeptutor-records.artifact.upsert
Upsert artifact on deeptutor records
skip: step.needs_prepare not_equal true
◆ pin_assessment recued-core.deeptutor-records.assessment.create
Create assessment on deeptutor records
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 recued-core.deeptutor-records.artifact.get
Get artifact on deeptutor records
◆ assessment_artifact_read core.storage.file.read
Read storage file
■ 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 core.mail.send
Send mail
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 recued-core.deeptutor-records.assessment.update
Update assessment on deeptutor records
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
▼
Output
summary summary
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 =

Uses (11 operations)

Pack operation Get assessment on deeptutor records recued-core.deeptutor-records.assessment.get
Pack operation Inspect curriculum on deeptutor recued-core.deeptutor.curriculum.inspect
Pack operation Search student on deeptutor records recued-core.deeptutor-records.student.search
Pack operation Generate assessment on deeptutor recued-core.deeptutor.assessment.generate
Files Write storage file core.storage.file.write
Files Read storage file core.storage.file.read
Pack operation Upsert artifact on deeptutor records recued-core.deeptutor-records.artifact.upsert
Pack operation Create assessment on deeptutor records recued-core.deeptutor-records.assessment.create
Pack operation Get artifact on deeptutor records recued-core.deeptutor-records.artifact.get
Mail Send mail core.mail.send
Pack operation Update assessment on deeptutor records recued-core.deeptutor-records.assessment.update

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.

What it's allowed to do

Write Pack DeepTutor Records external change
Read: assessment.get · No approvalRead: student.search · No approvalWrite: artifact.upsert · No approvalWrite: assessment.create · No approvalRead: artifact.get · No approvalWrite: assessment.update · No approval
Write Files core.storage.file.write external change
Read Files core.storage.file.read read-only
Write Mail core.mail.send external change

2 more aren't listed here. You'll see them at install.

Data it touches

SurfacesFilesMail
Warehousedata.shared

About

Tags

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

Details

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