ExamAdvantage — Changelog

Certification Tool and Die, Ltd. · ISC2 and ISACA certification courses

Release 26286_01 — October 13, 2026

Course DBs · Course content update · All 9 ISC2 exams rebuilt · No program changes

Topic Structure Matches the Examulator Practice Exams

Every study page in the nine ISC2 courses now carries the same number and the same title as the matching objective in the Examulator practice exams, at every level of the outline. The two products share one topic tree of 83,252 topics, so a practice-exam result points straight at the study page that covers it. This is the final stage of Examulator <-> Exam Advantage alignment.

New Study Pages and Practice Questions

Quality Review of the New Pages

Current Standards and House Style

Changes by Course

Upgrade Actions

No action is needed beyond installing the updated course downloads.


Release 26282_01 — October 9, 2026

Course DBs · Course content update · All 9 ISC2 exams rebuilt · No program changes

Practice Question Quality

Answer-Key Verification

Answer keys that did not match their explanations were corrected across all nine courses. A blind check, in which a reviewer answered questions without seeing the key, disputed 11 answers; each was researched and corrected, including EAR mass-market encryption (License Exception ENC), NIST SP 800-161r1 appendix references and Golden Ticket detection signals. A second blind check of 3,000 questions with new wrong options agreed with the key in 98% of cases. The 20 questions it disputed were corrected: one answer key changed (tokenization is now the credited PCI DSS v4.0.1 answer for a legacy system that cannot encrypt card data), and the rest had a second defensible option, a broken stem or a missing option repaired. A further blind check of 200 of the lengthened CSSLP questions found no answer-key problems.

Current Standards and the ISC2 Name

Study Content and Page Structure

Figures

In the News Callouts

Glossary

Readability and House Style

Duplicate Content in Five Exams (Resolved)

The duplicate content reported in release 26274_01 has been remediated. Repeated template sentences were replaced with page-specific content, and the duplicate-content check added in that release now reports no findings in any of the nine exams.

Changes by Course

Upgrade Actions

No action is needed beyond installing the updated course downloads.

Release 26274_01 — October 1, 2026

Course DBs · Course content update · All 9 (ISC)² exams rebuilt · No program changes

The largest content release since initial delivery: every (ISC)² course's topic structure was realigned to Examulator's canonical hierarchy, thousands of new study pages were written for topics that previously had none, every page title was brought to a consistent style, and every question's credited answer was verified against its own explanation.

Examulator Topic Alignment

ExamAdvantage's topic tree now mirrors Examulator's first-tier grouping under every (ISC)² exam objective, with Examulator's own group letters and titles.

New Study Content

Title and Readability Cleanup

Answer-Key Quality Verification

Known Issue — Duplicate Content in Five Exams (Remediation Planned)

A user filed a detailed report noting that a large proportion of ISSAP topics appeared to be the same paragraphs copy-pasted with only the topic name changed. The report was accurate. Investigation confirmed the defect and extended it to four additional exams:

Exam & Leaves affected

ISSEP: 2,947

CGRC: 2,908

ISSAP: 1,286

ISSMP: 1,206

CSSLP: 464

The affected topics share nearly identical prose, deep-dive explanations, worked examples, and in many cases even question stems — differing only in the substitution of the topic name. The issue is concentrated in specific sections; ISSAP Domains 1, 2, and 4 are most heavily affected while Domain 3 is clean, consistent with the defect originating in an earlier generation pass that affected some but not all sessions.

A leaf-by-leaf remediation manifest covering all 8,811 affected topics was executed, with each entry specifying exactly which fields need to be rewritten rather than blanket-replacing the whole page. The four remaining exams (CC, SSCP, CCSP, CISSP) were not affected by this report

The audit tooling has also been updated with a permanent duplicate-content check so this class of defect is caught automatically on all future content builds.

Upgrade Actions

None required. Existing databases, glossary, and saved progress are unaffected by this update; installing the new course database replaces topic content and the question bank only.

Release 26272_01 — September 29, 2026

