f2c57c1ad1
docs: step-by-step cut-over to 216 with rollback, what waits on others, after-cut-over list
Zareian2026-10-17 20:18:40 +03:30
f6d779255d
docs: what was tested on 216 (end-to-end user flow, restore from the 247 encrypted copy)
Zareian2026-10-17 20:08:38 +03:30
4cd859b5fa
216 backups encrypted on 216: pgBackRest (AES-256) + age-encrypted payment CSVs, pushed write-only to 247 with rrsync; health watches pg_stat_archiver and OFFSITE_SYNC_STATUS_FILE; 216 scripts/configs in ops/server216; plaintext pg216 pipeline removed
Zareian2026-10-17 19:43:00 +03:30
dd98f16d12
Live backup of 216 on 247 (zareian-pg216-* units, Postgres 16 tools in our dir, SCRAM hash only on 216), backup scripts take PGB_ROOT/PGB_BIN/PGB_PORT with 249 defaults, anti-bot layers documented
Zareian2026-10-17 19:22:56 +03:30
bd329f83ae
Dedicated server 78.38.35.216: state and cut-over order in docs, CLAUDE.md entry, password snippet for two Password lines, archive-app-log.sh finds its project dir
Zareian2026-10-17 19:06:04 +03:30
670513b462
tools/figures: server_fixups.json (corrections of already-published questions and lessons), doc line
Zareian2026-10-17 03:36:00 +03:30
133233144e
Seed: grade 12 questions (every lesson 4+ per lesson, answers computed in code), minus-sign and doubled-x fixes in grade 10 and 11
Zareian2026-10-17 03:35:34 +03:30
a5a93ef6ba
Seed: grade 11 questions (every lesson 4+ per lesson, answers computed in code)
Zareian2026-10-17 03:27:10 +03:30
5f963e2898
Seed: grade 10 questions (every lesson 4+ per lesson, answers computed in code)
Zareian2026-10-17 03:13:37 +03:30
7bd7c637b4
Seed: grade 9 questions (every lesson 4+ per lesson, answers computed in code)
Zareian2026-10-17 03:00:27 +03:30
ac96f93abc
Seed: grade 8 questions (every lesson 4+ per lesson, answers computed in code)
Zareian2026-10-17 02:48:33 +03:30
9eae99340d
Seed: grade 6 rebuilt (every lesson 5+ questions, answers computed in code), supplementary/complementary text fixed in grades 4/6/7, '/' decimals to '٫', wrong keys fixed
Zareian2026-10-17 01:31:28 +03:30
f57deb9c1d
Seed: grade 3 rebuilt (every lesson 5+ questions, wrong figures/lesson text fixed), Persian digits and plain fractions across all grades, apply_fixups gains lesson/question_set, ledger save chunked for SQLite
Zareian2026-10-16 21:27:22 +03:30
5fbbd371fe
Seed: questions for the 499 lessons that had none; every lesson now has questions (5,406/5,406)
Zareian2026-10-16 20:15:13 +03:30
82fec6bf75
Admin: PaymentEvent read-only ledger view (was documented but not registered)
Zareian2026-10-16 02:18:07 +03:30
8a2bf26b16
Lesson.order from the book (seed sets it, also re-syncs unit/node order); matrix lesson rows as one multi-line step
Zareian2026-10-15 13:53:30 +03:30
3f68abe741
Explicit ordering for Lesson, Question, Choice (+id tie-break on Unit/Node): lessons no longer reshuffle after row updates
Zareian2026-10-15 13:39:42 +03:30
7973bf4100
Raw LaTeX guard: vdots/ddots/sqrt( converted, leftover() sees bare words, matrix lesson and 4 intro texts fixed in seed
Zareian2026-10-15 13:24:11 +03:30
0c6e155232
More figured questions for grade 12 (geometry conics/vectors, calculus graph reading)
Zareian2026-10-15 02:26:16 +03:30
e6e983f970
Figures must not give the answer away: blank titles on new figured questions, 7 trivial questions removed, 7 reworded; apply_fixups tool
Zareian2026-10-15 02:21:02 +03:30
e3c8962b7b
Load test of 1000 players on the server: CPU is the ceiling (~135 req/s); player-simulation tools
Zareian2026-10-13 19:48:00 +03:30
ba4ecff29e
Server hardening: nginx origin locked to ArvanCloud + CSP, demo logins removed, docs
Zareian2026-10-13 19:17:11 +03:30
2a03dc81b5
Docs: X-Forwarded-For spoofing closed; Arvan bypass (no WAF) still open
Zareian2026-10-13 18:50:47 +03:30
e3bddb3757
Trust X-Forwarded-For only from ArvanCloud edges
Zareian2026-10-13 18:45:27 +03:30
78c3669119
Docs: app logs archived nightly and kept forever on the backup server
Zareian2026-10-13 17:56:12 +03:30
3559c43902
App logs kept forever: nightly gzip on 249 (LOG_FILE_ROTATION=external), hourly pull to 247 via a forced-command key, health warns if the archive stops
Zareian2026-10-13 17:54:05 +03:30
f4831e93a7
Docs: payment event ledger and its CSV export on the backup server
Zareian2026-10-13 14:47:24 +03:30
44ad2eabf3
Payment events: one central payment_result row for every path (callback, reconcile, Bazaar, renewal, 100% code), discount_applied, no duplicate order_created; Bazaar token never stored
Zareian2026-10-13 14:44:50 +03:30
8d8665edf3
Payment event ledger (PaymentEvent) replicated to the backup server, plus CSV export script on 247
Zareian2026-10-13 14:18:47 +03:30
947f946909
Question packs removed at the root; all subscriptions 4 assistant questions a day; Bazaar is subscription-only
Zareian2026-10-12 20:33:38 +03:30
9c3adc3e60
Subscriptions only: Bazaar panel prices (598/898/1398k), assistant quota 5/3/3 from a cost calculation, packs off sale
Zareian2026-10-12 19:57:16 +03:30
c0fa46be44
Payment providers as classes (Strategy + factory); 10342 = monthly; health logs a failed Bazaar check
Zareian2026-10-12 18:21:45 +03:30
76b0ef976e
Bazaar: plans cache cleared by migration 0014, enum name override, CLAUDE.md status
Zareian2026-10-12 17:59:43 +03:30
2e0753587c
Like/dislike + report under every question and lesson, lesson reports and vote columns in admin; practice islands refresh from file; audit fixes
Zareian2026-10-12 12:56:47 +03:30
b075b93f2a
Tutor/answers: bare subscripts (S_n, a_1) become Unicode; migration 0022 re-cleans DB text
Zareian2026-10-12 12:18:46 +03:30
e662914efc
No LaTeX/markdown anywhere students read (seed, import, DB migration 0021, tutor history, frontend guard); quiz of an island is fixed per user again
Zareian2026-10-12 12:15:28 +03:30
dd10ff83f4
13,689 new quiz questions in 160 practice islands (grades 3-12), Question.figure, replay rotates the quiz, LaTeX removed from lesson/question text
Zareian2026-10-12 11:58:18 +03:30
3187f69714
UNLOCK_ALL_PHONES: tester accounts see every island unlocked (map and server rule)
Zareian2026-10-12 11:12:13 +03:30
33478179e2
CLAUDE.md: truth tables and island labels checked in the live app
Zareian2026-10-12 10:57:01 +03:30
9c3596a132
CLAUDE.md: what is on the server after the subjects/figures release and what was checked
Zareian2026-10-12 05:44:32 +03:30
8cb1ecb85e
Subjects per grade (math, calculus, geometry, stats, discrete), 5 new textbooks, 202 new islands, long islands split, hand-written figures and lesson texts for the new books
Zareian2026-10-12 05:35:18 +03:30
3d51b3b83a
CLAUDE.md: capacity under load (measured vs estimated), open launch-day caps, how to load-test the shared server safely
Zareian2026-10-11 22:27:54 +03:30
98bf05fcbd
OTP code requests per IP 20 -> 100/hour so a class on one school Wi-Fi can all log in
Zareian2026-10-11 22:11:08 +03:30
2c708088e4
Spike readiness: AI gets its own slice of threads, cheaper hot paths, classroom-friendly login
Zareian2026-10-11 20:55:24 +03:30
feaa5eb540
Postgres connection pool, clean 503 under overload, time indexes, 4 workers
Zareian2026-10-11 20:21:35 +03:30
d32d98d3f6
Full lesson audit (grades 3-12): 167 lessons rewritten for wrong or missing facts (terminology, wrong answers, incomplete/ambiguous prompts), 115 final answers added, 11 figures rebuilt and 6 removed to match the new text
Zareian2026-10-11 15:11:11 +03:30
673a9e7e39
Lessons that depended on a missing figure or table now carry their own data (15 rewritten), figures added for 5; fixes wrong answers in 3638 and 3769
Zareian2026-10-11 14:48:51 +03:30
1fe453095f
Geometry and measurement lessons: figures for the remaining drawable lessons (shapes without invented numbers), fraction bars and number lines for pure-arithmetic lessons
Zareian2026-10-11 14:41:01 +03:30
4a41def4b2
Lesson figures: 2,466 lessons (2,927 figures) now carry a fixed figure; graphs, tables, trees, number lines, area models, pies
Zareian2026-10-11 13:34:18 +03:30
293b916544
Lesson content complete: examples/steps for all 3,778 lessons, 1,775 lessons with fixed figures, 38 quiz fixes
Zareian2026-10-11 01:29:36 +03:30
4821df3914
CLAUDE.md: pointer to the next-APK notes and why app payments go through pay.html
Zareian2026-10-10 18:54:12 +03:30
9024c6b8d8
/api/user/summary: streak.activeToday and streak.lost for the app's lit / at-risk / frozen flame
Zareian2026-10-10 18:27:14 +03:30
2e87a81cc5
CLAUDE.md: pre-move SQLite copy removed from the server; the old August backup script was never scheduled
Zareian2026-10-10 17:14:42 +03:30
d10e3e4c9f
deploy.sh: backup retention used ls on a glob that can be empty, killing the deploy under pipefail
Zareian2026-10-10 16:53:57 +03:30
a9cccc6550
Live off-site Postgres copy on 247 replaces the nightly pg_dump; backup retention in deploy.sh
Zareian2026-10-10 16:53:10 +03:30
25b3d24eb4
gen_lesson_figures prints prompt/completion tokens
Zareian2026-10-07 16:34:22 +03:30
ce629e32e4
Lesson.figures: fixed diagrams per lesson (stored once, served with the lesson); gen_lesson_figures; 3 calculus-12 lessons
Zareian2026-10-07 16:26:10 +03:30
1d7eb829e2
Oversized request body: 413 with a short warning instead of 500 and an ERROR traceback
Zareian2026-10-07 14:48:03 +03:30
ff370112c0
Rebuild technical-handbook.pdf from the updated Markdown
Zareian2026-10-07 14:41:59 +03:30
d584d62904
Do not connect to the shared Redis: CACHE_URL stays empty, own Redis is an open decision
Zareian2026-10-07 14:41:39 +03:30
c129f64180
Docs: Redis cache behaviour during an outage, what was tested live, CACHE_KEY_PREFIX
Zareian2026-10-07 14:21:31 +03:30
277927046d
Redis outage must not 500 the API: ResilientRedisCache, key prefix, 1s socket timeouts
Zareian2026-10-07 14:16:01 +03:30
7929f6bd85
Docs and requirements: signing key replaced and shared Redis cache are live; pin dependency versions
Zareian2026-10-07 14:02:51 +03:30
4c601087dc
deploy.sh: health check through the gunicorn socket, optional DEPLOY_BUNDLE when Gitea is unreachable
Zareian2026-10-07 13:57:50 +03:30
3e63bd0860
Docs: 7ecb337 is live; record the Gitea 504 from the server and the bundle deploy
Zareian2026-10-07 13:48:20 +03:30
7ecb337263
Finishing a lesson or island needs recorded answers and an unlocked island; auto DB backup before migrate; throttles on 15 more routes
Zareian2026-10-07 13:30:24 +03:30
7e3854098f
CLAUDE.md: guest login removed, state on the server
Zareian2026-10-05 18:40:26 +03:30
5b7e6fb7d7
Content: 724 questions on lessons that had none (grades 3-11), each solved blind by a second pass
Zareian2026-10-05 18:38:10 +03:30
f22b9f2e88
Calculus 12: 12 more questions on lessons that had none
Zareian2026-10-05 18:20:10 +03:30
663252a260
Remove the guest system entirely: no is_guest/device_id, no guest throttles, phone login is the only way in
Zareian2026-10-05 18:20:10 +03:30