--- title: SAT & ACT Learning Lab emoji: 🧭 colorFrom: indigo colorTo: yellow sdk: gradio sdk_version: 6.24.0 python_version: "3.12" app_file: app.py pinned: false license: other short_description: Dynamic SAT/ACT practice, mastery, and reasoning graphs --- # Dearmon Analytics SAT & ACT Learning Lab Release `1.3.8` provides original dynamic practice for current SAT and ACT skill blueprints, a four-level topic graph, individual mastery tracking, targeted practice, and test-like diagnostic sessions. It adds username/password accounts, secure recovery, an isolated one-click demo, and the embedded teaching avatar layer used by the Dearmon Analytics Business Calculus platform. Release 1.2.0 introduced deterministic post-miss **Break It Apart** attribute graphs. Signed-in students can also download their complete personalized Topic Graph as a branded PNG, printable PDF, accessible hierarchy-and-concepts CSV, and verification manifest; demo sessions remain nonexportable. Release 1.3.8 matches the live Dearmon Analytics palette, typography, DA mark, and compact paper masthead, with the independent-practice disclaimer inside the banner. Its brighter amber-outlined test chooser and Section → Domain → Narrow Topic rails are compressed and closely stacked over translucent ink surfaces with accessible light type. Fresh lessons automatically open Question & Your Work; grading is joined by separate same-lesson and next-lesson actions. The answer record freezes elapsed time and its blueprint target at grading, then reports their exact reduced fraction and pace comparison. Learner/account and instructor attempt CSVs expose the timing values while legacy untimed rows remain blank. Shared math normalization serves both lesson surfaces and printable exam/answer-key PDFs so raw LaTeX is never the learner-facing fallback. The collapsed item-specific Concepts Needed swim lane, complete analogous worked examples, separate hints, and mastery whitening remain. The Printable Exam Builder requires an active demo or signed-in learner so every generated file has a cleanup owner. It creates a clean Dearmon Analytics-branded student PDF and a separate answer-key PDF from selected or previously missed topics. Both carry the same random form code. Core scored questions and their answer keys are deterministic. After the active learner has completed every built-in question type for an exact topic, explicit opt-in can create separately labeled, independently reviewed AI supplemental items for printing only. They never decide correctness or alter mastery, readiness, routing, or simulation scores. After every incorrectly graded practice question, and for every missed objective item reviewed after a completed simulation, Break It Apart constructs a directed acyclic reasoning graph with the tested topic at the top. Sentence items diagram subjects, verbs, direct objects, complements, modifiers, and dependent clauses. Math items build from quantities and units through order of operations and intermediate dependencies. Reading and science items connect claims, evidence, data, variables, and conclusions. The graph is deterministic, makes no model or provider call, and is unavailable before an incorrect grade or completed simulation. Its attributes are explanatory scaffolds, not separate attribute-level mastery or retention records. ## Service configuration This private Space uses the separate Turso database `dearmon-sat-act-learning-lab` and schema namespace `sat_act_learning_lab_v1`. Its encrypted application uses the versioned Space secret `SAT_ACT_APP_FERNET_V1_3_8_361A7215EF3D_B4E784D7CBC7`. Required Space secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`, `TURSO_AUTH_TOKEN`, `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and the versioned Fernet secret named above. There is no default instructor password. `SIMLI_API_KEY` is optional and enables learner-initiated live avatar video. The avatar defaults to the male-professor style, Oliver is selectable, and Oliver's speech profile uses the `cedar` voice at speed `1.02`. The component is shown by default, but speech and live video both default off until the learner opts in. Oliver is an AI-generated teaching persona, not the real person or a source of real-world claims. The Simli key remains server-side and must never appear in HTML, browser state, logs, public variables, or `/healthz`. Text tutoring remains available when Simli is absent or unavailable. Username passwords are stored as independently salted scrypt records. Account lockouts persist in the database, password changes revoke earlier sessions, and verified legacy name/class/PIN profiles can be converted without moving their mastery history. Each account receives a one-time-display offline recovery key that rotates after use. Email one-time-code recovery is optional; configure `AUTH_RECOVERY_EMAIL_ENABLED`, `AUTH_SMTP_HOST`, `AUTH_SMTP_PORT`, `AUTH_SMTP_USERNAME`, `AUTH_SMTP_PASSWORD`, `AUTH_SMTP_FROM_EMAIL`, `AUTH_SMTP_STARTTLS`, `AUTH_SMTP_SSL`, and optional `AUTH_SMTP_TIMEOUT_SECONDS`; keep provider credentials as Space secrets. Email codes expire after 15 minutes and are single-use. Without SMTP, offline recovery remains available. The one-click demo has a 45-minute ordinary-use window and starts with clearly labeled sample progress. Starting a full simulation reserves its blueprint duration plus a 45-minute completion grace period, capped at four hours. Demo practice and simulation state remain in bounded server memory only: they are not written to Turso, included in instructor analytics or exports, or eligible for account recovery. Sign-out/reset or process restart removes the session immediately; otherwise it disappears at the applicable expiry. Audio/video are opt-in and audio retention is disabled by default. Deployments serving minors need appropriate notice, consent, provider review, access controls, and retention policies. ## Upgrade note Before replacing any earlier release with v1.3.8, every active timed simulation must be finished or explicitly abandoned. Saved forms are bound to the app version and encrypted-source fingerprint, so v1.3.8 intentionally rejects older checkpoints. Preserve `LEARNER_ID_HMAC_SECRET` and retain every prior versioned Fernet secret and rollback commit needed through acceptance testing. The build still generates its new Fernet key automatically, stores it under `release/private/`, and reuses the validated key without prompting. ## Independent practice-content notice This is an independent educational practice product. It is not affiliated with, endorsed by, or sponsored by College Board or ACT, Inc. SAT is a trademark of College Board; ACT is a trademark of ACT, Inc. All practice questions, passages, data, explanations, and figures in this lab are original content. Practice results are diagnostic and are not official scores.