jtdearmon commited on
Commit
f6f41ea
·
verified ·
1 Parent(s): 1d2bc98

Deploy SAT & ACT Learning Lab 1.3.5

Browse files
Files changed (5) hide show
  1. DEPLOYMENT_NOTES.md +18 -8
  2. README.md +16 -7
  3. app.py +0 -0
  4. release_manifest.json +37 -17
  5. requirements.txt +2 -2
DEPLOYMENT_NOTES.md CHANGED
@@ -1,4 +1,4 @@
1
- # Deployment notes — SAT & ACT Learning Lab 1.3.0
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_0_530ED11365EB_0A5895DF3462`
10
 
11
  ## Runtime contract
12
 
@@ -40,7 +40,15 @@ Encrypted-source secret: `SAT_ACT_APP_FERNET_V1_3_0_530ED11365EB_0A5895DF3462`
40
  simulation may reserve blueprint duration plus a 45-minute grace period,
41
  capped at four hours; sign-out or restart still erases it immediately.
42
  - Instructor-wide access requires a strong secret with no fallback.
43
- - Scored questions and answer keys are deterministic and model-independent.
 
 
 
 
 
 
 
 
44
  - Break It Apart is a deterministic, provider-independent, post-miss reasoning
45
  DAG. It is available after every incorrect practice grade and for every
46
  missed objective item reviewed after a completed simulation—never before
@@ -61,7 +69,7 @@ Encrypted-source secret: `SAT_ACT_APP_FERNET_V1_3_0_530ED11365EB_0A5895DF3462`
61
 
62
  Core secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`, `TURSO_AUTH_TOKEN`,
63
  `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
64
- `SAT_ACT_APP_FERNET_V1_3_0_530ED11365EB_0A5895DF3462`. Live avatar video additionally uses optional
65
  `SIMLI_API_KEY`.
66
 
67
  Email recovery uses `AUTH_RECOVERY_EMAIL_ENABLED`, `AUTH_SMTP_HOST`,
@@ -75,20 +83,22 @@ Release runtime defaults include `ACCOUNT_AUTH_ENABLED=1`,
75
  `SAT_ACT_DEMO_MODE_ENABLED=1`,
76
  `SAT_ACT_DEMO_SESSION_TTL_SECONDS=2700`,
77
  `ASK_PROFESSOR_COMPONENT_DEFAULT=1`, `ASK_PROFESSOR_TTS_DEFAULT=0`, and
78
- `ASK_PROFESSOR_SIMLI_DEFAULT=0`. Face IDs and the pinned Simli client module are
 
 
79
  listed in `environment.example` used to prepare this deployment.
80
 
81
- ## v1.3.0 upgrade gate
82
 
83
  Finish or explicitly abandon every active timed simulation from an earlier
84
- release before installing v1.3.0. Checkpoints are intentionally bound to
85
  app/source/form versions and cannot be resumed across this release. Back up
86
  Turso, preserve `LEARNER_ID_HMAC_SECRET`, and retain prior Fernet secrets and
87
  rollback commits needed through acceptance testing.
88
 
89
  ## Key lifecycle and rollback
90
 
91
- The current loader reads only `SAT_ACT_APP_FERNET_V1_3_0_530ED11365EB_0A5895DF3462`. A later release must generate a
92
  new versioned, fingerprinted secret name. The deployer adds that secret before
93
  the repository commit and retains earlier keys. Roll back by reverting the
94
  Space repository to the prior commit recorded in `deployment_receipt.json`.
 
1
+ # Deployment notes — SAT & ACT Learning Lab 1.3.5
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_5_6C38E208CB90_7C200BA80629`
10
 
11
  ## Runtime contract
12
 
 
40
  simulation may reserve blueprint duration plus a 45-minute grace period,
41
  capped at four hours; sign-out or restart still erases it immediately.
42
  - Instructor-wide access requires a strong secret with no fallback.
43
+ - Core scored questions and answer keys are deterministic and model-independent.
44
+ - The Printable Exam Builder requires an active demo or signed-in learner so
45
+ every generated file is vault-owned, then produces separate matched
46
+ student/key PDFs from selected or learner-missed topics. Optional AI overflow
47
+ is explicit, serialized, globally/individually rate-limited, capped at two
48
+ topic batches and eight items per build,
49
+ independently reviewed, print-only, and locked until the active learner has
50
+ completed every built-in question type for that exact topic. It never enters
51
+ mastery, readiness, routing, diagnostics, or simulation scoring.
52
  - Break It Apart is a deterministic, provider-independent, post-miss reasoning