Feature release · Program · Blazor Web, MAUI, and Legacy

One feature addition: release notes are now shown before a course update installs, so a learner can see what they're actually getting instead of updating blind.

Release Notes in the Update Dialog

The confirmation dialog that appears when a course update is available now shows the real release notes for that update, pulled live from the changelog, before the Update button can be used.

Upgrade Actions

None required. Existing databases, glossary, and saved progress are unaffected. This only changes the confirmation step shown before a course update installs.


Release 26258_01 — September 15, 2026

Feature release · Program · Blazor Web, MAUI, and Legacy

Three feature additions: download integrity verification for course installs, a new continuing-education-credit report, and a full color-theme system. All three ship across every target except where noted.

SHA-256 Download Verification (Blazor / MAUI)

Course downloads from the versions manifest are now verified against a published SHA-256 hash before installation, catching corruption in transit before a damaged database is ever extracted.

CPE Report — Continuing Education Credit (Blazor / MAUI / Legacy)

A new report lets learners generate a certificate of study time recorded by the application, for claiming continuing professional education credit.

Color Themes

The accessibility panel's Light/Dark toggle is replaced with a dropdown offering fourteen themes: the original Light and Dark, plus twelve new options — Midnight, Slate, Warm Dark, Nord Arctic, Solarized Dark, Solarized Yellow, Amethyst, Catppuccin Mocha, Green Terminal, Sepia, Paper, and High Contrast.

Upgrade Actions

None required. Existing databases, glossary, and saved progress are unaffected. Topics studied before this release show no CPE time for that period — study-time tracking begins from this release forward.


Release 26243_01 — August 31, 2026

Bug-fix release · Program only · No course content changed

Post-release fixes for five defects discovered in 26239_01 during initial user testing. Two prevented Blazor Web and MAUI from building; three prevented the Legacy target from running. All fixes are code-only; existing databases, glossary, and saved progress are unaffected.

Blazor and MAUI — ExamAdvantage.Shared Failed to Compile

Sprint C's ReviewAttempt class in ProgressModels.cs was missing its closing brace, causing the file to end one brace short. The compiler reported CS1513 (right-brace expected) at end-of-file, and ExamAdvantage.Shared.dll failed to build. Both dependent projects (Web and MAUI) then reported downstream CS0006 (metadata file not found) because the reference assembly was never produced.

Fix: added the missing brace between ReviewAttempt's SelfRating property and the start of the following ProgressState class.

Blazor — Heatmap Cell Nullable-Reference Warning

The Sprint D weakness-heatmap rendering used Dictionary GetValueOrDefault on a HeatmapCell value and directly dereferenced the returned cell's Total property. Because HeatmapCell is a record (reference type), GetValueOrDefault can return null for absent keys, and nullable-reference-types analysis flagged CS8602 (dereference of a possibly null reference) on the subsequent property access.

Fix: added a null-coalescing fallback to a zero-count cell. Semantically identical to the existing empty branch, which already special-cased Total equals zero — the change satisfies the analyzer without altering behaviour.

Legacy — Blank Page from JavaScript Syntax Error

The global error-overlay handler in the Legacy JavaScript contained two lines with unescaped single quotes inside HTML onclick attribute values. The outer JavaScript string was single-quoted, and the inner unescaped quotes closed the outer string prematurely. This produced a syntax error at parse time, which prevented the entire script block from executing — the browser rendered a completely blank page.

Fix: backslash-escaped every embedded single quote in the two affected lines. The full script (977K characters) now passes Node's syntax checker.

Legacy — Private Helper Called from Outside Its Scope

An HTML-escape helper _esc was defined inside an Immediately-Invoked Function Expression (IIFE) that owned the error-overlay code. Sprint C and Sprint D additions later called _esc from 21 sites in the main script scope, where the private helper was not visible. On startup the first such call (rendering the version footer) threw ReferenceError, which the generic error handler caught and misreported to the user as "Could not connect to server."

