jtdearmon commited on
Commit
b13fc20
·
verified ·
1 Parent(s): b2e9f64

Deploy SAT & ACT Learning Lab 1.3.8

Browse files
Files changed (4) hide show
  1. DEPLOYMENT_NOTES.md +21 -13
  2. README.md +21 -14
  3. app.py +0 -0
  4. release_manifest.json +27 -23
DEPLOYMENT_NOTES.md CHANGED
@@ -1,4 +1,4 @@
1
- # Deployment notes — SAT & ACT Learning Lab 1.3.7
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: `SAT_ACT_APP_FERNET_V1_3_7_6BE7EEBD2633_CF494C1151F2`
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
- `SAT_ACT_APP_FERNET_V1_3_7_6BE7EEBD2633_CF494C1151F2`. Live avatar video additionally uses optional
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.7 upgrade gate
92
 
93
  Finish or explicitly abandon every active timed simulation from an earlier
94
- release before installing v1.3.7. 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.7 must also verify the three horizontal Practice
100
- rails; the collapsed, expandable, question-specific Concept swim lane; rendered
101
- inline Math without literal dollar delimiters; and the softened AA-contrast
102
- charcoal/neon rails and Topic Graph. Each generated item must expose a full,
103
- distinct analogous worked example and a separate learner-invoked hint for the
104
- active item. Confused-word items must exercise the expanded deterministic
105
- surfaces without a model call.
 
 
 
 
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 `SAT_ACT_APP_FERNET_V1_3_7_6BE7EEBD2633_CF494C1151F2`. A later release must generate a
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.7` 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,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.7 presents Practice as three horizontal hierarchy rails—Section,
28
- Domain, then Narrow Topic—and loads each fresh item's Concepts Needed path in a
29
- collapsed, expandable, question-specific swim lane. Rails and the
30
- Topic Graph use softened AA-contrast charcoal surfaces, brighter neon accents,
31
- and explicit light type while preserving readable mastery whitening. Every
32
- generated practice item includes a complete, distinct analogous worked example
33
- and a separate learner-invoked hint for the active item. Deterministic
34
- confused-word practice covers an expanded set of commonly confused pairs and
35
- groups without a model call.
 
 
 
 
 
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 `SAT_ACT_APP_FERNET_V1_3_7_6BE7EEBD2633_CF494C1151F2`.
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.7, every active timed simulation
106
  must be finished or explicitly abandoned. Saved forms are bound to the app
107
- version and encrypted-source fingerprint, so v1.3.7 intentionally rejects older
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-30T11:47:39+00:00",
3
  "database_name": "dearmon-sat-act-learning-lab",
4
- "encrypted_payload_sha256": "c32bd13c204dc1ac17efff0a30377844d0c4680e03d8c8ac7a15e15550fd48f3",
5
  "entry_module": "sat_act_lab.app_main",
6
- "fernet_secret_name": "SAT_ACT_APP_FERNET_V1_3_7_6BE7EEBD2633_CF494C1151F2",
7
- "key_fingerprint_sha256_prefix": "CF494C1151F2",
8
- "plaintext_archive_sha256": "6be7eebd263324339ddcaa161529377350e148f8d6bafbc21270f6fdd0c814ce",
9
- "release_version": "1.3.7",
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": "34d993b7900b03a44147017a479e04644aa27cc202f4e2b05aa15c9061006b98"
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": 349363,
35
- "sha256": "6e69cb964a3dfb2561307159c1bbed74ddd19efdc249013984fdf883be439eed"
36
  },
37
  "sat_act_lab/attribute_graph.py": {
38
  "bytes": 131004,
39
  "sha256": "8188d65e7894a4c69aed1fdf9f8f4a0c7e90ca6055be44776fac8a39a7bb4dea"
40
  },
41
  "sat_act_lab/auth.py": {
42
- "bytes": 52719,
43
- "sha256": "ca3a1ed2540a3c7a617286e26dedd0901caef39126684b0e3a62f0fa13fe4c67"
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": 47043,
67
- "sha256": "876991e8fb86d85606854b0a2d2609203b77537b9a91e2183edfdee0aead7a16"
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": 236611,
83
- "sha256": "13e4f9055e0b856fe67b62682478e6e7229578c1b248e2dbd7a32a99e43811c7"
84
  },
85
  "sat_act_lab/topic_graph_report.py": {
86
  "bytes": 19837,
87
  "sha256": "0a6bb8a950a1f600e2d365bbbc7e9afba48c23be30d5440aa0fb94a2ed4ecbea"
88
  },
89
  "sat_act_lab/tracking.py": {
90
- "bytes": 139074,
91
- "sha256": "c814032247eac63b59d7c619aa172af6340840bc2d1cd5e2b9e5294862231d82"
92
  }
93
  },
94
  "space_file_hashes": {
@@ -97,16 +101,16 @@
97
  "sha256": "3b1fdd8eb2e17dc4edae8387f1bc9a18a8072a8d6fae3a71041f00f0b9b04103"
98
  },
99
  "DEPLOYMENT_NOTES.md": {
100
- "bytes": 6943,
101
- "sha256": "698ed5f0b61712fc753f541fcbff65ee5699d0374e222b9a15134e8d4673fdc2"
102
  },
103
  "README.md": {
104
- "bytes": 6392,
105
- "sha256": "5fc3eb15ca91ae46dca856dc2a5e76d5f7c96acb851b264631a365b3163992ff"
106
  },
107
  "app.py": {
108
- "bytes": 693367,
109
- "sha256": "8046d0b3e2973199a9ea1759e9100ebf018b9c0f21690733863eb9a2033c988f"
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,