Releases: mideind/Netskrafl
Version n20260304
Paywall alignment with Explo
Aligns Netskrafl's subscription model with Explo:
- 4 robots per locale — removed legacy 3-robot Icelandic list; all locales now use the same 4-robot set
- Premium robots — Fullsterkur (level 0) and Miðlungur (level 8) require subscription; Hálfdrættingur and Amlóði remain free
- 3-game limit for free users (down from 8), enforced server-side via
count_live_games()with early termination /userlistpremium field — robot entries includepremium: boolfor frontend lock icon display/initgameenforcement — returnspremium_requiredorgame_limit_reachederrors for free users- Robot level normalization — prevents non-canonical robot IDs from creating spurious game/Elo entries
- 14 new e2e tests covering autoplayer definitions, premium enforcement, game limits, and
/userlistresponse
Deployment note
Deploy after netskrafl-react 3.4.0 is live in Málstaður. The frontend gracefully degrades without these backend changes, but deploying the backend first would cause silent failures for free users.
Version n20260227
Dual-backend database architecture (NDB + PostgreSQL)
Major architectural milestone: the database layer now supports both Google Cloud NDB (Datastore) and PostgreSQL, selectable at runtime via the DATABASE_BACKEND environment variable.
Highlights
- Protocol-based database abstraction (
src/db/): backend-agnostic protocols with NDB and PostgreSQL repository implementations - Backward-compatible: NDB remains the default backend; App Engine deployments continue to work with no configuration changes
skrafldb.pyrefactored into a thin facade that imports fromskrafldb_ndb.py(original) orskrafldb_pg.py(PostgreSQL) based onDATABASE_BACKEND- PostgreSQL backend: SQLAlchemy ORM models, connection pooling, request-scoped session/transaction management
- Comprehensive test suite: repository tests (
tests/db/) and API end-to-end tests (tests/api_e2e/) covering both backends - Docker local development:
docker-compose.local.ymlfor PostgreSQL + Redis setup - Credentials consolidation: moved under
credentials/{PROJECT_ID}/ - Separated requirements:
requirements.txt(App Engine) andrequirements-pg.txt(Docker/PostgreSQL) - Transition page update: simplified Málstaður transition page
Version e20250205
Added longer timeout for SecretManager initialization
Version e20240306
User online status caching (#94) * WIP on cron + Redis caching of connected users per locale * Language support tweaks * WIP on more logical locale support; fav users filtered by locale * WIP on Redis caching of presence using sets; moved type definitions * WIP on Redis caching of user presence data * WIP on online user caching * WIP but code is now consistent; needs test * Cleanup of unused variables in firebase.py * Added user parameter to render_template() calls; code formatting in cache.py * Bug fixes in Redis online status handling code * Added online user update job to cron.yaml * Added TTL caching of online users * Add attribution & copyright for Norwegian word frequency data * Reduced in-memory caching of online users to 30 seconds * Skip user online query if robots only * Removed unused class
The mfix3 version running on GAE as of 2022-09-04
Mfix2 + patches including updated word lists and cherry picked bug fixes, plus updated copyright info and a fix to the SalesCloud wrapper div style
Netskrafl master branch before merging Explo stuff
This is a release that encompasses Netskrafl before a large merge with the Explo codebase, where code has been moved to the /src directory, the backend endpoints split into web.py and api.py, and the UI migrated to a single-page UI written in TypeScript.
Mfix release
- Vocabulary fixes
- Fixed code for reading games from the database. ResponseMoves were being read in such a manner that word validity at the time of reading was used as the ground truth, not the word validity as it was when the original move was made. This affected manual wordcheck games that were in progress while the vocabulary was being changed to be more restrictive - and then back again to being more permissive.
Median release
- Backtracked change in main dictionary; it now includes the same subset of BÍN as before (basically everything except 'bibl' and plural question forms)
- Changed the Miðlungur robot to use a separate vocabulary, similar to what Amlóði does
- Added tests
- Removed extraneous indexes from the RatingModel datastore entities
- Added separate accounting of Elo points for manual-wordcheck games (not yet enabled in the UI)
Ksnid release
- Updated dictionary from newest version of BÍN using "Kristínarsnið"
- Removed ~130.000 rare, localized, poetic, old or misspelled word forms from dictionary
- Moved to Python 3.8 runtime
- Type annotations added
Vocabfix3: Python2 version synced with Python3
This is hopefully the last Python2 release, using the same vocabulary as the new Python3 release.