Unreleased
0.1.11-rc.1 - 2026-06-11
Ready List
- Scheduled study now limits new-card introductions through a configurable
New cards per dayoption. New cards are introduced in deck order, generated reverse directions share the parent card's introduction, and minimum-session fill no longer bypasses the daily new-card limit. - The ready-screen status bar and
Due cardsfilter now follow the same scheduled-study new-card limit as theStartpreview. TheNew cardsfilter continues to show the full unstudied backlog. - Problem card filtering now uses recent underperformance against the scheduler's replayed recall expectation instead of cumulative difficulty or lapse history, so cards can leave the filter as recent study results improve.
- Ready-list keyboard navigation on large decks is much faster. Selection changes now update only selection-local controls instead of recomputing the whole Cards menu on every arrow-key movement.
- Cards-menu opening on large decks is faster. Menu state now reuses one ready-list snapshot and preloaded card-state sets rather than repeatedly recomputing selected-card, flag, suspension, deferral, reversal, active-card, and shown-card bulk-action state.
- Flag, suspend, and defer actions from the ready list now use a narrower ready-screen refresh instead of a full screen/menu render, improving response time on larger decks while keeping filters, counts, status text, and selection accurate.
F5is now handled directly by the ready-list key handler, avoiding a separate overlapping key binding on the same control.- Ending a study session before answering any question no longer records an empty study pass. Opening an older review database removes existing empty pass rows while leaving review events and ordinary linked pass rows unchanged.
Startup And Profile Safety
- The GUI now refuses to start a second Cosimo instance using the same profile
lock beside
cosimo.ini, avoiding conflicting writes to the config file, deck file, review database, and sync revision state. Sync server binaries are unaffected. - The GUI profile lock is now held for the whole process lifetime instead of only during startup initialisation, so Windows builds continue to block a second instance after the main window opens.
- The GUI now releases that profile lock explicitly during the normal close path, avoiding a lingering process after exit on Windows.
Audio
- Audio-generation helper output now goes under
logsinstead ofreports, keeping the reports directory focused on saved study, exam, quiz, and learning-dashboard reports.
Learning Dashboard
- Learning-dashboard workload forecasts now apply the same new-card daily intake limit as scheduled study, while still reporting the full unstudied deck-card backlog separately.
- Clarified dashboard counts for decks with generated reverse questions. The dashboard now labels combined scheduler state as total cards, splits the current state by standard and reversed cards, and reports review-state progress as standard, reversed, and total counts.
Backup, Restore, And Sync
- Opening a deck now repairs stale
next_card_idmetadata when existing card IDs are already higher than the recorded high-water mark, preventing future automatic card IDs from being chosen from an unsafe range. - Full-deck bundle export and backup now show progress while creating the bundle, and sync upload/download progress now includes local bundle creation and restore progress rather than jumping across those phases.
- Sync restore progress now continues through the local restore phase instead of leaving a long unreported interval after download.
- Sync upload/download progress bars now advance monotonically. Bundle, transfer, restore, and saving phases no longer report progress values that can appear to start in the middle or move backward.
- Sync OAuth now uses the browser registration/device-authorisation callback flow only. The earlier out-of-band code-copy endpoints were removed before the release-candidate API surface was established.
- Public sync server registration is now gated by explicit privacy configuration. Public-service mode refuses new account registration until controller, contact, privacy-notice, data-category, purpose, lawful-basis, recipient, transfer, retention, and rights/complaint information is configured; domestic mode is available for non-public personal deployments and can restrict registration to an account allowlist.
- Sync registration now happens on the sync server's browser page. The page presents the configured privacy notice, requires explicit acceptance, records the accepted notice version/hash and lawful basis after OAuth verifies the account, and rejects a callback for a different Fediverse account when the user entered a full account.
Deck -> Sync -> Register New Accountis now separate fromDeck -> Sync -> Log In. Registration creates a sync account and authorises the current installation; Log In only authorises another installation for an existing account and does not repeat the account-registration consent flow.Deck -> Sync -> Delete Sync Account Datanow opens a server-side OAuth-backed account-deletion flow. After the returned Fediverse account matches the requested account, the server deletes owned deck metadata, bundles, review-history bundles, Cosimo sync tokens, completed login handoffs, and privacy-notice acceptance records without requiring an existing Cosimo bearer token.- The CGI sync server now has a
configsubcommand that asks deployment questions and writes a supported CGI config script containing storage, quota, service-mode, privacy-notice, controller/contact, retention, and domestic-allowlist settings. - SQLite-backed sync storage now enables SQLite
secure_deletefor sync metadata connections, reducing retention of deleted bearer-token, OAuth, privacy-acceptance, and deck-metadata rows in database free pages. - Sync server databases now migrate to schema version 4, dropping the obsolete OAuth application credential cache and removing the legacy out-of-band redirect default from pending-login storage.
- Sync server deck deletion now moves bundle files aside before committing the metadata deletion, then removes them after commit. Leftover delete tombstones are reconciled on later SQLite-backed requests, so CGI crashes during deletion are less likely to leave metadata pointing at missing files.
- Sync servers now reserve deck UUID ownership separately from active deck metadata. Deleting a deck leaves its UUID reserved for the same owner, while deleting the owner account retires those UUIDs without keeping the owner identity, preventing deleted public/shared deck identities from being claimed by another account.
- Sync upload errors now distinguish active owner mismatches, deleted deck UUIDs reserved for another account, and retired deck UUIDs, with GUI guidance to make an independent copy when the local deck should get a fresh sync identity.
- Sync status now treats invalid saved sync tokens as a stale login and tells the user to log in again instead of showing raw HTTP 401 protocol errors.
- Sync Status and Remote Decks now clear the local saved sync login when the server reports that the bearer token is invalid. Remote Decks falls back to the unauthenticated public deck list instead of failing the whole action.
- Federated OAuth registration errors now identify which OAuth phase returned non-JSON and include a short sanitized response summary, instead of only reporting a raw JSON parser offset.
- The standalone sync server now locks its durable storage root and refuses to start a second standalone process using the same storage. CGI deployments remain concurrently runnable.
- GUI and standalone sync-server lock files now use no-follow, directory-descriptor-relative opens on Unix and verify lock descriptors before writing diagnostic lock contents.
- SQLite-backed sync storage now waits up to 15 seconds for a concurrent writer instead of 5 seconds, reducing transient busy failures during large CGI uploads.
- SQLite busy/locked sync storage contention is now reported as
503 Service UnavailablewithRetry-After, and the client explains that the server is temporarily busy and the user can try again later. - Sync upload intake now rejects configured-over-limit request bodies earlier, applies a read timeout in the standalone sync server, and has stronger tests for staged upload cleanup after quota failures and same-owner revision contention.
- The standalone sync web server now bounds concurrent request handling,
reports saturation as
503 Service UnavailablewithRetry-After, and applies a response write timeout as well as a request read timeout. - SQLite sync storage startup now reconciles known stale upload leftovers by
removing
.upload-*staged files and unreferenced server-generated revision bundle files while preserving unknown files and rejecting symlinked bundle paths. - CGI sync upload intake no longer rejects configured sync quota/body limits before consuming stdin, avoiding client-side transport send failures when the route can instead return a structured HTTP error after reading the request.
- CGI sync requests now write privacy-safe lifecycle diagnostics to server error logs, including request path, content length, body-read result, response status, and elapsed timings without logging tokens, cookies, client IPs, query strings, or request bodies.
- HTTPS sync upload and download transfers now allow up to ninety seconds total while keeping a thirty-second connection timeout, so larger audio decks on slow links are not aborted by the metadata-request timeout. Plain HTTP development transfers continue to use thirty-second socket read/write inactivity timeouts.
Tools -> Delete Old Backupshas moved out of Options and into the Tools menu. Its confirmation now reports how many files would be deleted before deletion begins.- Shared deck downloads remain available when owner-only sync status requests fail because the saved login is invalid or unavailable.
- Owner-only sync actions are disabled after remote authentication errors, so the UI no longer presents upload/download-history actions as available when the server has rejected the saved credentials.
- Sync status now treats a remote deck owned by a different account as an upload-blocking owner mismatch instead of presenting upload as available until the later preflight check fails.
- Sync-server 404 responses that are not Cosimo deck-not-found responses are now reported as connection/server errors instead of being confused with a missing remote deck.
- Sync upload conflict warnings now default to Cancel rather than the destructive force-upload action.
- Sync status no longer appears to move the last-seen remote revision backwards after logging out when the same deck also has an older anonymous shared-download state.
Exams And Quizzes
- Blank answers in manually graded, non-exact exams are now shown in review with the expected answer and counted incorrect. They no longer ask the user to decide whether an unanswered question should be accepted.
- Enter now dismisses exam and quiz summary dialogues.
Accessibility And UI Polish
- Restored the native ready-list label used for screen-reader naming after the rationalisation work.
- The transient study-summary focus experiment was backed out after manual testing showed no reliable accessibility benefit. The known timing issue after summary dismissal is now tracked as a ready-list rendering limitation rather than as a focus-restoration fix.
- The final item in exact-exam answer review no longer offers a redundant Next button; Summary is the only forward action.
Documentation, Maintenance, And Internals
- The review-flow and ready-screen code has been rationalised without intended behaviour changes. Ordinary study actions, ready-card mutation actions, deck properties actions, sync menu/runtime helpers, and several render-state decisions now live behind clearer module boundaries.
- The architecture and contributor documentation now describe the current module ownership, Fossil backout workflow, UI performance boundary for ready-list selection handlers, and policy guidance for preserving native accessibility semantics.
- Added design notes for future sync API work: content-addressed storage, manifest-based incremental transfer, deck/review-history reconciliation constraints, privacy-preserving server statistics, owner deck-only sync, operator moderation tooling, and consent/privacy handling before stable sync deployment.
- Added basic Anki
.apkgimport: simple prompt/response material is imported into a new Cosimo deck with fresh card IDs, supported MP3 prompt/response audio is copied into sidecar files, and unsupported notes, skipped audio references, cloze cards, Anki scheduling, and review-history limitations are reported explicitly. - Added
cosimo-anki-assess, a command-line helper that assesses.apkgimport coverage for individual packages or directories without writing Cosimo decks. - Refreshed sync, privacy, and audio documentation, including translated user guide sync sections, sync deployment examples, public-server RC compatibility guidance, and manual QA steps for the browser-based registration/login flow.
- Documented the RC-forward sync API compatibility policy: current
/api/v1endpoints should remain usable by RC-and-later clients on future sync servers unless security or comparable safety requirements force a change; storage layout and human-facing sync pages are not a stable machine API. - Removed unused/test-only helper code that produced Windows dead-code warnings.
0.1.10 beta 11 - 2026-05-26
This release adds deck sync, Opus audio, deployable sync-server packages, and several hardening and polish fixes. The major changes are grouped by area rather than by implementation order.
Deck Sync
- Added deck sync for portable Cosimo installations. Deck -> Sync can now show sync status, upload the current deck with study history, download an owned deck with study history, browse remote decks, and download public or unlisted shared decks as content-only snapshots.
- Added Mastodon-compatible login for sync. Cosimo can start the login flow, store the returned sync owner and Cosimo bearer token, log out locally, invalidate the current server token, invalidate all server tokens for the authenticated account, and use token-derived ownership for status, listing, upload, download, and deletion.
- New installations default to the public project sync server at
https://cosimo.isonomia.net/sync.cgi, so users can try sync without first entering a URL. Users can opt out by clearing the sync server URL in Options, which writessync_server_url=none. - Deck metadata can now set sync visibility: private, unlisted, or public. The metadata editor also has a Make Independent Copy action for downloaded or shared decks, assigning a new UUID, resetting visibility to private, keeping cards/audio/local study history, and clearing only the old UUID's local sync revision state.
- Remote Decks now uses a selectable list with details for the selected entry. It can show public decks with only a configured server URL, copy a selected deck UUID, find an unlisted shared deck from a UUID or shared URL, download public/unlisted decks, and delete decks owned by the logged-in account.
- Remote deck listings show cached summary data when available: title, deck file name, card count, audio file count, generated versus manual/untracked audio counts, audio formats, ownership, visibility, and last upload device. Opaque UUIDs, revisions, and bundle hashes are moved later in status/details text.
- Sync upload and download now show progress and run outside the GUI thread.
Downloads use exact bundle byte lengths where available, including through
CGI/proxy deployments that do not expose a normal
Content-Length. - Owner uploads store the study-history bundle, while public and unlisted downloads derive content-only bundles on demand. This avoids duplicating large audio files for every stored revision.
- Sync download now chooses the local restore target by deck UUID. Downloading a different remote deck cannot overwrite the currently open deck just because the remote bundle has the same file name, and unknown deck UUIDs are restored only to a non-overwriting local path.
- Sync Status now handles public and unlisted deck downloads correctly. A configured sync URL is enough to inspect shared remote deck state, and decks downloaded without owner study history show their remembered remote revision and downloaded bundle hash.
- Sync Status and download confirmations now use clearer wording for shared
decks. Owner-only study-history and last-device fields are shown as
unavailable when the current login cannot know them, shared downloads say
that the local review database is kept, and sync owners are displayed in the
usual Fediverse form such as
@user@example. - Upload now checks remote ownership before creating a bundle, handles decks without a sync UUID by reaching the UUID creation step, reports missing login and missing deck UUID separately, and gives clearer conflict/ownership messages. The upload success message now puts the actionable revision and target first, with the deck UUID at the end as a technical detail.
- Upload revision conflicts now offer explicit choices: force upload, download the remote copy with a full local backup first, or cancel.
- Sync servers now expose quota information. Deck -> Sync -> Sync Status shows configured server limits and, when authenticated, the current owner's deck count and stored bundle size. Quota parsing now reads real JSON object fields and rejects malformed numeric values.
- Sync device diagnostics now use only the optional user-provided local device name, avoiding a separate application ID that behaved badly for portable copied installations.
Sync Server And Deployment
- Added
cosimo-sync-server, a standalone HTTP sync server, andcosimo-sync-cgi, a CGI sync entry point. Both share the same request routing and durable storage code. - Added durable sync-server storage.
--storage-rootstores deck metadata in SQLite and bundle bytes below the storage root, preserving uploads across process restarts. The CGI entry point supports--storage-root, Fossil-style config scripts,COSIMO_SYNC_STORAGE_ROOT, or a default storage directory beside the executable. - Opening the sync server root URL in a browser now shows a small human-readable status page with a project wiki link instead of a misleading API not-found response.
- The standalone server is ready for simple reverse-proxy testing. It uses the same sync limit environment variables as the CGI entry point, has production-oriented help text, and can honour a configured client-IP header from loopback reverse proxies for OAuth rate limiting.
- The standalone server help and deployment guide now warn that omitting
--storage-rootuses volatile in-memory storage intended only for temporary development tests. - Hardened sync storage and HTTP handling for public deployment. Uploads enforce configured bundle-size, deck-file-size, per-owner deck-count, per-owner storage, and total-storage limits; uploaded bundle hashes are verified; supported bundle paths are checked; storage rejects traversal and unsafe symlink targets; old bundle revision files are pruned after successful replacement uploads; non-local clients require HTTPS; and the temporary development owner/auth endpoint has been removed.
- The first sync-server release is documented as a beta API. Upload revision conflicts now return structured JSON as well as HTTP 409 status, reducing the chance that wording changes break clients during the beta cycle.
- Hardened Mastodon-compatible OAuth. Login starts are rate-limited by client
and instance; unsafe OAuth instance targets and unsafe resolved addresses are
rejected; redirects are disabled; OAuth application credentials are reused
per instance; the client validates that the authorisation URL requests only
the required
read:accountsscope; temporary Fediverse access tokens are revoked after account verification; and stored Cosimo bearer sessions are persisted as SHA-256 verifier hashes rather than plaintext bearer tokens. - Public/shared deck metadata is now separated from owner metadata, so public listings exclude unlisted/private decks and owner-only fields are not exposed through shared inspection/listing.
- Added property-based tests for the sync server surface, including HTTP request parsing, response serialisation, CGI environment/header mapping, and malformed upload length handling.
- The user guide now has a gentler client-first deck-sync section, including everyday use, the public sync server URL and quota, deck visibility, and security properties. Sync deployment documentation is now a separate operator guide, with the preferred CGI layout keeping the real binary and sync storage outside the web-readable document root.
Audio
- Review audio now prefers
.opussidecar files and falls back to legacy.wavfiles. Audio generation now defaults to Ogg Opus, while Options andvoice --format wavstill allow WAV output. - Audio generation uses
audio-manifest.tsvas the safety boundary: manifest-tracked generated audio may be regenerated or converted, while existing untracked.opusand.wavfiles are preserved so user recordings are not replaced. - Added
Tools -> Remove Inoperative Audio from Deck, which deletes Cosimo-recognised sidecar audio files for removed card IDs and lower-priority formats hidden by a preferred playable file, then prunes matchingaudio-manifest.tsventries. - Clarified audio-generation summary wording for existing untracked audio files that are preserved without being overwritten.
- Clarified documentation around backup coverage for sidecar audio: automatic deck-content and review-database backups exclude audio, while full-deck bundle exports/backups include the sidecar directory.
- Added guiding tones during quiz answer review: a rising cue for correct answers and a falling cue for incorrect answers when guiding tones are enabled.
Backups And File Safety
- Full-deck restore safety backups now count as recent automatic full-deck backups for the same deck path, avoiding an unnecessary second large backup immediately after a restore.
Tools -> Delete Old Backupsnow prunes obsolete automatic full-deck backups as well as numbered deck-content backups, keeping the newest retained automatic bundle per original deck path, and its confirmation reports how many files would be deleted.- Documentation now gives a balanced recommended backup policy, warns about backup churn on USB sticks and other write-limited flash media, and explains which backup systems include sidecar audio and review databases.
Learning, Scheduling, And Analytics
- Added a review-database schema migration that recomputes derived
card_schedulesrows from stored review history with the current FSRS-6 scheduler. This eliminates mixed legacy/current schedule semantics after opening an older review database. The old scheduler calculation code has also been removed; the legacy scheduler marker remains only for reading historical stored rows. - Clarified learning-dashboard confidence mismatch diagnostics by showing total and recent answer-event counts, affected-card counts, and significant recent overconfidence/underconfidence counts. Ready-list high-confidence failure and low-confidence success filters now use the configured calibration recall rule.
- Normalised elapsed study-time formatting so dashboard and session summaries use the same duration formatter, including hours, days, weeks, and years rather than reporting long totals only in minutes.
- Fixed very small calibration drift wording so dashboard calibration no longer reports "under-confident by 0.0 percentage points" when rounding hides the actual difference.
- Clarified the learning-dashboard recall trend label so it explicitly says overall recall counts Hard, Good, and Easy answers.
User Interface And Polish
- Improved file-dialog defaults for portable use. Deck opening now starts from
the
decksdirectory beside the executable, and backup/export/restore dialogues start from thebackupsdirectory, creating those directories when needed. - Changed the ready-list View menu mnemonic for Estimated Recall to
E, making the sort criterion easier to discover from the keyboard. - Avoided creating empty bulk-reversal batches when no cards are eligible for bulk reversal.
- Reordered the Card menu so state-changing card actions are grouped more predictably: flagging, suspension, and deferral now sit together before bulk shown-card actions and reversal commands.
- Selecting Edit on a generated reverse card now opens the parent card for editing, making the existing one-card-data model discoverable from either study direction.
- The final item in exact-exam answer review no longer offers a redundant Next button; Summary is the only forward action.
- Documented the accepted Windows/NVDA issue where an empty ready-list control can be announced as "unknown"; the ready summary and filter counts remain the reliable accessible empty-state indicators.
Release Packaging
- The Windows portable package now includes
cosimo-sync-server.exeandcosimo-sync-cgi.exeunderserver. - The release tool can now build a Linux amd64 sync-server tarball for CGI or
reverse-proxy deployment. The Linux package strips staged
cosimo-sync-cgiandcosimo-sync-serverbinaries before creating the archive. - The release tool now writes SHA-256 checksum sidecars, uploads numbered release archives to static hosting by SFTP, supports private-key and verbose SFTP diagnostics, can update static "latest" aliases, and updates only the stable latest aliases when adding Fossil unversioned files. Historical binary archives are no longer stored as Fossil unversioned files.
0.1.9 beta 10 - 2026-05-18
- Improved backup and restore support. Cosimo can now write optional automatic
full-deck backups at most once per day per deck path, including the deck file,
same-stem sidecar directory, and a SQLite snapshot of the review database.
Compressed deck bundles can now be restored after Cosimo previews their card,
audio, and review-database contents.
Tools -> Wipe Backup Directorywas added as a destructive maintenance command with a strong warning before it deletes every file and folder in the backup directory. - Added study-direction choices to quiz and exam setup for decks with generated reverse cards, allowing standard cards only, reverse cards only, or both directions.
- Added optional quiz audio playback. Quiz settings can automatically play
prompt audio, response-choice audio as choices are selected, both, or neither;
quiz answer review also supports
Ctrl+Pfor prompt-plus-response playback. - Added explicit
Alt-Nhandling for theNextaction while reviewing exam and quiz answers. - Fixed study-session Flag/Unflag buttons so Space activates the button instead of also revealing the response, keeping focus after toggling and immediately presenting the updated opposite action.
- Fixed study-session Defer handling so deferring a prompt keeps the session moving forward and the normal study render focuses the next prompt after layout.
- Fixed quiz distractor selection for reversible cards, so answer choices stay on the answer side for the current study direction instead of mixing prompts and responses. Reverse-direction quiz choices now also exclude prompts from cards marked non-reversible.
- Added discoverable Card menu and prompt-list context-menu entries for the
existing selected-card details dialogue and
Alt+Entershortcut. - Added Card menu commands to flag, unflag, suspend, or unsuspend every card currently shown in the ready list. The commands respect both the text filter and the card-type filter, ask for confirmation, and leave cards already in the requested state unchanged.
- Added ready-list filters for recent high-confidence failures and low-confidence successes, making it easier to find cards where confidence and recall have recently disagreed.
- Added cautious qualitative learning-dashboard summary lines for workload shape, workload pressure, and recent recorded study-time consistency.
- Added review-database first-seen tracking for physical deck cards. The learning dashboard can now report deck-card intake against standard cards reaching review state, while making clear that this is first seen by the review database rather than a guaranteed card creation date.
- Deck files now persist a monotonic
next_card_idhigh-water mark. New cards get fresh IDs instead of reusing gaps left by removed cards, scrub preserves the high-water mark, and the documentation now recommends===for manually added cards so Cosimo assigns IDs safely. - Improved ready-list filtering performance, especially when typing in the text filter or switching to broad filter sets such as all cards or reverse cards.
- Improved startup recovery when Cosimo cannot open or create the startup deck or review database. Instead of leaving the user in a non-functional no-deck state, Cosimo now offers to open another deck or quit.
- Improved file-operation error messages for maintenance paths such as backup index updates, backup pruning, backup-directory wiping, temporary files, and durable report/deck writes, so failures include the relevant operation and path. Full-deck bundle backup/restore and audio-generation report setup now use the same path-specific reporting instead of silently ignoring unreadable backup indexes or surfacing bare OS errors.
- Reduced full-deck bundle backup and restore disk churn for decks with many sidecar audio files. Bundles now use faster deflate settings, GUI restore reuses the already-built bundle preview, and restore avoids per-file forced flushes for temporary staging and sidecar audio installation while keeping durable replacement for the deck file and review database.
- Clarified audio option labels: ordinary review playback is now labelled
Audio during study, guiding tones are labelledGuiding tones for automatic audio, and the edit-deck-metadata dialogue no longer exposes a redundantAudio generationstatic label that could be announced on open. - Simplified ordinary study-session summaries when every studied item is unique: they now show cards studied and time per card, while preserving the fuller question/unique-card breakdown for older repeated-item session data. The learning dashboard likewise hides the unique-card aggregate when it matches the answer count.
- Clarified learning-dashboard availability counts. The dashboard now reports available cards and, as a subset, cards already scheduled and due now using the same due-time boundary.
- Improved the main status bar during active sessions so it identifies scheduled study sessions, unscheduled study sessions, exams, or quizzes and reports current progress.
- Added an
Exam Finishedtransition notice with two long tones before exam grading, answer review, or summary when a non-timed-out exam ends with submitted answers. - Improved exam-question tab order so the prompt and answer fields are
adjacent; the Play/Stop Audio button now follows the answer field because it
also has the
Ctrl+Pshortcut. - Fixed a timed-exam timeout timer path that could try to close the question dialogue after it had already left modal state, causing a wxWidgets debug warning during exact-exam review on Windows.
- Improved warning presentation for screen reader users. Duplicate-prompt, automatic full-backup, and scheduled-card preview warnings are now included in the ready summary, study-session backup warnings open a focused warning dialogue, and study-session summary persistence warnings are included in the summary text.
- Made duplicate-prompt resolution flow clearer. The per-prompt dialogue now
has explicit
Skip PromptandCancel Resolutionbuttons, so the user can leave one duplicate prompt unchanged and continue, or stop the whole resolution process. - Fixed Card menu mnemonic clashes in Spanish and Galician, and strengthened menu tests so every localised item is checked in its actual menu.
- Reworked scheduling around a more faithful FSRS-6 implementation. New
in-memory schedules and new review-database writes now use deterministic
FSRS-6 with current default parameters, 1-minute and 10-minute learning
steps, a 10-minute relearning step, short-term same-day stability updates,
and deterministic interval fuzzing for review-state cards. Existing schedules
from older betas keep their due dates until the card is reviewed; at that
point Cosimo replays that card's stored review history under FSRS-6 before
applying the new answer.
Againno longer repeats a card at the end of the same session, and onlyAgainon a review-state card counts as a scheduled lapse. Estimated recall in the ready-list sort, card details, and learning dashboard now uses the stored scheduler algorithm, and stored FSRS memory state is clamped to reference bounds before updates. - Expanded scheduler and release-hardening tests, including deterministic fuzzing bounds, a longer mixed review history, an optional reference-crate scheduler check, timed exact exams, quiz direction/audio, metadata editing, dynamic menu state, backup/restore, Options controls, and the canonical languages.
- Added Windows executable metadata so packaged binaries expose application name, version, and manifest information more consistently.
- Updated the project wiki and contributor release workflow so public documentation links follow the current beta release tag rather than the trunk development snapshot.
- Expanded scheduler documentation to explain how recall ratings behave in new, learning, review, and relearning states.
- Quiz summaries now have a Save Report button, matching study sessions and
exams. Saved quiz report filenames add
-quiz.
0.1.8 beta 9 - 2026-05-13
- Fixed checkbox accessible names across the Options, Exam setup, Add card, and Edit deck metadata dialogues, so screen readers do not fall back to internal XRC control identifiers.
- Reorganised the main menu into File, Deck, Card, Study, Tools, View, and Help so file operations, deck-wide actions, individual-card actions, study-session starts, and maintenance/options are easier to find.
- Began the terminology cleanup for the next beta. The user guide, README, and visible UI/report strings now distinguish study sessions, questions, and stored attempts more consistently, while keeping established phrases such as review database, review history, scheduled review, review audio, and the FSRS review memory state where they remain precise.
- Added optional timed exams. The exam setup can enable a whole-minute time limit, the remaining time is shown in the status bar, short progress tones play at 10% boundaries, and timeout submits any typed answer before showing a guarded time-out notice. Exam summaries and saved exam reports now include the time limit and whether time expired.
- Redesigned the learning dashboard into shorter sections with a qualitative summary, recall distribution bands, median and weakest-card recall, conservative recent-trend statements, diagnostics, standard/reversed comparison when relevant, and recent recorded study activity. It still includes cumulative workload forecasts for the next 24 hours, 3 days, 7 days, and 30 days, plus scheduled lapse counts for active cards.
- Expanded the card details dialogue with availability, estimated recall now, recent recall, and lapse-summary diagnostics for the selected card.
- Added ready-list filters for problem cards and direction-asymmetry issues.
Problem cards are detected from recent failures, high
Againor lapse rate relative to the deck, and unusually high scheduling difficulty, rather than from raw lifetime lapse counts. - Added a separate option for automatic audio during exam grading and review,
with choices for question audio, answer audio, both, or no automatic audio.
Ctrl+Pin those dialogues plays prompt audio followed by response audio when available. - Added a deck metadata safeguard for manually maintained audio. Decks marked
with
audio_generation=disableddisableTools -> Generate Audio, makevoice.exerefuse generation, and still allow existing audio playback. - Added report-only quiz mode for multiple-choice recognition practice. Quiz sessions sample active cards at random, exclude suspended and deferred cards, avoid both directions of the same reversible card when possible, withhold correctness feedback until the end, and show a review and summary without writing review history or changing schedules.
- Added full compressed deck bundle export and backup commands. A bundle
contains the
.cosimo-deckfile and its same-stem sidecar directory, including audio and manifests, but deliberately excludes the review database. Manual export uses a save dialogue; full deck backup writes a timestamped zip intobackups/and records it indeck-bundle-index.txt. - Added a separate full-deck export with study history for personal migration and complete manual backups. It adds a SQLite snapshot of the review database to the archive instead of copying the open database file directly.
- Documented compressed deck bundle support as preliminary. Cosimo can write the bundles, but restoring them is currently a manual operation that can overwrite newer deck, sidecar, manifest, or review-database files.
0.1.7 beta 8 - 2026-05-10
Audio Tools
- Added a Windows
voicehelper binary that uses installed OneCore or SAPI voices to generate WAV prompt and response audio for a deck. Bare deck names resolve todecks/<name>.cosimo-deckbesidevoice.exe, matching Cosimo's portable path rules, while explicit deck paths are still accepted. The tool supports shared or separate prompt/response voice and engine selection, side selection, dry-run mode, overwrite control, and voice listing. The release package builder now includesvoice.exebesidecosimo.exe. - Deck metadata now includes optional prompt and response voice fields, plus
per-direction prompt and response voice engine fields. The
voicehelper usesprompt_voice,response_voice,prompt_voice_engine, andresponse_voice_engineas defaults when command-line options are not supplied.File -> Edit Deck Metadatanow shows editable voice and engine combo boxes populated fromvoice.exewhen the helper is available, while still allowing manual text entry. The editor can show OneCore and SAPI voices together, saves the concrete engine for a listed voice, no longer exposes OneCore registry IDs in voice labels, and requires a concrete engine when a voice filter is typed manually. voicenow maintains anaudio-manifest.tsvfile in the deck's audio sidecar directory so it can regenerate prompt or response WAV files whose card text, selected voice, or selected voice engine changed while skipping unchanged generated audio. If no manifest exists yet, existing selected WAV files are now regenerated once to seed a truthful manifest; individual untracked files are added to an existing manifest without being overwritten, so later card text, voice, or engine changes can be detected.- Added
File -> Generate Audioto startvoice.exefor the current deck from the GUI. Cosimo shows a progress dialogue and writes helper output to a timestamped report file underreports/. The completion message now reports generated-card, new-file, regenerated-file, overwritten-file, manifest-tracking, and skipped-file counts. GUI audio generation is unavailable until the deck has prompt voice, response voice, prompt voice engine, and response voice engine metadata, so a deck is not accidentally generated with an unsuitable system default voice. - The audio generation progress dialogue now exposes an ordinary progress bar for assistive technology without repeatedly changing status text during generation.
- Documentation now explicitly warns that sidecar audio is not included in automatic deck-content or review-database backups, and that audio generation can overwrite matching user recordings once a file is tracked by the manifest.
- The ready card list now has a
Play/Stop Audiobutton andCtrl+Psupport for the selected card. On Windows this uses cancellable MCI playback with status polling, so prompt audio can continue into response audio based on actual playback completion andCtrl+Pcan stop the current file. - Automatic review audio has an optional guiding-tones setting. It adds an orientation tone before prompt audio, two short tones before response audio, and a three-tone arpeggio when the review summary is shown.
- Saving complete voice metadata in
File -> Edit Deck Metadatanow refreshes theFile -> Generate Audiomenu item immediately. - Audio-generation failures now surface the helper's useful error detail in the GUI, such as a missing OneCore or SAPI voice, while still writing the full helper output to the report file.
Deck Integrity
- Normal add, batch add, and edit actions now reject duplicate prompts, because prompts should identify one card only.
- The normal Add Card dialogue now has an off-by-default non-reversible checkbox, allowing cards that should never be reversed to be marked at creation time. Batch add remains unchanged.
- Decks edited by hand can still open with duplicate prompts, but Cosimo warns
about the problem and
Cards -> Resolve Duplicate Promptslets the user keep one response for each duplicated prompt while removing the other duplicate cards from the deck. - Duplicate responses are now documented and checked as valid unless more than one card in the same duplicated-response set has an active generated reverse card, which would make the generated reverse prompts ambiguous.
0.1.6 beta 7 - 2026-05-07
Review Flow
- Added a report-only
Start Exammode. Exam mode samples a configurable number or percentage of active cards, randomises the selected questions, collects typed answers without revealing feedback during the pass, counts exact answers as correct automatically, and asks the user to grade non-exact answers at the end. The setup dialogue now also has anExactoption that counts non-exact answers incorrect without manual grading and shows them for answer review before the summary. Exam summaries include correct-answer percentage and time per question, and can now be saved to thereportsdirectory like normal pass summaries. Exam results do not yet write review history or scheduling changes.
Learning Dashboard
- The learning dashboard now treats confidence ratings as recall target
intervals rather than point forecasts. The target ranges are 0-5% for
Don't know, 5-32% forProbably don't know, 68-95% forProbably know, and 95-100% forCertainly know; the dashboard now reports whether observed recall is within target, under-confident, or over-confident. File -> Optionsnow lets the user choose and persist either the lenient calibration recall rule, where Hard, Good, and Easy count as recalled, or the strict rule, where only Good and Easy count as recalled.
Deck Files and Metadata
- Deck files now migrate to format version 2 when opened. The v2 format stores deck metadata in a header and stores per-card non-reversible markers in the deck file, so that knowledge about whether a card should be reversible can travel with the deck. Active generated reverse cards remain study data in the review database.
File -> Deck Propertiesnow shows deck version, title, author, description, and URL.File -> Edit Deck Metadatalets those metadata fields be edited while preserving the deck's cards.- Legacy decks with stable card ids and v2 decks with missing card ids are accepted and normalised instead of being rejected, making manual deck edits less fragile.
Review Audio
- Review passes can now play optional WAV prompt and response audio from the
deck's same-stem sidecar directory, such as
Indonesian/1.prompt.wavandIndonesian/1.response.wav. File -> Options -> Audio during reviewscan set review audio to off, manual, or automatic. Manual mode exposes thePlay/Stop Audiobutton andCtrl+Pwhen the current prompt or response has audio; automatic mode plays matching prompt and response audio as cards are shown.- Exam mode now uses the same audio setting for question prompt audio while the learner is answering.
- Generated reverse cards reuse the parent card's prompt and response audio with the sides swapped. Audio is stopped when leaving the current card, finishing a pass, or closing the window.
Reliability and Accessibility
- Confirmation prompts now use the platform-native Yes/No dialogue again. The destructive menu actions still run through Cosimo's deferred command path, which was the actual guard against repeated prompts, while native dialogues give screen readers better access to the prompt text.
File -> Scrub DatabaseandFile -> Reclaim Database Spaceno longer move focus to the ready-card list after a successful confirmation. They now update the ready screen while restoring the ready-screen control that had focus before the confirmation.- Creating a new deck now refuses to overwrite an existing file.
0.1.5 beta 6 - 2026-05-05
Review Flow
Review Flaggedon the ready screen andCards -> Review Flagged Cardsnow start an unscheduled, randomised pass through flagged cards. The pass includes flagged cards whether or not they are scheduled, excludes suspended and deferred cards, and leaves flags in place for manual follow-up.- Cards can now be deferred until tomorrow during the prompt phase of a review
pass, before the answer is revealed. The action removes the current card from
the current pass and leaves its stored schedule otherwise unchanged.
Ctrl+Dnow toggles deferral from the ready list and defers the current card during the prompt phase of review. If all cards in a pass are deferred before any answer is recorded, Cosimo now shows a notice instead of silently returning to the ready screen. - Generated reverse-card actions now keep the ready-list selection on the parent card when a reverse card is removed. Reversal menu and context-menu choices also hide impossible actions: non-reversible cards offer allowing reversal again instead of Make Reversible, and generated reverse cards no longer expose the parent-card non-reversible action.
Cards -> Make Possible Cards Reversibleis now disabled when no cards are eligible, and the command no longer opens a zero-card confirmation if reached from stale menu state.- Confirmation prompts now use Cosimo's own modal dialog instead of native
wxMessageDialogYes/No buttons, avoiding repeated prompts when No is pressed on affected Windows builds.
Learning Dashboard and Reports
File -> Learning Dashboardnow includes review activity: stored answers, days with answers, average answers per active day, recorded passes, answers in recorded passes, unique cards reviewed in recorded passes, total review time, average answers per recorded pass, average time per recorded pass, and average time per answer in recorded passes.- Learning dashboard review activity now uses clearer labels such as stored answers, days with answers, and answers in recorded passes. When old review events exist without pass timing, the dashboard now shows an older-answers line; that line is hidden for decks where the value is zero.
- The learning dashboard now has a
Save Reportbutton that writes the current dashboard text toreports/, named from the deck file stem and generation time. Reports include the full deck path and avoid overwriting existing reports.
Interface
- The Windows tray context menu now uses wxdragon's automatic taskbar menu path instead of opening a manual popup from the right-click callback, reducing the amount of tray-object lifetime work happening inside tray mouse events. Tray restore and quit handling should now avoid the wxWidgets debug alerts and orphaned process cases seen with the previous manual tray popup handling.
- The review screen now uses larger fonts for core review controls, larger button hit targets, and compact rating grids while keeping native colours so operating-system light, dark, and high-contrast themes stay in control. The report-style statistics, card details, and learning dashboard dialogues also use larger text and buttons.
- The Help menu now includes project wiki and bug-report items that open the Cosimo wiki and Fossil new-ticket page in the default browser.
- The ready-screen top status line now stays short instead of showing full deck and database paths, avoiding truncation in narrower windows while the summary still shows the review database path.
- The ready-screen summary now preserves its text position during automatic refreshes, avoiding cursor jumps while reading the summary text.
Database Maintenance
File -> Reclaim Database Spacenow runs SQLiteVACUUMon the review database without deleting dormant data or overwriting the retained review-database backup.- Expired deferrals and inactive card-state rows are now cleaned when opening a deck, before starting a review pass, and during scrub or reclaim maintenance, so stale state rows do not keep affecting the ready list.
Error Handling
- Deck, review database, and config write errors now include the affected path and brief recovery guidance. Startup failures now state explicitly when no deck is open and show both the deck and review database paths involved.
- Report-save, review-recording, review-pass-summary, and review-database backup errors now include the affected paths and state whether the requested operation was saved, skipped, or left partially recorded.
Documentation and Packaging
- The user guide and project wiki now document portable installation and upgrade: expand the release zip into the folder where Cosimo should run, and expand a newer release over the existing folder to upgrade.
- The project wiki now includes Spanish and Galician entry pages, Fossil clone guidance, and instructions for anonymous users to file tickets.
- The project wiki now includes a deck page for example and community decks, with CC0 attachments for the default example deck and a basic Indonesian vocabulary deck.
- Release packages now include
CHANGELOG.mdat the application root and no longer includedecks/or a default deck, so upgrading by extraction does not overwrite user deck data.
0.1.4 beta 5 - 2026-05-04
Ready Screen and Deck Navigation
- Cards can now be marked non-reversible. This removes any active generated reverse card for the selected parent and prevents future bulk reversal from adding it again until reversal is allowed again. Non-reversible cards are now marked in the ready list, shown in card details, and available through the ready-list filter combo box.
- Card details now show card characteristics such as suspended, flagged, reverse, has reverse, and non-reversible on one state line. Generated reverse cards now show the parent card ID. Future and overdue scheduled review times are shown as a complete relative duration followed by the exact UTC timestamp.
File -> Scrub Review Databasecan now delete dormant review database rows for removed cards and inactive generated reverse cards, with confirmation warnings that reflect the review-database backup policy. It also vacuums the SQLite database afterward so freed pages can be reclaimed.- Ready-list selection now tracks the selected card by stable card identity across sorting, filtering, editing, and reverse-card changes. Adding a card selects the newly added card, and deleting a card selects the next visible card in the current list order.
- The View menu now uses checkable menu items for the active ready-list sort criterion and direction. The ready list can also sort by prompt text, response text, or estimated recall, with lower estimated recall first in ascending order.
- Cards can now be flagged with Ctrl+F on the ready list or during review, from the Cards menu, from the ready-list context menu, or with review-screen buttons after the rating choices. Flagged cards are marked in the ready list and can be shown with the flagged card filter without changing scheduling.
- Cards can now be deferred from the Cards menu or ready-list context menu until tomorrow, then made available again manually or automatically when the deferral expires. Deferred cards are marked in the ready list, can be shown with the deferred-card filter, and are excluded from scheduled and forced passes while deferred without changing their stored schedule.
Review Flow
File -> Optionsnow offers a four-value sound notification policy: always, when Cosimo is visible, when Cosimo is in the system tray, or never. Timed ready-screen refreshes can play distinct sounds when reviews become available or when more reviews become available; manual refreshes, user-triggered changes, and active review passes remain silent.File -> Optionscan enable minimise-to-system-tray behaviour. When enabled, the normal window minimise action hides Cosimo in the system tray; activating the tray icon restores the window, and the tray context menu offers Restore and Quit. The Windows tray restore and quit paths were hardened after manual testing with wxWidgets debug checks enabled.- End-of-pass statistics can now be saved directly from the statistics dialogue
to a text report under
reports/, named from the deck file stem and pass finish time. Reports include the full deck path and avoid overwriting existing reports. - The statistics dialogue no longer contains an invalid XRC sizer flag that
could show an
unknown sizer flag "0"error after a review pass. - Review databases now store non-reversible card markers and migrate schema version 6 databases to schema version 7.
- Review databases now store sparse card state markers for flags and suspensions in one table. Schema version 7 databases migrate to schema version 8 by moving existing suspension rows into that table.
- Review databases now allow deferred card state rows and migrate schema version 8 databases to schema version 9.
0.1.3 beta 4 - 2026-05-02
Ready Screen and Deck Navigation
- The ready-screen summary now shows the due-card count in parentheses when the scheduled count includes extra minimum-fill cards.
File -> Learning Dashboardnow opens a deck-wide learning summary with card-state counts, estimated recall, confidence calibration, and learning pace figures. When generated reverse cards exist, it shows standard cards, reversed cards, and total cards separately.- Learning dashboard due counts are now labelled as available now and scheduled and overdue to clarify the difference between cards that can be reviewed immediately and scheduled cards that are already late.
- Learning dashboard recall estimates now use sub-day elapsed time and the actual short learning/relearning interval, preventing recently failed cards from appearing as perfectly remembered until a whole day has passed.
- Cards can now be marked reversible from the Cards menu or with Ctrl+R on the ready list. Generated reverse cards have separate scheduling and review history, are blocked when duplicate responses would make them ambiguous, and can be shown with the reverse-card filter.
Cards -> Make Possible Cards Reversiblecan mark every eligible card reversible after confirmation, excluding cards already reversible and cards whose responses are duplicated.- Bulk reversible-card creation now backs up the review database first when review database backups are enabled, then writes the generated reverse-card flags in one database transaction, avoiding a long apparent freeze on larger decks. Its confirmation warns that the retained review-database backup will be overwritten.
Cards -> Undo Last Bulk Reversalcan remove only the reverse cards created by the latest bulk reversal batch, leaving manual reversals and older batches active.- The ready-list filter combo box can now show cards with duplicated prompts or duplicated responses.
- Delete confirmations now explain the data consequences for generated reverse cards and for parent cards that have generated reverse cards.
View -> Last Reviewedcan sort the ready list by most recently reviewed first, leaving new cards at the bottom.
Review Flow
- Scheduled due cards within about one hour of each other are now randomised within that near-tie group to reduce thematic clumping while preserving broader overdue priority.
- Due learning and relearning cards are now reviewed before ordinary due review cards.
- Cards marked
Againnow use a 10-minute learning or relearning interval, while still repeating once at the end of the current pass. - Cards repeated at the end of a pass after an
Againrating are now randomised instead of following the order in which they failed. - End-of-pass statistics now separate unique cards from total answered questions and include total time, time per question, and time per unique card.
- Review databases now store pass-level records and link them to the existing per-card review events, including initial and final question counts, providing a normalised base for later analytics.
- Review database schedules now store the actual interval in seconds alongside the existing whole-day interval, preparing learning and relearning cards for sub-day scheduling steps.
- Review databases now store reversible-card parent keys in
card_reversalsand migrate schema version 4 databases to schema version 5. - Review databases now store bulk reverse-card batch metadata and migrate schema version 5 databases to schema version 6, allowing the latest bulk reversal to be undone without removing manual reversals.
Data Integrity
- Opening a deck now performs higher-level review-database consistency checks after SQLite integrity and schema checks, including stored rating/schedule values, review-pass links, and active reversible-card ambiguity.
Code Quality
RecallFeedbackvariants now use the standardAgain,Hard,Good, andEasynames while keeping the same stored numeric values.- Localisation labels, plural nouns, and formatted message templates now use
gettext
.pocatalogues compiled into Rust at build time, preparing the project for additional languages without adding a runtime gettext dependency.
Documentation and Packaging
- A Galician user guide was added, with a generated HTML version.
0.1.2 beta 3 - 2026-04-29
Ready Screen and Deck Navigation
Cards -> Add Card Batchadds a fast repeated-entry dialogue. Ctrl+Enter adds from either field, and Tab from the response field adds when both fields contain text.- The main window now has a status bar summarising total cards, cards due now, and the next review using speech-friendly rounded durations.
- The ready-list filter and sort mode are now persisted in
cosimo.ini. - The ready screen has a single-line text filter, reachable with Alt+L, that narrows the prompt list by matching prompt or response text.
- Cards can be suspended from review. Suspended cards are marked in the ready list, excluded from scheduled and forced passes, ignored by the status bar review timing, and can be toggled from the Cards menu, the ready-list context menu, or Ctrl+S while the ready list has focus.
- The ready-list context menu now includes Edit, Remove, and Suspend/Unsuspend for the selected card.
- File-menu Quit no longer claims redundant Ctrl-key accelerators, leaving Ctrl+S available for ready-list suspension.
- Recent decks now omit the currently open deck, and a single remaining recent deck is shown directly in the File menu instead of in a one-item submenu.
0.1.1 beta 2 - 2026-04-27
This release summarises changes since the first beta, whose last 0.1.0
checkout was f6df45f10b.
Review Flow
- Cards rated
Againare repeated once at the end of the current pass. - Scheduled overdue cards are reviewed before new cards, ordered by how overdue they are. Equal due-time ties and new cards are randomised to avoid deck-order cueing.
- The prompt can be revealed directly with Space or the
Reveal Responsebutton. This records the pre-response confidence asNot answered. - The current card can be edited after its response is revealed, using
eor theEdit Cardbutton, and review returns to the post-response rating step. - Focus after editing a revealed card is restored to the previous post-response control.
- The statistics dialogue accepts Enter on its summary text and returns focus to the prompt list after Continue.
Ready Screen and Deck Navigation
File -> Recent Deckslists up to eight recently opened decks.- Unavailable recent-deck slots are hidden instead of shown as disabled placeholder menu items.
- The ready screen can filter cards by all, due, new, and not-due views, with item counts in the filter choices.
View -> Deck OrderandView -> Next Scheduled Reviewcontrol ready-list sorting.- Pressing Alt+Enter on a selected ready-list card opens a details dialogue showing prompt, response, ID, review count, last review, scheduling state, next scheduled review, and review history.
- The ready card list has a user-facing accessibility name, and the Cards menu edit item changes to Edit Current Card after a review card is revealed.
- Reopening or continuing to the ready screen preserves useful ready-list selection and focus behaviour.
Backups, Settings, and Data Integrity
- Portable settings now live in
cosimo.ini. Oldercosimo-settings.txtandcosimo-last-open-deck.txtfiles are migrated and removed automatically. - Automatic deck backups are stored in one app-level
backupsdirectory with anindex.txtthat records the original deck path for each backup. - Deck backup policy is configurable as full history, last-only, or none.
File -> Options -> Delete Old Backupscan prune obsolete deck backups after confirmation while refusing to overwrite unindexed files.- Review database backups can be enabled or disabled. When enabled, Cosimo refreshes one retained review-database backup when a review pass starts.
- Review databases are checked with SQLite
quick_checkwhen opened. - Review database schema versions are validated, and the existing
prompt_guessconstraint is migrated to support direct reveal. - Backup, migration, and database-integrity failures now block risky deck writes or are surfaced in status text instead of silently proceeding.
- Durable file replacement now syncs temporary files and best-effort syncs containing directories; Windows replacements use write-through semantics.
Accessibility and Localisation
- Spanish localisation was revised for accents, project terminology, menus, and keyboard mnemonics.
- Runtime language selection defaults to English for unknown locales and uses Spanish when the system locale is Spanish.
- Menu items and top-level menu names are localised at runtime.
- Shortcut clashes in Spanish were corrected.
- The delete-card button no longer exposes a misleading shortcut announcement.
- The Windows build uses the GUI subsystem, so the packaged executable should not open a console window.
Help -> Aboutshows authorship, support contact, version, and beta status.Help -> User Guideopens the generated HTML user guide.
Documentation and Packaging
- The project uses GPLv3.
- Cargo package metadata and include rules were added for crate publishing.
- The default package excludes old probe examples and helper scripts.
- User guides now exist in English and Spanish, with generated HTML versions.
- Troubleshooting guides now exist in English and Spanish.
- Backup, restore, accessibility acceptance, rating storage, deck format, and release packaging guidance were expanded.
- Documentation links were converted to relative links.
Tests and Internal Quality
- Regression coverage was expanded around localisation, keyboard behaviour, ready-list focus, statistics Continue, backups, migration failure, corrupt databases, filtering, sorting, card details, direct reveal, and revealed-card editing.
- Application configuration, file/backup operations, ready-list logic, review
session state, options dialogue, review dialogues, and generic dialogue helpers
were split out of
src/main.rs. - Review-session state now uses typed ready/running states and queue invariants.
cargo clippy --all-targetsis clean as of the beta-2 preparation pass.
Known Issue
- Some screen reader and wxWidgets combinations announce the selected ready-list item twice when tabbing into the prompt list. Arrow-key navigation, selection, editing, removal, details, and review startup remain functional.
0.1.0 beta 1
- First beta release.