53
  DAG. It is available after every incorrect practice grade and for every
54
  missed objective item reviewed after a completed simulation—never before
 
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_5_6C38E208CB90_7C200BA80629`. Live avatar video additionally uses optional
73
  `SIMLI_API_KEY`.
74
 
75
  Email recovery uses `AUTH_RECOVERY_EMAIL_ENABLED`, `AUTH_SMTP_HOST`,
 
83
  `SAT_ACT_DEMO_MODE_ENABLED=1`,
84
  `SAT_ACT_DEMO_SESSION_TTL_SECONDS=2700`,
85
  `ASK_PROFESSOR_COMPONENT_DEFAULT=1`, `ASK_PROFESSOR_TTS_DEFAULT=0`, and
86
+ `ASK_PROFESSOR_SIMLI_DEFAULT=0`. Printable supplemental generation defaults to
87
+ `OPENAI_OVERFLOW_MODEL=gpt-5-mini` and
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.5 upgrade gate
92
 
93
  Finish or explicitly abandon every active timed simulation from an earlier
94
+ release before installing v1.3.5. 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
  ## Key lifecycle and rollback
100
 
101
+ The current loader reads only `SAT_ACT_APP_FERNET_V1_3_5_6C38E208CB90_7C200BA80629`. A later release must generate a
102
  new versioned, fingerprinted secret name. The deployer adds that secret before
103
  the repository commit and retains earlier keys. Roll back by reverting the
104
  Space repository to the prior commit recorded in `deployment_receipt.json`.
README.md CHANGED
@@ -14,16 +14,25 @@ short_description: Dynamic SAT/ACT practice, mastery, and reasoning graphs
14
 
15
  # Dearmon Analytics SAT & ACT Learning Lab
16
 
17
- Release `1.3.0` 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
21
  avatar layer used by the Dearmon Analytics Business Calculus platform. Release
22
  1.2.0 introduced deterministic post-miss **Break It Apart** attribute graphs.
 
 
 
23
 
24
- The question engine and answer keys are deterministic. The optional AI teaching
25
- assistant can explain concepts and student work but does not create scored
26
- questions, decide correctness, or alter answer keys.
 
 
 
 
 
 
27
 
28
  After every incorrectly graded practice question, and for every missed
29
  objective item reviewed after a completed simulation, Break It Apart constructs
@@ -41,7 +50,7 @@ attribute-level mastery or retention records.
41
  This private Space uses the separate Turso database
42
  `dearmon-sat-act-learning-lab` and schema namespace
43
  `sat_act_learning_lab_v1`. Its encrypted application uses the versioned Space
44
- secret `SAT_ACT_APP_FERNET_V1_3_0_530ED11365EB_0A5895DF3462`.
45
 
46
  Required Space secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`,
47
  `TURSO_AUTH_TOKEN`, `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
@@ -83,9 +92,9 @@ controls, and retention policies.
83
 
84
  ## Upgrade note
85
 
86
- Before replacing any earlier release with v1.3.0, every active timed simulation
87
  must be finished or explicitly abandoned. Saved forms are bound to the app
88
- version and encrypted-source fingerprint, so v1.3.0 intentionally rejects older
89
  checkpoints. Preserve `LEARNER_ID_HMAC_SECRET` and retain every prior versioned
90
  Fernet secret and rollback commit needed through acceptance testing.
91
 
 
14
 
15
  # Dearmon Analytics SAT & ACT Learning Lab
16
 
17
+ Release `1.3.5` 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
21
  avatar layer used by the Dearmon Analytics Business Calculus platform. Release
22
  1.2.0 introduced deterministic post-miss **Break It Apart** attribute graphs.
23
+ 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
+ The Printable Exam Builder requires an active demo or signed-in learner so
28
+ every generated file has a cleanup owner. It creates a clean Dearmon
29
+ Analytics-branded student PDF and a separate answer-key PDF from selected or
30
+ previously missed topics.
31
+ Both carry the same random form code. Core scored questions and their answer
32
+ keys are deterministic. After the active learner has completed every built-in
33
+ question type for an exact topic, explicit opt-in can create separately labeled,
34
+ independently reviewed AI supplemental items for printing only. They never
35
+ decide correctness or alter mastery, readiness, routing, or simulation scores.
36
 
37
  After every incorrectly graded practice question, and for every missed
38
  objective item reviewed after a completed simulation, Break It Apart constructs
 
50
  This private Space uses the separate Turso database
51
  `dearmon-sat-act-learning-lab` and schema namespace
52
  `sat_act_learning_lab_v1`. Its encrypted application uses the versioned Space
53
+ secret `SAT_ACT_APP_FERNET_V1_3_5_6C38E208CB90_7C200BA80629`.
54
 
55
  Required Space secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`,