Fix: replaced all 21 out-of-scope _esc calls with the public escHtml function (semantically identical HTML escaping). The private _esc inside the IIFE was left in place — its five callers all live inside the same IIFE.

A concurrent session had previously patched a single call site (the version footer) by pointing it at esc — this got the app past the immediate startup crash but left the other 20 sites as latent bugs. This release fixes all 21.

Legacy — Results Screen Crash from Variable Name Mismatch

The Sprint D calibration-trend and weakness-heatmap wiring in Legacy's renderResults function referenced a local variable named "assessed", which does not exist in the Legacy scope. The name was copy-pasted from the Blazor implementation, where the equivalent local holds the same value under a different name. When a learner opened the Results screen, JavaScript threw ReferenceError at line 3331 and the Results view failed to render.

Fix: replaced both references with the correct Legacy-scope variable name (leafsDone). The function signatures use a neutral parameter name (assessedNums) so the function definitions did not change.

Root-Cause Analysis

Three of the five bugs share the same shape: Legacy-only regressions from Sprint C and Sprint D work where patterns were lifted from the Blazor codebase without verifying they'd resolve in the Legacy scope. A follow-up scan of the Blazor codebase for equivalent risk classes (captive dependency-injection scopes, missing @using directives, unchecked GetValueOrDefault returns on reference-type values, fire-and-forget async calls, blocking .Result / .Wait patterns) found no additional bugs of the same shape.

Process change adopted: future cross-target work will run the Legacy script through Node's syntax checker and open the running app in a browser before claiming a sprint or feature is complete for that target.

MAUI — Android Launcher Icon Restored

Users were reporting the app showed a generic Android launcher icon on their home screens instead of the ExamAdvantage brand mark. Investigation found the icon source file (Resources/AppIcon/logo.png) still contained the full brand image including the "EXAM ADVANTAGE" banner text — the same defect the 26232_02 release notes said was fixed but which had either never been applied to the source asset or had been reverted afterwards. When Android scales an icon with fine text to launcher densities (48–96 px), the text degrades to unreadable pixel smearing and some launchers substitute their default icon rather than display the mangled result.

Fix: rebuilt the adaptive-icon foreground from the current source by cropping to just the emblem (cap + shield + lock + key + tassel) and centring it at ~68% of the 432×432 canvas so it fits within Android's inner safe-zone circle. Transparent margins around the emblem allow the launcher to composite it against the brand background colour (#0e6f63) declared by the MauiIcon item.

