Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
Deploy SAT & ACT Learning Lab 1.3.8
Browse files- DEPLOYMENT_NOTES.md +21 -13
- README.md +21 -14
- app.py +0 -0
- release_manifest.json +27 -23
DEPLOYMENT_NOTES.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
# Deployment notes — SAT & ACT Learning Lab 1.3.
|
| 2 |
|
| 3 |
Target private Space: `DearmonAnalytics/SAT_ACT_Learning_Lab`
|
| 4 |
|
|
@@ -6,7 +6,7 @@ Turso database: `dearmon-sat-act-learning-lab`
|
|
| 6 |
|
| 7 |
Schema namespace: `sat_act_learning_lab_v1`
|
| 8 |
|
| 9 |
-
Encrypted-source secret: `
|
| 10 |
|
| 11 |
## Runtime contract
|
| 12 |
|
|
@@ -69,7 +69,7 @@ Encrypted-source secret: `SAT_ACT_APP_FERNET_V1_3_7_6BE7EEBD2633_CF494C1151F2`
|
|
| 69 |
|
| 70 |
Core secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`, `TURSO_AUTH_TOKEN`,
|
| 71 |
`LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
|
| 72 |
-
`
|
| 73 |
`SIMLI_API_KEY`.
|
| 74 |
|
| 75 |
Email recovery uses `AUTH_RECOVERY_EMAIL_ENABLED`, `AUTH_SMTP_HOST`,
|
|
@@ -88,27 +88,35 @@ Release runtime defaults include `ACCOUNT_AUTH_ENABLED=1`,
|
|
| 88 |
`OPENAI_OVERFLOW_REVIEW_MODEL=gpt-5-mini`. Face IDs and the pinned Simli client module are
|
| 89 |
listed in `environment.example` used to prepare this deployment.
|
| 90 |
|
| 91 |
-
## v1.3.
|
| 92 |
|
| 93 |
Finish or explicitly abandon every active timed simulation from an earlier
|
| 94 |
-
release before installing v1.3.
|
| 95 |
app/source/form versions and cannot be resumed across this release. Back up
|
| 96 |
Turso, preserve `LEARNER_ID_HMAC_SECRET`, and retain prior Fernet secrets and
|
| 97 |
rollback commits needed through acceptance testing.
|
| 98 |
|
| 99 |
-
Acceptance testing for v1.3.
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
Near-white mastered topic tiles intentionally retain dark text for WCAG
|
| 107 |
contrast.
|
| 108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
## Key lifecycle and rollback
|
| 110 |
|
| 111 |
-
The current loader reads only `
|
| 112 |
new versioned, fingerprinted secret name. The deployer adds that secret before
|
| 113 |
the repository commit and retains earlier keys. Roll back by reverting the
|
| 114 |
Space repository to the prior commit recorded in `deployment_receipt.json`.
|
|
|
|
| 1 |
+
# Deployment notes — SAT & ACT Learning Lab 1.3.8
|
| 2 |
|
| 3 |
Target private Space: `DearmonAnalytics/SAT_ACT_Learning_Lab`
|
| 4 |
|
|
|
|
| 6 |
|
| 7 |
Schema namespace: `sat_act_learning_lab_v1`
|
| 8 |
|
| 9 |
+
Encrypted-source secret: `SAT_ACT_APP_FERNET_V1_3_8_361A7215EF3D_B4E784D7CBC7`
|
| 10 |
|
| 11 |
## Runtime contract
|
| 12 |
|
|
|
|
| 69 |
|
| 70 |
Core secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`, `TURSO_AUTH_TOKEN`,
|
| 71 |
`LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
|
| 72 |
+
`SAT_ACT_APP_FERNET_V1_3_8_361A7215EF3D_B4E784D7CBC7`. Live avatar video additionally uses optional
|
| 73 |
`SIMLI_API_KEY`.
|
| 74 |
|
| 75 |
Email recovery uses `AUTH_RECOVERY_EMAIL_ENABLED`, `AUTH_SMTP_HOST`,
|
|
|
|
| 88 |
`OPENAI_OVERFLOW_REVIEW_MODEL=gpt-5-mini`. Face IDs and the pinned Simli client module are
|
| 89 |
listed in `environment.example` used to prepare this deployment.
|
| 90 |
|
| 91 |
+
## v1.3.8 upgrade gate
|
| 92 |
|
| 93 |
Finish or explicitly abandon every active timed simulation from an earlier
|
| 94 |
+
release before installing v1.3.8. Checkpoints are intentionally bound to
|
| 95 |
app/source/form versions and cannot be resumed across this release. Back up
|
| 96 |
Turso, preserve `LEARNER_ID_HMAC_SECRET`, and retain prior Fernet secrets and
|
| 97 |
rollback commits needed through acceptance testing.
|
| 98 |
|
| 99 |
+
Acceptance testing for v1.3.8 must verify the live Dearmon Analytics palette,
|
| 100 |
+
type, DA mark, compact masthead/disclaimer, bright amber test chooser, and three
|
| 101 |
+
compressed horizontal Practice rails over translucent ink. Selecting a lesson
|
| 102 |
+
must open Question & Your Work, and the answer row must expose grade,
|
| 103 |
+
same-lesson, and next-lesson actions. Grading must freeze elapsed and target
|
| 104 |
+
time, show the exact reduced fraction and pace comparison, and flatten the same
|
| 105 |
+
fields into learner/account and instructor attempt CSVs while legacy rows stay
|
| 106 |
+
blank. Inline lesson Math and printable exam/key PDFs must use the shared
|
| 107 |
+
renderer without visible LaTeX commands or dollar delimiters. The collapsed,
|
| 108 |
+
question-specific Concept swim lane, full analogous worked example, separate
|
| 109 |
+
active-item hint, and deterministic confused-word surfaces must remain.
|
| 110 |
Near-white mastered topic tiles intentionally retain dark text for WCAG
|
| 111 |
contrast.
|
| 112 |
|
| 113 |
+
The release builder continues to generate the versioned Fernet key
|
| 114 |
+
automatically, store it under `release/private/`, validate it, and reuse it for
|
| 115 |
+
safe retries without prompting the deployer operator.
|
| 116 |
+
|
| 117 |
## Key lifecycle and rollback
|
| 118 |
|
| 119 |
+
The current loader reads only `SAT_ACT_APP_FERNET_V1_3_8_361A7215EF3D_B4E784D7CBC7`. A later release must generate a
|
| 120 |
new versioned, fingerprinted secret name. The deployer adds that secret before
|
| 121 |
the repository commit and retains earlier keys. Roll back by reverting the
|
| 122 |
Space repository to the prior commit recorded in `deployment_receipt.json`.
|
README.md
CHANGED
|
@@ -14,7 +14,7 @@ short_description: Dynamic SAT/ACT practice, mastery, and reasoning graphs
|
|
| 14 |
|
| 15 |
# Dearmon Analytics SAT & ACT Learning Lab
|
| 16 |
|
| 17 |
-
Release `1.3.
|
| 18 |
ACT skill blueprints, a four-level topic graph, individual mastery tracking,
|
| 19 |
targeted practice, and test-like diagnostic sessions. It adds username/password
|
| 20 |
accounts, secure recovery, an isolated one-click demo, and the embedded teaching
|
|
@@ -24,15 +24,20 @@ Signed-in students can also download their complete personalized Topic Graph as
|
|
| 24 |
a branded PNG, printable PDF, accessible hierarchy-and-concepts CSV, and
|
| 25 |
verification manifest; demo sessions remain nonexportable.
|
| 26 |
|
| 27 |
-
Release 1.3.
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
Topic
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
The Printable Exam Builder requires an active demo or signed-in learner so
|
| 38 |
every generated file has a cleanup owner. It creates a clean Dearmon
|
|
@@ -60,7 +65,7 @@ attribute-level mastery or retention records.
|
|
| 60 |
This private Space uses the separate Turso database
|
| 61 |
`dearmon-sat-act-learning-lab` and schema namespace
|
| 62 |
`sat_act_learning_lab_v1`. Its encrypted application uses the versioned Space
|
| 63 |
-
secret `
|
| 64 |
|
| 65 |
Required Space secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`,
|
| 66 |
`TURSO_AUTH_TOKEN`, `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
|
|
@@ -102,11 +107,13 @@ controls, and retention policies.
|
|
| 102 |
|
| 103 |
## Upgrade note
|
| 104 |
|
| 105 |
-
Before replacing any earlier release with v1.3.
|
| 106 |
must be finished or explicitly abandoned. Saved forms are bound to the app
|
| 107 |
-
version and encrypted-source fingerprint, so v1.3.
|
| 108 |
checkpoints. Preserve `LEARNER_ID_HMAC_SECRET` and retain every prior versioned
|
| 109 |
-
Fernet secret and rollback commit needed through acceptance testing.
|
|
|
|
|
|
|
| 110 |
|
| 111 |
## Independent practice-content notice
|
| 112 |
|
|
|
|
| 14 |
|
| 15 |
# Dearmon Analytics SAT & ACT Learning Lab
|
| 16 |
|
| 17 |
+
Release `1.3.8` provides original dynamic practice for current SAT and
|
| 18 |
ACT skill blueprints, a four-level topic graph, individual mastery tracking,
|
| 19 |
targeted practice, and test-like diagnostic sessions. It adds username/password
|
| 20 |
accounts, secure recovery, an isolated one-click demo, and the embedded teaching
|
|
|
|
| 24 |
a branded PNG, printable PDF, accessible hierarchy-and-concepts CSV, and
|
| 25 |
verification manifest; demo sessions remain nonexportable.
|
| 26 |
|
| 27 |
+
Release 1.3.8 matches the live Dearmon Analytics palette, typography, DA mark,
|
| 28 |
+
and compact paper masthead, with the independent-practice disclaimer inside the
|
| 29 |
+
banner. Its brighter amber-outlined test chooser and Section → Domain → Narrow
|
| 30 |
+
Topic rails are compressed and closely stacked over translucent ink surfaces
|
| 31 |
+
with accessible light type. Fresh lessons automatically open Question & Your
|
| 32 |
+
Work; grading is joined by separate same-lesson and next-lesson actions.
|
| 33 |
+
|
| 34 |
+
The answer record freezes elapsed time and its blueprint target at grading,
|
| 35 |
+
then reports their exact reduced fraction and pace comparison. Learner/account
|
| 36 |
+
and instructor attempt CSVs expose the timing values while legacy untimed rows
|
| 37 |
+
remain blank. Shared math normalization serves both lesson surfaces and
|
| 38 |
+
printable exam/answer-key PDFs so raw LaTeX is never the learner-facing
|
| 39 |
+
fallback. The collapsed item-specific Concepts Needed swim lane, complete
|
| 40 |
+
analogous worked examples, separate hints, and mastery whitening remain.
|
| 41 |
|
| 42 |
The Printable Exam Builder requires an active demo or signed-in learner so
|
| 43 |
every generated file has a cleanup owner. It creates a clean Dearmon
|
|
|
|
| 65 |
This private Space uses the separate Turso database
|
| 66 |
`dearmon-sat-act-learning-lab` and schema namespace
|
| 67 |
`sat_act_learning_lab_v1`. Its encrypted application uses the versioned Space
|
| 68 |
+
secret `SAT_ACT_APP_FERNET_V1_3_8_361A7215EF3D_B4E784D7CBC7`.
|
| 69 |
|
| 70 |
Required Space secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`,
|
| 71 |
`TURSO_AUTH_TOKEN`, `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
|
|
|
|
| 107 |
|
| 108 |
## Upgrade note
|
| 109 |
|
| 110 |
+
Before replacing any earlier release with v1.3.8, every active timed simulation
|
| 111 |
must be finished or explicitly abandoned. Saved forms are bound to the app
|
| 112 |
+
version and encrypted-source fingerprint, so v1.3.8 intentionally rejects older
|
| 113 |
checkpoints. Preserve `LEARNER_ID_HMAC_SECRET` and retain every prior versioned
|
| 114 |
+
Fernet secret and rollback commit needed through acceptance testing. The build
|
| 115 |
+
still generates its new Fernet key automatically, stores it under
|
| 116 |
+
`release/private/`, and reuses the validated key without prompting.
|
| 117 |
|
| 118 |
## Independent practice-content notice
|
| 119 |
|
app.py
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
release_manifest.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
| 1 |
{
|
| 2 |
-
"built_utc": "2026-08-
|
| 3 |
"database_name": "dearmon-sat-act-learning-lab",
|
| 4 |
-
"encrypted_payload_sha256": "
|
| 5 |
"entry_module": "sat_act_lab.app_main",
|
| 6 |
-
"fernet_secret_name": "
|
| 7 |
-
"key_fingerprint_sha256_prefix": "
|
| 8 |
-
"plaintext_archive_sha256": "
|
| 9 |
-
"release_version": "1.3.
|
| 10 |
"schema_namespace": "sat_act_learning_lab_v1",
|
| 11 |
"schema_version": "dearmon-sat-act-release-v1",
|
| 12 |
"source_members": {
|
| 13 |
"sat_act_lab/__init__.py": {
|
| 14 |
"bytes": 71,
|
| 15 |
-
"sha256": "
|
| 16 |
},
|
| 17 |
"sat_act_lab/act_english_bank.py": {
|
| 18 |
"bytes": 79622,
|
|
@@ -31,16 +31,16 @@
|
|
| 31 |
"sha256": "9f557aea11cc2796e011031c70776dfd9cf3f4c0f8255fcbff9ded341580a4e4"
|
| 32 |
},
|
| 33 |
"sat_act_lab/app_main.py": {
|
| 34 |
-
"bytes":
|
| 35 |
-
"sha256": "
|
| 36 |
},
|
| 37 |
"sat_act_lab/attribute_graph.py": {
|
| 38 |
"bytes": 131004,
|
| 39 |
"sha256": "8188d65e7894a4c69aed1fdf9f8f4a0c7e90ca6055be44776fac8a39a7bb4dea"
|
| 40 |
},
|
| 41 |
"sat_act_lab/auth.py": {
|
| 42 |
-
"bytes":
|
| 43 |
-
"sha256": "
|
| 44 |
},
|
| 45 |
"sat_act_lab/avatar.py": {
|
| 46 |
"bytes": 73246,
|
|
@@ -63,8 +63,8 @@
|
|
| 63 |
"sha256": "2abb720cd5a0a5a459cbcdc7ec1a8919ea50d7203cc809adccdefed4317e3a7f"
|
| 64 |
},
|
| 65 |
"sat_act_lab/exam_pdf_export.py": {
|
| 66 |
-
"bytes":
|
| 67 |
-
"sha256": "
|
| 68 |
},
|
| 69 |
"sat_act_lab/learner_exam_topics.py": {
|
| 70 |
"bytes": 11795,
|
|
@@ -74,21 +74,25 @@
|
|
| 74 |
"bytes": 51827,
|
| 75 |
"sha256": "cf32579466f8a97f1d299c78ace4a0fef16c6db51685dce0f164f160e910d06c"
|
| 76 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
"sat_act_lab/practice_exam_planner.py": {
|
| 78 |
"bytes": 6731,
|
| 79 |
"sha256": "96dda3ddb76bc2d837769865fdbe177ad650bfd21cd158d161e5cb13123fa6a9"
|
| 80 |
},
|
| 81 |
"sat_act_lab/question_engine.py": {
|
| 82 |
-
"bytes":
|
| 83 |
-
"sha256": "
|
| 84 |
},
|
| 85 |
"sat_act_lab/topic_graph_report.py": {
|
| 86 |
"bytes": 19837,
|
| 87 |
"sha256": "0a6bb8a950a1f600e2d365bbbc7e9afba48c23be30d5440aa0fb94a2ed4ecbea"
|
| 88 |
},
|
| 89 |
"sat_act_lab/tracking.py": {
|
| 90 |
-
"bytes":
|
| 91 |
-
"sha256": "
|
| 92 |
}
|
| 93 |
},
|
| 94 |
"space_file_hashes": {
|
|
@@ -97,16 +101,16 @@
|
|
| 97 |
"sha256": "3b1fdd8eb2e17dc4edae8387f1bc9a18a8072a8d6fae3a71041f00f0b9b04103"
|
| 98 |
},
|
| 99 |
"DEPLOYMENT_NOTES.md": {
|
| 100 |
-
"bytes":
|
| 101 |
-
"sha256": "
|
| 102 |
},
|
| 103 |
"README.md": {
|
| 104 |
-
"bytes":
|
| 105 |
-
"sha256": "
|
| 106 |
},
|
| 107 |
"app.py": {
|
| 108 |
-
"bytes":
|
| 109 |
-
"sha256": "
|
| 110 |
},
|
| 111 |
"requirements.txt": {
|
| 112 |
"bytes": 301,
|
|
|
|
| 1 |
{
|
| 2 |
+
"built_utc": "2026-08-30T13:04:16+00:00",
|
| 3 |
"database_name": "dearmon-sat-act-learning-lab",
|
| 4 |
+
"encrypted_payload_sha256": "98b38862bb0bae2fa92db264f2e8bb64136fbbc8205577c78089bf12e362e5d0",
|
| 5 |
"entry_module": "sat_act_lab.app_main",
|
| 6 |
+
"fernet_secret_name": "SAT_ACT_APP_FERNET_V1_3_8_361A7215EF3D_B4E784D7CBC7",
|
| 7 |
+
"key_fingerprint_sha256_prefix": "B4E784D7CBC7",
|
| 8 |
+
"plaintext_archive_sha256": "361a7215ef3df14fecc19eff46274d95af18cc0e4c9d2ec7fb075e574351f47f",
|
| 9 |
+
"release_version": "1.3.8",
|
| 10 |
"schema_namespace": "sat_act_learning_lab_v1",
|
| 11 |
"schema_version": "dearmon-sat-act-release-v1",
|
| 12 |
"source_members": {
|
| 13 |
"sat_act_lab/__init__.py": {
|
| 14 |
"bytes": 71,
|
| 15 |
+
"sha256": "2cc4420186299725b00fb206f1fb4be160c23713e4c408661327f51f22400294"
|
| 16 |
},
|
| 17 |
"sat_act_lab/act_english_bank.py": {
|
| 18 |
"bytes": 79622,
|
|
|
|
| 31 |
"sha256": "9f557aea11cc2796e011031c70776dfd9cf3f4c0f8255fcbff9ded341580a4e4"
|
| 32 |
},
|
| 33 |
"sat_act_lab/app_main.py": {
|
| 34 |
+
"bytes": 355315,
|
| 35 |
+
"sha256": "8abed1a97ba4a74d8bfc8d0c88148ae6fdada1c549b5ba54e20908aa559017b2"
|
| 36 |
},
|
| 37 |
"sat_act_lab/attribute_graph.py": {
|
| 38 |
"bytes": 131004,
|
| 39 |
"sha256": "8188d65e7894a4c69aed1fdf9f8f4a0c7e90ca6055be44776fac8a39a7bb4dea"
|
| 40 |
},
|
| 41 |
"sat_act_lab/auth.py": {
|
| 42 |
+
"bytes": 52755,
|
| 43 |
+
"sha256": "f6bc1f7f656b8366e69b171291ead6de32ff543fded3dc6b2a53ff6f3c752747"
|
| 44 |
},
|
| 45 |
"sat_act_lab/avatar.py": {
|
| 46 |
"bytes": 73246,
|
|
|
|
| 63 |
"sha256": "2abb720cd5a0a5a459cbcdc7ec1a8919ea50d7203cc809adccdefed4317e3a7f"
|
| 64 |
},
|
| 65 |
"sat_act_lab/exam_pdf_export.py": {
|
| 66 |
+
"bytes": 47544,
|
| 67 |
+
"sha256": "fce7b9417dee76dfbf2d0d9cdc212a3534295ae7f2764b318459a32f77c1aa17"
|
| 68 |
},
|
| 69 |
"sat_act_lab/learner_exam_topics.py": {
|
| 70 |
"bytes": 11795,
|
|
|
|
| 74 |
"bytes": 51827,
|
| 75 |
"sha256": "cf32579466f8a97f1d299c78ace4a0fef16c6db51685dce0f164f160e910d06c"
|
| 76 |
},
|
| 77 |
+
"sat_act_lab/math_rendering.py": {
|
| 78 |
+
"bytes": 22555,
|
| 79 |
+
"sha256": "8b9ddb347ba4921597546a6430bcbc322eea1fe7f57e457432448ffb5e3bf6af"
|
| 80 |
+
},
|
| 81 |
"sat_act_lab/practice_exam_planner.py": {
|
| 82 |
"bytes": 6731,
|
| 83 |
"sha256": "96dda3ddb76bc2d837769865fdbe177ad650bfd21cd158d161e5cb13123fa6a9"
|
| 84 |
},
|
| 85 |
"sat_act_lab/question_engine.py": {
|
| 86 |
+
"bytes": 237008,
|
| 87 |
+
"sha256": "c073090634e055cdd53e3e1af38e5d3967b73cb193c94c187e767269b74c7915"
|
| 88 |
},
|
| 89 |
"sat_act_lab/topic_graph_report.py": {
|
| 90 |
"bytes": 19837,
|
| 91 |
"sha256": "0a6bb8a950a1f600e2d365bbbc7e9afba48c23be30d5440aa0fb94a2ed4ecbea"
|
| 92 |
},
|
| 93 |
"sat_act_lab/tracking.py": {
|
| 94 |
+
"bytes": 143382,
|
| 95 |
+
"sha256": "35705325d13dd4a71ac0a7568d98b49365d999ad000d3245d87cf041f01988c7"
|
| 96 |
}
|
| 97 |
},
|
| 98 |
"space_file_hashes": {
|
|
|
|
| 101 |
"sha256": "3b1fdd8eb2e17dc4edae8387f1bc9a18a8072a8d6fae3a71041f00f0b9b04103"
|
| 102 |
},
|
| 103 |
"DEPLOYMENT_NOTES.md": {
|
| 104 |
+
"bytes": 7495,
|
| 105 |
+
"sha256": "8fc2538674135f75ab59f2d88796e78221a1d7d55a8c44273149047a7e3ff68b"
|
| 106 |
},
|
| 107 |
"README.md": {
|
| 108 |
+
"bytes": 6894,
|
| 109 |
+
"sha256": "634a018397457137466c50b9c43d7cbdcc89570c3c99ea7aa72388fa0353b5bd"
|
| 110 |
},
|
| 111 |
"app.py": {
|
| 112 |
+
"bytes": 709677,
|
| 113 |
+
"sha256": "0d4ff72267e861e5ba4d9bc28baa67fb860cc56d6a6027f126c19963a947cd1a"
|
| 114 |
},
|
| 115 |
"requirements.txt": {
|
| 116 |
"bytes": 301,
|