56
  `TURSO_AUTH_TOKEN`, `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
 
92
 
93
  ## Upgrade note
94
 
95
+ Before replacing any earlier release with v1.3.5, every active timed simulation
96
  must be finished or explicitly abandoned. Saved forms are bound to the app
97
+ version and encrypted-source fingerprint, so v1.3.5 intentionally rejects older
98
  checkpoints. Preserve `LEARNER_ID_HMAC_SECRET` and retain every prior versioned
99
  Fernet secret and rollback commit needed through acceptance testing.
100
 
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-29T22:32:47+00:00",
3
  "database_name": "dearmon-sat-act-learning-lab",
4
- "encrypted_payload_sha256": "98e56749f08fcce8fb612d85b8c11ae9c01e626f50fb26dab52528d124127bca",
5
  "entry_module": "sat_act_lab.app_main",
6
- "fernet_secret_name": "SAT_ACT_APP_FERNET_V1_3_0_530ED11365EB_0A5895DF3462",
7
- "key_fingerprint_sha256_prefix": "0A5895DF3462",
8
- "plaintext_archive_sha256": "530ed11365eb79e0f0fdfb306594a7a316c95ac5e2ada567c5bbd87e8c0ba5ad",
9
- "release_version": "1.3.0",
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": "ef21e2c2be0c32fa808b92839e04419e7ccaf2292f74c260631ffc779a69b511"
16
  },
17
  "sat_act_lab/act_english_bank.py": {
18
  "bytes": 79622,
@@ -26,9 +26,13 @@
26
  "bytes": 43952,
27
  "sha256": "5959db1e6a007f9384978c2a65af82e9bfd81216db939a1d852a91852badef8e"
28
  },
 
 
 
 
29
  "sat_act_lab/app_main.py": {
30
- "bytes": 265227,
31
- "sha256": "415448d1c144174d3c44b03c0755106c60a26f4a1e9c64dafd869027543418ae"
32
  },
33
  "sat_act_lab/attribute_graph.py": {
34
  "bytes": 131004,
@@ -58,14 +62,30 @@
58
  "bytes": 100384,
59
  "sha256": "2abb720cd5a0a5a459cbcdc7ec1a8919ea50d7203cc809adccdefed4317e3a7f"
60
  },
 
 
 
 
 
 
 
 
61
  "sat_act_lab/learning_concepts.py": {
62
  "bytes": 51335,
63
  "sha256": "202212791dc80fcc20b2dcc5d662c98e43f53db1e39b2b9992c8289183263346"
64
  },
 
 
 
 
65
  "sat_act_lab/question_engine.py": {
66
  "bytes": 221287,
67
  "sha256": "929d8e424bbb845e69cab76f6e591f9bfb1f825c00733cd90efce089ea1a89a2"
68
  },
 
 
 
 
69
  "sat_act_lab/tracking.py": {
70
  "bytes": 139074,
71
  "sha256": "c814032247eac63b59d7c619aa172af6340840bc2d1cd5e2b9e5294862231d82"
@@ -77,20 +97,20 @@
77
  "sha256": "3b1fdd8eb2e17dc4edae8387f1bc9a18a8072a8d6fae3a71041f00f0b9b04103"
78
  },
79
  "DEPLOYMENT_NOTES.md": {
80
- "bytes": 5663,
81
- "sha256": "a7230ac72d71b5a18b9f4edfb119bdd0b0d00ac12b28124c271a88867abd8385"
82
  },
83
  "README.md": {
84
- "bytes": 5113,
85
- "sha256": "65a80c1d285d961b284528d8cd2e001737887ae1bcfff7c3fad24a3835da34fe"
86
  },
87
  "app.py": {
88
- "bytes": 595623,
89
- "sha256": "c1b7e44eda4e80344fa7171883ac66a69cdb125be8026e80e15f03cb7afda0b1"
90
  },
91
  "requirements.txt": {
92
- "bytes": 287,
93
- "sha256": "1cfe1a2b7efb8ba2372a283d5897316f691a693b23b53e0169888569060d1776"
94
  },
95
  "runtime.txt": {
96
  "bytes": 13,
 
1
  {
2
+ "built_utc": "2026-08-30T00:47:26+00:00",
3
  "database_name": "dearmon-sat-act-learning-lab",
4
+ "encrypted_payload_sha256": "59927fc17c5ad940f89bf68e270172797eba7c1d6338cfa25b109f12b6d18689",
5
  "entry_module": "sat_act_lab.app_main",
6
+ "fernet_secret_name": "SAT_ACT_APP_FERNET_V1_3_5_6C38E208CB90_7C200BA80629",
7
+ "key_fingerprint_sha256_prefix": "7C200BA80629",
8
+ "plaintext_archive_sha256": "6c38e208cb90270b2afe08fdda1db1636cc414b4777f77b24c833d6539763d9a",
9
+ "release_version": "1.3.5",
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": "426d046e94f484f4a732cd52bb4cd8434236ab98e52d9a91bd456cae3d3635de"
16
  },
17
  "sat_act_lab/act_english_bank.py": {
18
  "bytes": 79622,
 
26
  "bytes": 43952,
27
  "sha256": "5959db1e6a007f9384978c2a65af82e9bfd81216db939a1d852a91852badef8e"
28
  },
29
+ "sat_act_lab/ai_question_overflow.py": {
30
+ "bytes": 30007,
31
+ "sha256": "9f557aea11cc2796e011031c70776dfd9cf3f4c0f8255fcbff9ded341580a4e4"
32
+ },
33
  "sat_act_lab/app_main.py": {
34
+ "bytes": 305777,
35
+ "sha256": "3024712d00f7b461229b3088d327fc029a3f7571bd1973c684b0f71b1913c61c"
36
  },
37
  "sat_act_lab/attribute_graph.py": {
38
  "bytes": 131004,
 
62
  "bytes": 100384,
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,
71
+ "sha256": "bc32af89d411d8ff8918d74e026421707004adbf0e64e61d49706e3062526167"
72
+ },
73
  "sat_act_lab/learning_concepts.py": {
74
  "bytes": 51335,
75
  "sha256": "202212791dc80fcc20b2dcc5d662c98e43f53db1e39b2b9992c8289183263346"
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": 221287,
83
  "sha256": "929d8e424bbb845e69cab76f6e591f9bfb1f825c00733cd90efce089ea1a89a2"
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"
 
97
  "sha256": "3b1fdd8eb2e17dc4edae8387f1bc9a18a8072a8d6fae3a71041f00f0b9b04103"
98
  },
99
  "DEPLOYMENT_NOTES.md": {
100
+ "bytes": 6367,
101
+ "sha256": "67ef67799bb031e0a80c11afac6294dd59b97089b4e557a9d358217d60cc0c78"
102
  },
103
  "README.md": {
104
+ "bytes": 5754,
105
+ "sha256": "74cf786233b9bf01c141e2477e62ad4a501eff30e695f5bd0706dc7775758649"
106
  },
107
  "app.py": {
108
+ "bytes": 669889,
109
+ "sha256": "1af30556d5b23a7ab747a49b76486bcba933f621e8a4a583dd2fb7ef13bbf6aa"
110
  },
111
  "requirements.txt": {
112
+ "bytes": 301,
113
+ "sha256": "82e9c9f08bbba04825943a5442185d82389605a6822b9740f555c6fe3aef5f3b"
114
  },
115
  "runtime.txt": {
116
  "bytes": 13,
requirements.txt CHANGED
@@ -6,13 +6,13 @@ starlette==1.6.0
6
  jinja2==3.1.6
7
  uvicorn==0.41.0
8
  numpy==2.5.2
9
- pandas==3.0.5
10
  matplotlib==3.10.8
11
  sympy==1.14.0
12
  requests==2.34.2
13
  pillow==12.1.1
14
  python-docx==1.2.0
 
15
  libsql==0.1.11
16
  openai==2.54.0
17
  cryptography==46.0.7
18
-
 
6
  jinja2==3.1.6
7
  uvicorn==0.41.0
8
  numpy==2.5.2
9
+ pandas==2.3.3
10
  matplotlib==3.10.8
11
  sympy==1.14.0
12
  requests==2.34.2
13
  pillow==12.1.1
14
  python-docx==1.2.0
15
+ socksio==1.0.0
16
  libsql==0.1.11
17
  openai==2.54.0
18
  cryptography==46.0.7