Note that existing installed users will only see the corrected icon after their device updates to this release from Google Play, and some launchers cache icons — users may need to reboot the device (or clear their launcher's data) if the icon does not refresh after the app update.

Upgrade Actions

None. Existing databases, glossary, and saved progress state are unaffected. Rebuilding course DBs is not required.


Release 26239_01 — August 27, 2026

Course DBs · Course content update · CISM + CRISC initial delivery · All 9 (ISC)² exams rebuilt · No program changes

CISM and CRISC — Initial Course Delivery

The first two ISACA course databases are now available for download:

Both databases include the full-text search index, ISACA-specific glossary definitions via certBodyDefs, and all editorial standards described below. A deep audit was run against both corpora before release; the items below document what was found and corrected.

CISM Content Fixes

A deep audit surfaced residual editorial issues not caught by the pre-delivery audit pass:

CRISC Content Fixes

Glossary Integrity Pass

All nine (ISC)² course databases rebuilt following a multi-round glossary cleanup:

ISACA Glossary Expansion

The shared glossary was expanded and restructured to serve both (ISC)² and ISACA exam databases from a single source.

Final glossary: 3,058 entries, zero exact-term duplicates, 8 cert-body overrides, 21 legitimate acronym shares. Validated by both validate_gloss_overrides.py and validate_gloss_metadata.py check at exit 0.

Full-Text Search Index

The course database schema now includes a content_search FTS5 virtual table populated from every topic's title and block content. Powers Jump Palette keyword search and future in-course search features.

⚠ Course database file sizes approximately doubled in this release due to the FTS5 index.

Glossary Metadata Schema

glossary_master.json now carries a metadata block with a SHA-256 content checksum, entry count, content version, and timestamp. migrate.py verifies the checksum on load and reports a warning on mismatch (non-fatal). New validate_gloss_metadata.py tool provides check and bump subcommands.

Bug Fix — migrate.py Glossary Filter

A defect in migrate.py v3 caused all glossary entries to be silently excluded when the glossary uses the new dict format and entries carry no per-exam filter field. Patched: entries with no exams field are now treated as universal and included in all exam databases.

Glossary Remediation — Additional Content Fixes

A concurrent session's audit and remediation pass targeted specific data-quality patterns beyond the general ALL-CAPS consolidation described above, folded into the same 3,079 → 3,058 net reduction: term/definition merges (7 entries), UPS spelling correction, ISO three-way disambiguation, BCP retained as two distinct entries, corrupted CIS Controls entries reconstructed (52), cross-reference normalization (16), acronym field extractions (7), bare-acronym entries populated (48).

Bug Fix — validate_gloss_overrides.py Dict-Format Compatibility

Companion bug to the migrate.py glossary filter fix. The script crashed with AttributeError once the glossary was wrapped in the dict format. Patched to handle both the bare-list and dict-wrapped formats.


Release 26238_01 — August 26, 2026

Feature release · Program · Requires DB rebuild for full-text search

Application-side feature work across three targets (Blazor Web, MAUI Android, Legacy Node). Three feature sprints delivered together, plus the FTS5 application integration to consume the DB-side index shipped in 26239_01.

Sprint C — Retention System

Review queue. Every completed topic resurfaces on a schedule based on how the learner performed. Intervals: 100 percent with high confidence = 14 days, 100 percent otherwise = 7 days, 67 percent accuracy = 7 days, 33 percent = 3 days, 0 percent = 1 day.

Review mode. Clicking a due topic opens it with a review banner and a confidence-only slider instead of the normal quiz. Re-quizzing was deliberately not offered: memorization contaminates repeat scores after one or two passes.

Shaky topics detection. Flags topics where self-rating is out of step with observed performance, only when the pattern is completely consistent across all three questions on the topic.

Launch-time reminder banner. Chosen deliberately in place of Android push notifications, which would have required requesting permissions and undermined the no-permissions, no-ads, no-accounts, no-telemetry story in the Play Store.

Sprint D — Report Screen Overhaul

Report screen segmentation into five sub-sections: Summary, Performance, Insights, Objectives, Next steps.

Weakness heatmap. A domain-by-difficulty grid, each cell coloured on an HSL green-to-red ramp based on accuracy.

Per-domain calibration. Every domain gets its own rated-vs-scored row with a verdict.

Calibration trend over time. Weekly-bucketed dual-line chart. Requires at least two weeks of dated activity before it renders.

One-click remediation. Focused remediation card with a drop-down criterion and a button that jumps the study cursor to the first matching topic.

Sprint E — Exam Date and Pace Tracker

Per-exam target date. Collapsible section on the Start screen lets a learner pick a target date for each exam independently.

Pace card. Shows days remaining, objectives left, required pace, and actual pace over the last seven days. Behind-pace threshold at under 80 percent of required.

Combined launch banner covering both reviews and exam date.

Full-Text Content Search (Application Side)

The Jump palette gains a Search inside topic content too checkbox, querying the DB-side FTS5 index shipped in 26239_01. Falls back gracefully to title-only search on older course databases lacking the index.

Report Screen Segmentation — Legacy Parity

Legacy renderResults now emits the same five section wrappers as Blazor.

Not Shipping in This Release

Upgrade Actions


Release 26237_03 — August 25, 2026

Feature release · Program only · No course content changed

Sprint B — Notes, Notes Report, Examulator Nudge

Per-topic notes UI, a Notes report screen sorted by most recently updated, and an Examulator URL nudge on the Results screen once a learner has completed a substantial portion of the course.


Release 26237_02 — August 25, 2026

Feature release · Program · Introduces cross-device progress transfer

Sprint A — Timestamps and Backup/Restore

Answer timestamps (AnsweredAt, ContentViewedAt). ProgressBackup service with a Manage progress screen (create/restore backup, overwrite or merge modes). Cross-device username remap on restore.

Dependency Notes


Release 26237_01 — August 25, 2026

Program only · No course content changed

ISACA Support & Cert-Body Filter

Groundwork for ISACA course support — all eleven ISACA certification tracks now in the bundled catalog. A cert-body pill toggle ((ISC)² / ISACA) filters the exam selector. Default is (ISC)² for first-time users; last-selected tab remembered via preference store.


Release 26232_03 — August 20, 2026

Bug fixes · Program only · No course content changed

Progress Counts Against Exam Objectives, Not Raw Page Count

Delivery 26232_01 expanded the study sequence to include overview pages, which had knock-on effects on several counters that assumed sequence length equalled testable objectives. Fixed across Start, Progress, Results, and screen-reader summaries.


Release 26232_02 — August 20, 2026

Enhancements · Program only · No course content changed

MAUI App Icon

The Android app icon was rendering as an unreadable blur due to the full brand logo (including text) being used as the adaptive-icon source. Replaced with just the emblem, centred to fit Android's safe-zone circle.

Version + Build Date on Splash Screens

The splash screen now displays the running version and build date in a small monospace footer.


Release 26232_01 — August 20, 2026

Feature · Program only · No course content changed

Study Sequence Now Includes Overview Content

Removed a filter that excluded domain/chapter/topic overview pages from the study sequence.

Back Navigation

Added a Previous button on Topic and Quiz screens.

Text-to-Speech Fixes

Several TTS reliability fixes across Splash, non-content screens, and navigation transitions.

UI Fixes

Cancel button in course-download dialog; scroll-to-top on Next.

Branding

Replaced the placeholder brand image with the actual EA logo across every surface.

Version Format

MAUI ApplicationDisplayVersion and ApplicationVersion (Android versionCode) format corrections.


Release 26228_01 — August 16, 2026

Bug fixes · Program only · No course content changed

Accessibility Audit Remediation

Fixed muted body-text color contrast (was failing WCAG 2.1 AA in both light and dark mode). Added ARIA roles to the progress rail and search inputs. Added focus trap to all modal overlays.

Auto-Updater Infinite Loop

Legacy — updater.js was reading the build-time placeholder instead of the served version, causing every launch to trigger a download-restart cycle. Fixed by reading from appsettings.json.

Start-Over Modal — Dropdown Does Not Activate Choice Button

Legacy — missing change listener on the domain/subdomain select elements.


Release 26227_01 — August 14, 2026

Feature · Course DBs · Full-corpus quality remediation and content versioning

Question Quality

Replaced 228 defective distractor options in CISSP. Completed 16 truncated option texts. Adjudicated 797 disputed questions. Removed 199 em-dashes from whyWrong fields.

Glossary

Removed 4 orphaned fragment entries. Completed or rewrote 30 truncated definitions. Added 5 missing standard entries.

Application — Content Versioning

Each study topic now carries a content version stamp; an Updated — review badge appears when content changes.

Application — Version Check

Course database version is compared against the installed application version on load; a warning banner appears on mismatch.


Release 26226_06 — August 14, 2026

Enhancements · Program only · No course content changed

Course Compatibility Enforcement

Replaced the previous version check with a per-exam compatibility floor.

Print and Share Report

A Print / Save PDF button on Legacy/Razor; a Share report button on MAUI (Android's WebView has no native print dialog).

Application Subtitle

Updated from "Exam Preparation Engine" to "Cybersecurity Certification Preparation."

Visual Studio Solution Restructure

Solution files moved to the repository root.

MAUI / Android Improvements

ApplicationDisplayVersion corrected. PublishTrimmed enabled for Release builds.

Build Script

build-desktop.sh now passes PublishTrimmed/TrimMode for self-contained platform builds.