Releases: zwoomer/fce
FCE v0.4.0 — Interpretation layer, docs IA, validation-research
Release date: 2026-04-06
Status: Stable
Overview
FCE v0.4.0 is an interpretation, history clarity, and documentation architecture release. It tightens how baseline-relative signals are explained in the instrument (History home preview, Trend panel, and shared comparison logic), improves first-run and returning-user onboarding scroll targets, reorganizes the static documentation site around Core Docs vs Context & Development, and adds new doc pages for What FCE Measures, Applications / Use Contexts, and Validation / Research (validation stance and research directions, EN/NO/LT).
Repository housekeeping moves older release notes under docs/releases/ and removes the canonical SVG mark files from the repository root (see Repository housekeeping).
v0.4.0 maintains full backward compatibility for stored sessions and baselines. No change to core measurement philosophy: human interpretation remains primary.
🧭 Interpretation layer & History clarity
Shared comparison logic
- Single source of truth: Home History preview, History cards, and the Trend view use aligned baseline loading, valid-session filtering, and deviation-based status where applicable.
- Precision-aware units: Reaction, Go/No-Go, and Divided Attention use milliseconds; Precision uses normalized error (no
mssuffix) consistently in summaries and trend copy. - Status labels: Home preview and trend listings prefer stored
statusTextwhen present; otherwise recompute from baseline mean/SD when a valid baseline exists.
Trend panel (History view)
- Readable baseline header: Explains “typical” value, variation (±SD when available), and short interpretive guidance (localized EN/NO/LT).
- Recent checks list: Lists recent check sessions with status aligned to the same compare logic used elsewhere.
- Empty and edge states: Clear messaging when no baseline exists yet or no checks are available.
Internationalization
- Trend strings: Expanded
trend.*keys for baseline header, typical labels per test type, variation line, guide text, invalid/ok badges, and footer note (EN/NO/LT).
Styling
- History / trend UI: Supporting CSS for trend list, home history preview layout, and related chips (see
style.css).
🏠 Onboarding & instrument entry
- Copy: First-run onboarding messaging clarified (EN/NO/LT).
- Scroll targets: After returning-user onboarding, the view scrolls to
#instructionfirst; deep-link alignment with#instrumentpreserved where applicable. index.html: Structure updates to support instruction anchor and onboarding flow.
📚 Documentation site architecture
Grouped hamburger menu
- Sections: Top-level Home and History unchanged; Core Docs and Context & Development are expandable groups (not links).
- Core Docs: About, Concept, What FCE Measures, Scope & Limits, How to Use, How the tests work, FAQ.
- Context & Development: Why this exists, Applications / Use Contexts, Validation / Research.
- Behavior: Sections collapsed by default; the section containing the current page opens automatically. Section toggles update
aria-expanded. Language switching (EN/NO/LT) applies to section titles and nested labels. menu-sections.js: Shared, idempotent initializer for toggles and initial open state.
New and updated pages
what-fce-measures.html: Integrated into the Core Docs reading order and navigation.applications.html: Full content describing use contexts, boundaries, and institutional constraints (EN/NO/LT).validation-research.html: Validation stance, defined constructs, threshold limitations, ecological validity (including limits of cross-context “functional readiness” criteria), and research directions (EN/NO/LT), with consistent chrome.
Readme alignment
README.md: Opening lines on change vs others, signals vs capability, and human interpretation; baseline-relative measurement instrument; dedicated Interpretation & validation limits; Position summary; link todocs/summary.md.
Docs bottom navigation (docs-nav)
- Reading order: FAQ → Why this exists → Applications / Use Contexts → Validation / Research (forward); instrument link remains centered.
- Long labels: Buttons allow text wrap; narrow viewports stack full-width to avoid overlap (e.g. Lithuanian strings).
Footers
- Attribution: All doc footers and both
index.htmlfooters include Designed and built by Zwoomer under the FCE tagline. - Simplified tagline: Footer no longer duplicates a link to Why (menu covers that path).
Instrument menu & deep links
index.html: Canonical docs list extended for Learn-more / last-page behavior to include new doc filenames where applicable.
🗂️ Repository housekeeping
Release note archives
- Moved:
RELEASE_v0.2.9.md,RELEASE_v0.3.0.md, andRELEASE_v0.3.1.md→docs/releases/(same content, clearer layout). RELEASE_v0.3.3.md: Minor maintenance edits.
SVG mark files and preview page removed from root
- Removed from repository root:
fce-mark.svg,fce-icon.svg,fce-mark-state.svg(superseded / relocated outside this tree in this revision). svg-preview.html: Removed from the repository in the same hygiene pass (it only referenced the deleted root SVGs). Restore marks + a preview page, or host favicon/mark assets elsewhere, if you need them again.
📝 Technical details
Changed files (high level)
app.js: Interpretation/trend/home-preview logic, i18n additions, onboarding scroll behavior.index.html: Onboarding, instruction anchor, History trend card, footers, grouped menu, canonical doc list.style.css: Trend/home history styles; docs-nav flex/wrap/stack rules; footer attribution line.- Doc HTML: Menu sections,
menu-sections.jsscript tag, docs-nav, footers across pages;validation-research.htmlexpanded with full validation stance copy (EN/NO/LT). - Removed:
svg-preview.html(depended on root SVG marks).
New files
menu-sections.jsapplications.htmlvalidation-research.htmlRELEASE_v0.4.0.md(this note)docs/summary.md— concise project overview (aligned with README positioning)
Planning & readme
README.md— latest release, v0.4.0 changelog section, History & trends note, planned developmentdocs/next-steps.md— v0.3.x closure, v0.4.0 shipped, v0.4.x next;docs/summary.mdnoteddocs/roadmap.md— v0.3.x complete, v0.4.0 shipped, v0.4.x planned;docs/summary.mdnoted
🔄 Backward compatibility
- Sessions and baselines: Existing local data remains valid; no migration required.
- Privacy model: Unchanged (local-first, no accounts).
🚀 Next steps
Further v0.4.x work may include:
- Restoring or relocating canonical SVG marks and optional mark preview page if needed
- Extending Validation / Research with empirical results or citations when available
- Deeper multi-test synthesis views (if aligned with non-diagnostic, human-led interpretation)
- Optional printable / export-oriented reporting (CSV already shipped in v0.3.3)
v0.4.x continues to exclude accounts, cloud sync, diagnostics, and automated decisions.
FCE v0.3.3 — Precision stability, export, and formatting improvements
Release date: 2026-01-15
Status: Stable
Overview
FCE v0.3.3 is a stability, formatting, and documentation clarity release focusing on Precision test robustness, CSV export functionality, standardized Quality+Note formatting, improved invalid session reason display, comprehensive documentation additions, and visual identity system.
This release significantly improves Precision test consistency across devices, adds CSV export capability, standardizes summary formatting across all test types, adds extensive boundary clarification across documentation, and establishes a canonical visual mark system.
v0.3.3 maintains full backward compatibility. All existing sessions and baselines remain valid.
🎯 Precision stability improvements
Input coordinate normalization
- CSS pixel normalization: Pointer coordinates normalized to CSS pixels (device-independent)
- Consistent hit radius: Hit radius calculations now consistent across all devices, display pixel ratios, and zoom levels
- Multi-input support: Handles Pointer Events, touch events, and mouse events with unified coordinate system
- Device independence: Same hit radius behavior on high-DPI displays, tablets, and standard monitors
Timeout handling
- Per-trial resolution guard: Prevents late taps after timeout from being recorded
- Single outcome guarantee: Ensures exactly one outcome per trial (hit, miss, or timeout)
- Timeout priority: Timeout fires first, late taps are ignored
- Clean state management: Proper cleanup of timeout timers and event handlers
Fullscreen tracking
- Achievement tracking: Tracks whether fullscreen was successfully achieved for each Precision session
- Non-blocking feedback: Shows note in session summary when fullscreen was not achieved (does not affect scoring)
- Session record: Fullscreen achievement status stored in session record for reference
- User awareness: Clear indication when input consistency may be reduced due to windowed mode
📊 CSV export
Export functionality
- CSV export button: New "Export CSV" button next to existing JSON export
- Same data scope: Exports same sessions as JSON export (test-type filtered)
- Flattened schema: All session data flattened into columns (metadata, metrics, quality, flags, device info)
- Proper escaping: RFC 4180 compliant CSV escaping (quotes, commas, newlines)
- Stable column order: Fixed column order for consistent parsing
Timestamp clarity
- Deterministic format: Local timestamps in
YYYY-MM-DD HH:mmformat (24-hour, locale-independent) - Timezone offset: New
timezoneOffsetMincolumn for reference (minutes behind UTC) - No locale dependency: Timestamps consistent regardless of browser locale settings
- Clear labeling: Explicit column headers for timestamp and timezone information
Filename format
- Pattern:
fce_<testType>history<YYYY-MM-DD><HHmm><lang>.csv - Example:
fce_reactionhistory2026-01-151430en.csv - Language suffix: Includes current language code (en/no/lt)
- Date/time stamp: Includes export date and time for versioning
✨ Quality+Note formatting standardization
Consistent formatting
- Helper function: New
formatQualityWithOptionalNote()helper for consistent formatting across all tests - Two-line format: Quality label on one line, Note on new line (when note exists)
- Prefix stripping: Automatically strips duplicate "Note:" / "Merknad:" / "Pastaba:" prefixes
- Localized labels: Uses
quality.labelandui.noteLabeli18n keys for all languages
Implementation
- All test types: Applied to Reaction Time, Go/No-Go, Divided Attention, and Precision
- Session summary: Live session summaries use standardized format
- History summaries: Regenerated summaries use same formatting
- Language switching: Formatting updates correctly when language changes
Example output
Quality: Mixed
Note: This session had many false starts — consider retaking for better baseline quality.
🔍 Invalid session reason display
Compact history display
- Reason-only text: History/details now show compact "Reason: " instead of full refusal messages
- No duplication: Full explanation + remedy + quality only shown in session summary panel
- Test coverage: Applied to Precision, Go/No-Go, and Divided Attention
- Backward compatible: Old sessions without refusalCode still work via fallback parsing
Implementation
- i18n keys: New
history.reasonText.<code>keys for reason-only text (no "Session not usable:" prefix) - Helper function:
getRefusalReasonText()helper avoids colon parsing for known refusal codes - Fallback parsing: Unknown codes or old sessions use colon parsing as fallback
- Consistent format: All languages use same "Reason: " pattern
Example
History/details:
Reason: execution failure (no valid responses recorded).
Session summary:
Session not usable: execution failure (no valid responses recorded). | Next step: run again and respond to the GO cue. | Quality: Not usable
🐛 Bug fixes
Summary visibility
- CSS :empty rule fix: Invalid session summaries now immediately visible (override CSS rule that hides empty elements)
- Explicit display: Summary element explicitly shown when content exists
- All invalid types: Fix applies to all invalid session types (no reaction, no go, missing answer, etc.)
Mobile History panel layout
- Responsive layout fix: History panel on home page now displays correctly on mobile devices (≤640px)
- Date/time positioning: Date/time text appears on its own line at top of each history item on mobile to prevent overflow
- Flex wrapping: Top row (badge + mode + date/time) wraps properly on small screens
- Spacing adjustments: Reduced gaps and font sizes for better mobile fit
- Metrics row: Metrics row (value + trials) also wraps properly on mobile
- Visual consistency: Layout maintains readability and proper alignment across all screen sizes
🌐 Internationalization
New i18n keys
- CSV export: Complete translations for export button, status messages, and empty state (EN/NO/LT)
- Note labels:
ui.noteLabelkey for localized note labels (EN: "Note", NO: "Merk", LT: "Pastaba") - Reason text:
history.reasonText.R1_INVALID_EXECUTION,R2_INSUFFICIENT_DATA,R3_EXCESS_NOISEfor all languages - Remedy strings: Complete remedy translations for all invalid session types (EN/NO/LT)
🎨 Visual identity system
Canonical mark system
-
Canonical mark (
fce-mark.svg): Single source of truth for all mark variants- Rounded square frame (path-based, not rect)
- Corner radius: 9 units (optimized for favicon rendering)
- Stroke width: 4 units (favicon-safe)
- Stroke linejoin: miter (prevents bulbous corners)
- Stroke linecap: butt (technical aesthetic)
- Intentional gap on top edge near right corner (~10 units)
- Uses
currentColorfor stroke - No fill, no text, no symbols
- Clean, flat vector design optimized for small sizes
-
Favicon/logo variant (
fce-icon.svg): Derived from canonical mark- Same geometry and proportions
- Optimized for 16×16 and larger sizes
- Maintains legibility at small sizes
-
In-app state mark (
fce-mark-state.svg): Expresses system state- Same frame geometry as icon variant (radius 9, stroke 4)
- Interior fill using
currentColorat ~18% opacity - Miter joins and butt caps for crisp rendering
- Represents held containment state (readiness, not progress)
- Optional commented threshold state interruption (disabled by default)
Geometry refinement (post-initial release)
- Favicon-safe rendering: Reduced stroke width from 6 to 4 units and corner radius from 14 to 9 units
- Crisp corners: Changed stroke-linejoin from round to miter to prevent bulbous corners
- Technical aesthetic: Changed stroke-linecap from round to butt for cleaner, more institutional appearance
- Small-size optimization: Mark renders cleanly at 16×16px favicon size without ornamental artifacts
- Gap preservation: Intentional gap remains visible and clear at all sizes
- Consistency: All three variants (canonical, icon, state) updated with matching geometry
- Verification: Added
svg-preview.htmlfor visual verification at multiple sizes (16px, 24px, 32px, 64px, 128px)
Design philosophy
- Containment field metaphor: Mark represents a containment field with conditional access
- Intentional gap: Gap signifies controlled entry/exit, not damage or incompleteness
- Calm, disciplined aesthetic: Institutional feel without being clinical
- Flat vector only: No animations, gradients, or shadows
- Comment structure: SVG files include detailed comments for future variant development
📚 Documentation clarity and boundary reinforcement
About page additions
"Why repeated use matters" section:
- Emphasizes that FCE is designed for comparison across time
- Explains how repeated use under varying conditions builds pattern awareness
- Clarifies that FCE does not interpret results or explain causes
- User-led pattern recognition through comparison, not instruction
"What FCE reflects (without medical claims)" section:
- Grounding explanation of functional performance
- Describes how performance reflects combined state of multiple body systems
- Clarifies that FCE measures observable execution, not systems directly
- Maintains non-medical framing
Concept page additions
"Baseline comparison and pattern recognition" section:
- Explains how ...
FCE v0.3.2 — Unified navigation and Precision history polish
Release date: 2026-01-14
Status: Stable
Overview
FCE v0.3.2 is a UX and navigation release introducing unified topbar branding, scroll position restoration, Precision history rendering polish, and a new "Why this exists" documentation page.
This release significantly improves navigation consistency, documentation accessibility, and Precision test result interpretation.
v0.3.2 maintains full backward compatibility. All existing sessions and baselines remain valid.
🎨 Unified topbar brand link
Consistent navigation
- Clickable brand: "FCE" title is now clickable across all pages (index + all docs)
- Hover text swap: On desktop hover, "FCE" smoothly transitions to localized "To the instrument" label
- Overlay-based swap: Text swap uses absolute positioning (no layout reflow)
- Language-aware: Hover label adapts to current language (EN/NO/LT)
- Accessibility: Proper ARIA labels and focus-visible styles
Topbar layout improvements
- Centered page title: Page title now absolutely centered (no movement when brand text swaps)
- No purple visited links: Topbar links inherit color, preventing purple visited styling
- Hamburger affordances: Enhanced menu button with hover/active states and subtle press feedback
- Tightened hover condition: Brand link text swap only triggers on true hover devices (desktop mouse/trackpad), completely hidden on touch devices
- Small screen optimization: "Learn More" button hidden on screens ≤480px to prevent topbar crowding (accessible via hamburger menu)
📜 Scroll position restoration
Smart navigation
- Scroll memory: Canonical doc pages now remember scroll position when navigating away
- Learn More restoration: Clicking "Learn More" returns to last visited doc page at previous scroll position
- Storage system: Uses localStorage to persist scroll positions per page
- Clean URLs: Hash-based restoration that removes itself after scroll
Implementation
- Scroll position stored on
visibilitychangeandbeforeunloadevents - Restoration triggered by
#restore-scrollhash in URL - Works seamlessly with existing baseline-relative.html scroll restoration
📊 Precision history rendering polish
Summary chips (3-chip design)
- Accuracy: Average error (2 decimals)
- Consistency SD: Standard deviation of error (2 decimals)
- Hits: Hit rate percentage (integer)
- Removed: RT, trials, misses, timeouts from primary chips (moved to support line)
Muted support line
- Secondary metrics: Hit rate %, misses, timeouts, avg RT, trials displayed in muted line under chips
- Localized formatting: Proper language-specific formatting (EN/NO/LT)
Grouped details sections
- Accuracy section: Average error, Best, Worst
- Consistency section: Variability (SD)
- Execution section: Hits %, Misses, Timeouts, Average RT, SD RT
- Clear hierarchy: Bold section labels with muted detail lines
Baseline comparison text
- Explicit phrasing: "Accuracy within normal range" / "Accuracy slightly worse than baseline (+0.11)" / "Accuracy significantly worse than baseline (+0.29)"
- Localized: Complete translations for EN/NO/LT
- Clearer interpretation: Makes comparison status immediately understandable
📄 Documentation
"Why this exists" page
- New page:
why.htmlexplaining FCE's philosophy and purpose - Footer links: Added "Why this exists" link to all page footers
- Standalone access: Accessible via footer, not part of canonical doc flow
- Fully translated: Complete EN/NO/LT support
Precision test documentation
- how-tests-work.html: Added new Precision (Target Pointing) section explaining task mechanics, error metrics, and best practices
- faq.html: Added Precision to the "What tests are included?" list
- about.html: Added motor accuracy to execution domains description
- Complete translations: All documentation updates include EN/NO/LT translations
Learn More button
- Canonical docs only: "Learn More" button now only redirects to canonical doc pages
- Excludes why.html: why.html accessible only via footer link
- Smart redirect: Returns to last visited canonical doc page with scroll restoration
- First-time visitor: First-time visitors are always directed to About page for proper onboarding
- Returning visitors: Subsequent visits use last visited canonical doc page with scroll restoration
🎨 Link styling
Footer links
- Subtle styling: Inherit muted text color with opacity transitions
- Hover states: Brighten on hover/focus with border-bottom emphasis
- Accessibility: Focus-visible styles with box-shadow
Docs page links
- Dark theme friendly: Light gray links (no bright blue/purple)
- No purple visited: Visited links stay light gray
- Consistent styling: Border-bottom emphasis, smooth transitions
🐛 Bug fixes and improvements
Topbar fixes
- Layout stability: Page title centered, no movement on brand hover
- Text swap: Overlay-based implementation prevents layout reflow
- Visited links: Prevented purple styling on topbar links
Precision history
- Readability: 3-chip summary makes key metrics immediately visible
- Grouped details: Organized sections improve information hierarchy
- Explicit comparisons: Baseline comparison text is clearer and more actionable
- Trial count default: Fixed Precision defaulting to 10 trials when switching test types; now defaults to 25 (Baseline default) when switching from HTML default
📊 Technical details
New I18N keys
history.precision.labels.*— Accuracy, Consistency, Execution, Hits, Misses, Timeouts, Average RT, Variabilityhistory.precision.comparison.*— Within, Slightly worse, Significantly worse- Complete EN/NO/LT parity
Code changes
- Unified brand link HTML structure across all pages
- Scroll position storage/restoration system for canonical docs
- Precision history rendering refactor (chips, support line, grouped details)
- Topbar CSS improvements (centered title, overlay text swap, visited link prevention)
- Hamburger button hover/active affordances
- Brand link hover condition tightened:
.brand-longhidden by default (display: none), only shown on hover-capable devices
Files changed
index.html— Brand link structure, Learn More logic, scroll restorationwhy.html— New documentation page- All canonical doc pages — Brand link, scroll storage/restoration
app.js— Precision history rendering, I18N keysstyle.css— Topbar fixes, brand link hover, hamburger affordances, link styling.nojekyll— Skip Jekyll processing for faster GitHub Pages deployment
🚀 Deployment
- GitHub Pages optimization: Added
.nojekyllfile to skip Jekyll processing - Faster deployments: Static file copying instead of build process
- Timeout prevention: Eliminates deployment timeout issues
🔖 Versioning
- v0.3.2 is a minor release (UX improvements and new documentation)
- Builds on: v0.3.1 — Precision refinements and UX improvements
- Focus: Navigation consistency, documentation, Precision history clarity
FCE v0.3.1 — Precision refinements and UX improvements
Release date: 2026-01-14
Status: Stable
Overview
FCE v0.3.1 is a refinement release focusing on Precision test UX improvements, trial count defaults, and minor bug fixes. This release improves the user experience without changing core measurement logic.
v0.3.1 maintains full backward compatibility. All existing sessions and baselines remain valid.
🎯 Precision test refinements
Trial count defaults by mode
- Baseline mode: Defaults to 25 trials (was 15)
- Check mode: Defaults to 15 trials
- Training mode: Defaults to 15 trials (only if input is empty)
- Mode-aware defaults: Trial count now corresponds to the session type being started
- Clamp enforcement: All changes respect the 10-40 trial range
Trend display improvements
- Precision delta labels: Removed "ms" unit from Precision trend delta lines (error distance is unitless)
- Baseline line cleanup: Removed hacky
.replace(" ms", "")calls, built baseline line without "ms" for Precision tests - Consistent formatting: Non-precision tests continue to show "ms" as expected
Target placement safety
- Exit button exclusion: Precision targets never appear near the Exit button
- Collision detection: Retry loop ensures targets are placed with safety margin
- Small screen support: Prevents accidental exits on mobile devices
🎨 UX improvements
Divided Attention legend
- New location: Legend moved to "What to do" panel (task hint panel)
- Color coding: Subtle visual emphasis for GO, NO-GO, and "blue" words
- Language-aware styling: Color coding adapts to current language (EN/NO/LT)
- Improved hierarchy: Legend now appears in context with instructions
Translation fixes
- Lithuanian correction: Fixed "NESPĮKITE" → "NESPAUSKITE" (NO-GO instruction)
- Consistency: Updated across all Divided Attention translations
🐛 Bug fixes
- Trial count persistence: Fixed issue where trial count would reset to 15 when changing test type
- Default behavior: Trial count now only changes when starting a session, not when selecting test type
- Visual consistency: Improved trend and baseline line rendering for Precision tests
📊 Technical details
Code changes
- Modified
startBaselineBtn,startCheckBtn,startTrainingBtnclick handlers to set mode-specific defaults - Removed forced
trialCountInput.value = 15fromtestType.addEventListener("change", ...) - Updated
renderTrendFor()to handle Precision delta and baseline lines correctly - Added
nextPrecisionTrial()exclusion zone logic for Exit button - Refactored
updateDividedLegend()to use new#taskLegendSlotanddecorateDividedLegend()helper
Files changed
app.js— Trial defaults, trend rendering, target placement, legend updatesindex.html— Added#taskLegendSlotfor Divided Attention legendstyle.css— Added Divided Attention legend styling (color coding)
🔖 Versioning
- v0.3.1 is a patch release (refinements and fixes)
- Builds on: v0.3.0 — Precision (Target Pointing) test
- Focus: UX improvements and bug fixes without changing measurement logic
FCE v0.3.0 — NEW Precision (Target Pointing) test with fullscreen UX
Release date: 2026-01-13
Status: Stable
Overview
FCE v0.3.0 is a major feature release introducing the Precision (Target Pointing) test — a new assessment paradigm for measuring fine motor control and spatial accuracy.
This release adds a complete fourth test type with fullscreen UX, comprehensive internationalization, and full integration with the existing baseline-relative assessment framework.
v0.3.0 maintains full backward compatibility. Existing sessions and baselines remain valid and unchanged.
🎯 Precision (Target Pointing) test
New test type
FCE now includes four assessment paradigms:
- Reaction Time — Simple response speed and consistency
- Go / No-Go — Inhibitory control under time pressure
- Divided Attention — Execution quality under split attention
- Precision (Target Pointing) — Fine motor control and spatial accuracy ⭐ NEW
Test mechanics
- Fullscreen test environment: Consensual fullscreen request with prep overlay
- Random target placement: Targets appear at random positions on screen
- Variable target sizes: Target radius adapts based on screen size
- Trial-by-trial feedback: Immediate visual feedback (hit/miss/timeout)
- HUD display: Trial counter, feedback messages, exit button
- Timeout handling: Trials automatically timeout if no response
Metrics measured
- Error distance (errN): Normalized distance from target center to click point
- Mean error: Average error distance across all trials
- Standard deviation: Variability in error distance
- Reaction time: Time from target appearance to click
- Hit rate: Percentage of successful hits within target radius
- Miss rate: Percentage of clicks outside target radius
- Timeout rate: Percentage of trials that timed out
Baseline-relative evaluation
- Baseline mode: Establishes personal normal performance for Precision
- Check mode: Compares current performance to baseline with deviation-based status
- Training mode: Practice sessions that never update baseline
- Quality assessment: Session quality labels (Good / Mixed / Not usable)
- History integration: Full History card rendering with per-trial breakdown
🖥️ Fullscreen UX
Consensual fullscreen
- Prep overlay: Users must explicitly confirm before entering fullscreen
- Language-aware: Prep overlay fully translated (EN/NO/LT)
- Accessibility: Proper ARIA attributes and keyboard navigation
- Exit options: Exit button in HUD, Esc key support
Fullscreen handling
- Graceful fallback: If fullscreen unavailable, test runs in windowed mode
- Notice system: Clear messaging when fullscreen is unavailable or exited
- State management: Proper handling of fullscreen enter/exit events
- Cross-browser support: Vendor-prefixed fullscreen APIs for compatibility
Event handling
- Esc key behavior: Single Esc press exits fullscreen and resets test
- Pointer events: Responsive click detection using pointerdown events
- Event delegation: Robust event handling that survives DOM changes
- Memory management: Proper cleanup of event listeners to prevent leaks
🌐 Comprehensive internationalization
Precision test translations
- Test type name: "Precision (Target Pointing)" in EN/NO/LT
- Fullscreen notices: Unavailable and exited messages
- Feedback messages: Hit, miss, timeout outcomes
- Invalid session messages: Quality-related warnings
- UI elements: All buttons, labels, and instructions
History section translations
- Empty history message: "No history yet" in all languages
- Baseline labels: "No baseline", "No baseline for comparison"
- Precision-specific strings: Hit, reaction time, error, responded, misses, timeouts
- Divided attention labels: Flashes, target, answer, error
- Context tags: Sleep, stress labels
- Action labels: Reason, Show trials, Hide trials
- Abbreviations: False alarms (FA/IF/SK), Flash error
Quality badge language-safety
- Key-based mapping: Quality badges now check raw keys ("good", "mixed", "not_usable") instead of translated text
- Consistent behavior: Badge colors work correctly regardless of language
- Baseline quality warnings: Complete Lithuanian translation added
🐛 Bug fixes and improvements
Precision test fixes
- Target visibility: Fixed targets not appearing after reset or language change
- Event handler attachment: Fixed pointer handler not working after reset (event delegation on document)
- Esc key handling: Fixed race condition requiring two Esc presses (now single press exits and resets)
- Language switching: Fixed handler not working after language changes (event delegation)
- Memory leaks: Cleaned up event listeners with proper capture phase matching
Code quality
- Event listener cleanup: Ensured all listeners removed with matching capture flags
- Debug code removal: Removed debug styling and console.log statements
- State management: Improved precision-specific state variable initialization and cleanup
🔐 Safety & compatibility
- Backward compatible: All existing sessions and baselines remain valid
- No breaking changes: Existing test types (Reaction Time, Go/No-Go, Divided Attention) unchanged
- Data storage: Precision sessions use same storage schema as other test types
- History rendering: Old sessions without Precision data gracefully handled
📊 Technical details
New functions
startPrecisionSession()— Initialize Precision test sessionnextPrecisionTrial()— Generate and display next targetshowPrecisionFeedback()— Display trial outcome feedbackendPrecisionSession()— Clean up and save sessionshowPrecisionPrep()/hidePrecisionPrep()— Prep overlay managementhandlePrecisionFullscreenChange()— Fullscreen event handlingupdatePrecisionNotice()— Fullscreen notice updateshandlePrecisionResize()— Window resize handlingrunPrecisionResetOnce()— Reset coordinationisAnyFullscreenActive()— Fullscreen state detectiongetBaselineSavedPrecision()— Baseline summary renderinggetCheckPrecision()— Check mode summary rendering
New HTML elements
<div id="precisionStage">— Fullscreen test stage<div id="precisionTarget">— Clickable target circle<div id="precisionPrepOverlay">— Prep overlay dialog- Precision HUD elements (counter, feedback, exit button, fullscreen notice)
New CSS
.precision-stage— Fullscreen stage styling.precision-target— Target circle with show/hide animations.precision-hud— HUD layout and positioning- Fullscreen handling and body class management
- ~124 lines of new CSS
🔖 Versioning
- v0.3.0 is a major release (new test type)
- Builds on:
- v0.2.9 — UX improvements, History enhancements, and onboarding
- Adds complete Precision (Target Pointing) test implementation with fullscreen UX and comprehensive i18n
Future work continues under v0.3.x for refinements and v0.4 planning for additional features.
FCE v0.2.9 — UX improvements, History enhancements, and onboarding release
Release date: 2026-01-13
Status: Stable
Overview
FCE v0.2.9 is a UX improvements, History enhancements, and onboarding release.
This release adds a first-time onboarding experience, per-test hints, significant History card improvements with semantic styling and per-trial details, complete translation coverage, and enhanced navigation with scroll position restoration.
v0.2.9 maintains full backward compatibility and does not alter any test logic, scoring algorithms, or data storage.
🎓 First-time onboarding
Onboarding overlay
- Overlay dialog appears on first visit asking "Have you used FCE before?"
- No option: Navigates to
how-tests-work.html(new procedural documentation page) - Yes option: Hides overlay, scrolls to instrument, marks onboarding complete
- Reset button: Added "Reset onboarding" button in footer to clear flag and re-show overlay
- State persistence: Uses
localStorageflag (fce_onboarding_done) to remember completion - Accessibility: Proper ARIA attributes, keyboard navigation support
The onboarding gate ensures new users understand how to use the instrument before their first session.
💡 Per-test hints panel
"What to do" panel
- Dynamic hints panel appears above controls on Home view
- Test-specific instructions: Shows procedural instructions for the currently selected test type
- Language-aware: All hints translated (EN/NO/LT)
- Auto-updates: Hints change automatically when test type or language changes
- Always visible: Panel remains visible to guide users through each test type
Supports all three test types:
- Reaction Time: Click when the circle turns green
- Go/No-Go: Click on GO, don't click on NO-GO
- Divided Attention: GO/NO-GO rules + count blue flashes
📄 New documentation page
How the tests work (how-tests-work.html)
New comprehensive procedural documentation page:
- Introduction: What to do overview
- Test-specific sections: Detailed instructions for each test type (Reaction Time, Go/No-Go, Divided Attention)
- Error definitions: Explanation of false starts, misses, false alarms, flash errors
- Practice recommendation: Encourages practice before baseline
- Navigation: "Open instrument" and "Back to How to Use" buttons
- Full translation: Complete EN/NO/LT support
Menu integration: "How the tests work" menu item added to all pages under "How to Use"
Quick start callout: Added to how-to-use.html linking to the new page
📊 History card enhancements
Expandable summary + details pattern
- Clickable cards: Cards are now interactive with keyboard support (Enter/Space)
- Summary view: Compact view with key metrics as colored chips
- Average reaction time
- Standard deviation (SD)
- Trial count
- False alarms (Go/No-Go, Divided Attention)
- Flash errors (Divided Attention)
- Details view: Expandable section showing:
- Best/worst reaction times
- Error counts and types
- Baseline comparison
- Context tags (sleep, stress)
- Quality badge
- Invalid reason (if applicable)
- Per-trial breakdown
- State preservation: Expanded state persists across language changes
Semantic chip coloring
Chips now reflect status with color coding:
- Average chip:
bad(red) if session is invalid- Status-based for check sessions (ok/warn/bad/na)
na(neutral) for baseline/training
- SD chip:
ok(green) if ≤ baseline SD × 1.25warn(yellow) if ≤ baseline SD × 1.75bad(red) if > baseline SD × 1.75na(neutral) if no baseline SD available
- Trials chip:
okif ≥ expected trialswarnif < expected trialsnaif missing
Mode-aware badges
- Check sessions:
- Show status-based colors (
ok/warn/bad) with status text - Compute badge from delta percentage when statusText missing
- Never show random grey "OK" for check sessions
- Show status-based colors (
- Baseline/Training sessions:
- Show neutral
nabadge with mode label
- Show neutral
- Invalid sessions:
- Always show
badclass with "Invalid" text
- Always show
Quality badge
- Quality ("Good", "Mixed", "Poor") now displayed as colored badge:
ok(green) for "Good"warn(yellow) for "Mixed"bad(red) for "Poor"
Per-trial breakdown
- Show/Hide trials button: Toggle per-trial details
- Trial list: Displays each trial with:
- Trial number (#1, #2, etc.)
- Outcome label (translated): Hit, GO, Miss, False Alarm, Correct Reject, False Start
- Reaction time (ms) or "—" if not applicable
- Empty state: Shows "No trial data available" (translated) for old sessions without trial logs
- Event handling: Button click doesn't trigger card toggle (proper event propagation control)
Trial log storage
- Lightweight trial log: Each session record now includes
trialLogarray - Compact format: Stores trial number, outcome, and reaction time
- Normalized outcomes: Consistent outcome labels across all test types
🌐 Translation completeness
Lithuanian translation fixes
- Baseline info: "No baseline sessions recorded", "No baseline available for comparison"
- History messages: "No history yet", "No trial data available"
- Mode labels: Baseline, Training mode names now use translation system
- Quality issues: "Many false starts", "Few valid hits"
- Context tags: Sleep, Stress labels
- Reason label: "Reason:" prefix
- Trial outcomes: Complete translation of all outcome labels (hit, go, miss, false_alarm, correct_reject, false_start, unknown)
- Chip labels: FA (False Alarms), Flash err (Flash Error) abbreviations
- Flashes line: "Flashes", "Target", "Answer", "Error" in history details
Translation system improvements
- modeLabel(): Now uses translation system instead of hardcoded strings
- Badge text: Uses
t("trend.ok")andt("trend.invalid")instead of hardcoded text - Status messages: All status text now properly translated
🧭 Navigation enhancements
History preview → History navigation
- Clickable items: Home history preview items now navigate to History view
- Auto-expand: Clicked session card automatically expands with details visible
- Auto-scroll: Scrolls to the expanded card with proper topbar offset
- Smooth experience: Uses
data-session-idattributes for reliable matching
History back button improvements
- Scroll restoration: Back button now restores exact scroll position from previous view
- View restoration: Returns to the previous view (typically Home) at the scroll position where user left off
- State persistence: Uses
sessionStorageto remember navigation state - Smooth restoration: Uses
requestAnimationFramefor proper timing - Works like docs pages: Similar scroll restoration behavior as documentation pages
🎨 Styling improvements
Semantic chip variants
.chip.ok— Green border and background (good status).chip.warn— Yellow border and background (warning status).chip.bad— Red border and background (bad status).chip.na— Neutral styling with reduced opacity
Trial list styling
- Monospace font: Trial outcome labels use monospace for consistency
- Grid layout: Trial number, outcome, and reaction time in organized columns
- Subtle borders: Clean separation between trials
- Accessible: Proper spacing and contrast
Badge improvements
.badge.naopacity improved (0.7 → 0.8) for better visibility
🐛 Bug fixes
Badge rendering
- Fixed badge class format: Changed from
badge-ok/badge-badto space-separatedbadge ok/badge bad/badge na - Fixed badge text to use translation system instead of hardcoded "OK"
- Updated
clampBadgeClass()to recognize Lithuanian status text
Language switching
- Fixed history affordance text ("Click to view details") to update on language change
- Fixed trial toggle button text to update correctly without re-rendering entire history
- Fixed expanded state preservation: Changed from language-dependent timestamp matching to language-independent
data-session-idattribute matching- Go/No-Go and Divided Attention cards now correctly preserve expanded state when language changes
- All test types (Reaction Time, Go/No-Go, Divided Attention) now consistently preserve expanded state
Event handling
- Fixed trial toggle button to prevent card re-rendering when toggling trial list
- Proper event propagation control (stopImmediatePropagation) to prevent unintended card toggles
Onboarding
- Added language selector to onboarding overlay so users can change language before committing to Yes/No
- Language selector syncs with main language system and updates overlay text immediately
Documentation navigation
- Fixed canonical navigation order: How to Use → How the tests work → FAQ
- Updated navigation links to follow correct sequential order across all pages
- Added "How the tests work" links to About page in all language versions
🔐 Safety & compatibility
- No changes to:
- Test logic or scoring algorithms
- Baseline computation or thresholds
- History storage schema (trialLog is additive)
- Existing data or records (backward compatible with old sessions)
- Session modes or workflows
Backward compatibility is fully preserved.
All existing sessions and baselines remain valid and unchanged.
Old sessions without trialLog gracefully show "No trial data available".
🚫 Explicit non-goals
FCE v0.2.9 does not:
- Add new tests or assessment paradigms
- Modify scoring or interpretation logic
- Change data s...
FCE v0.2.8 — Language support, UX improvements & bug fixes
Release date: 2026-01-12
Status: Stable
Overview
FCE v0.2.8 is a language support, UX improvements, and bug fixes release.
This release adds Lithuanian language support, improves session panel usability, enhances navigation, and fixes several bugs affecting data integrity and UI consistency.
v0.2.8 maintains full backward compatibility and does not alter any test logic, scoring algorithms, or data storage.
🌐 Language support
Lithuanian (LT) language support
Complete translation coverage across the entire application:
- Core UI: All buttons, labels, messages, and session summaries
- Documentation: All documentation pages (About, Concept, Scope, Norwegian Context, How to Use, FAQ)
- Baseline-relative page: Visual explanation page with Lithuanian translations
- Error messages: All refusal codes and validation messages
- Session feedback: Trial text, progress indicators, and quality labels
Language selector updated to include LT option alongside EN and NO. The selector now appears consistently across all pages (index.html and all documentation pages), with proper synchronization between pages via shared localStorage key.
🎨 Session panel improvements
Fixed-height scrolling
- Session panel now maintains fixed height and never expands as trials increase
- Trial list uses internal scrolling with visual emphasis on the last ~5 trials
- Older trials fade but remain visible when scrolling
- Panel remains stable during and after sessions
Visual emphasis
- Latest trial: bold, full opacity
- 2nd–5th latest: gradually fading opacity (0.95 → 0.42)
- Older trials: dimmed (0.25 opacity) but accessible via scrolling
- Subtle fade overlay at top of list
Auto-scroll behavior
- Auto-scrolls to newest trial only when user is near bottom (within 40px)
- Prevents interrupting manual scrolling when user is reviewing older trials
- Works consistently during active sessions and after completion
📋 Home panel reordering
- History preview panel now appears between Session and Baseline panels
- Improved information hierarchy: Session → History → Baseline
- History preview automatically appears after sessions complete
- Smooth scroll on narrow screens (≤640px) when History panel becomes visible
🧭 Navigation enhancements
History back button improvements
- Desktop/tablet: Floating button in left gutter beside container (stays visible while scrolling)
- Mobile (≤640px): Inline position above content (no overlap)
- Button remains accessible even when history is cleared
- Robust navigation: falls back gracefully if browser history is unavailable
- Responsive breakpoints prevent overlap with content at any screen size
⚙️ Test type defaults
- Go/No-Go: Defaults to 20 trials when selected (recommended for stable results)
- Reaction Time: Defaults to 10 trials (unchanged)
- Divided Attention: Defaults to 10 trials (unchanged)
- Users can still manually adjust trial count after selection
This aligns with the baseline guidance that recommends ≥20 trials per session for Go/No-Go.
🐛 Bug fixes
Extra trial recording
- Fixed bug where rapid clicking could record 11 trials instead of 10
- Added guards to prevent recording more than
totalTrialstrials - Prevents race conditions in trial recording logic
Button state consistency
- Fixed issue where "Run Functional Check" button could become enabled after invalid sessions
updateBaselineInfo()now called in allendSession()return paths- Ensures button states are correctly updated after invalid sessions
Training mode summary display
- Fixed inconsistency where Divided Attention Training showed a summary
- Training mode now consistently shows no summary across all test types (Reaction Time, Go/No-Go, Divided Attention)
- Aligns with instruction text: "Training runs the same tasks without comparison"
Language selector consistency
- Language selector parity: LT option now appears consistently in HTML across all pages (index.html and all docs pages)
- Selector sync: Language selector dropdown now correctly reflects the applied language, including after fallback scenarios
- localStorage synchronization: Fixed mismatch where index.html used
fce_lang_v1while docs pages usedfce_lang- All pages now use
fce_langas the primary key - Language selection now persists correctly between index.html and docs pages
- Backward compatibility maintained with migration from
fce_lang_v1tofce_lang
- All pages now use
- Safety checks: Added non-conditional safety checks to ensure LT option exists even if markup drifts
🔐 Safety & compatibility
- No changes to:
- Test logic or scoring algorithms
- Baseline computation or thresholds
- History storage schema
- Existing data or records
- Session modes or workflows
Backward compatibility is fully preserved.
All existing sessions and baselines remain valid and unchanged.
🚫 Explicit non-goals
FCE v0.2.8 does not:
- Add new tests or assessment paradigms
- Modify scoring or interpretation logic
- Change data storage format
- Alter existing session data
- Change instrument behavior or workflows
This release focuses on language support, UX improvements, and bug fixes — not on the core instrument.
🔖 Versioning
- v0.2.8 is a minor release in the v0.2 series
- Builds on:
- v0.2.7 — Explanatory clarity & visual documentation
- Adds Lithuanian language support, session panel improvements, navigation enhancements, and critical bug fixes
Future work continues under v0.2.x and v0.3 planning.
FCE v0.2.7 — Explanatory clarity & visual documentation
Release date: 2026-01-11
Status: Stable
Overview
FCE v0.2.7 is an explanatory clarity and visual documentation release.
The core functional assessment instrument remains unchanged.
This release adds visual explanations, clarifies baseline-relative measurement concepts, and improves documentation discoverability through contextual navigation.
v0.2.7 maintains full backward compatibility and does not alter any test logic, scoring algorithms, or data storage.
📊 Visual explanation page
Baseline-relative measurement diagram (baseline-relative.html)
A new standalone page explaining baseline-relative measurement through a visual diagram:
- Pure HTML + CSS diagram — no canvas, no SVG, no JavaScript
- Clear time direction — "Earlier" → "Later" without arrows
- Explicit labels — what dots represent (baseline measurements vs single later measurement)
- Visual anchoring — normal range band visually derived from baseline
- Variability & recovery notes — interpretation guidance for pattern-based assessment
The diagram uses micro-labels to explain the relationship between baseline sessions, the normal range band, and later check sessions.
🧭 Documentation navigation improvements
Contextual links to visual explanation
- Concept page — added link after "Why baseline-relative measurement matters" section
- About page — added to "Start here" and "Quick links" sections (between Concept and Norwegian Context)
- Norwegian Context page — added inline link after baseline-relative reference
All links use restrained, contextual wording ("visual explanation") and position the page as a supporting explainer, not a core policy document.
✏️ Content improvements
Variability & recovery section
Added interpretation notes on the baseline-relative page:
- Short-term variability is normal part of human performance
- Interpretation focuses on patterns over time, not isolated points
- How performance returns toward baseline can be more informative than single deviation
Clarifies that this describes interpretation within a baseline-relative framework, not causes of change.
🎨 Diagram improvements
Micro-labels for comprehension
- Added time direction labels ("Earlier" / "Later" / "Tidligere" / "Senere")
- Explicit descriptions of what dots represent
- Middle label explains normal range band derivation
- Responsive layout: labels stack on mobile (max-width: 640px)
Visual anchoring
- Band positioning adjusted (18% left/right instead of 15%) to feel more anchored to baseline
- Band opacity increased slightly (0.10 instead of 0.08) for better visibility while remaining subtle
- Enhanced contrast for single later measurement dot (0.90 opacity instead of 0.85)
Mobile optimization
- 4th baseline dot hidden on narrow screens (max-width: 520px) to prevent crowding
- Micro-labels stack vertically on mobile for better readability
🔐 Safety & compatibility
- No changes to:
- Test logic or scoring algorithms
- Baseline computation or thresholds
- History storage schema
- Existing data or records
- User workflows or session modes
- Instrument functionality (
app.js)
Backward compatibility is fully preserved.
All existing sessions and baselines remain valid and unchanged.
🚫 Explicit non-goals
FCE v0.2.7 does not:
- Add new tests or assessment paradigms
- Modify scoring or interpretation logic
- Change data storage format
- Alter existing session data
- Change instrument behavior or workflows
- Add numbers, scales, or pass/fail indicators to diagrams
This release focuses on explanatory clarity and visual documentation — not on the core instrument.
🔖 Versioning
- v0.2.7 is a minor release in the v0.2 series
- Builds on:
- v0.2.6 — Documentation expansion & utilities
- Adds visual explanations and interpretation guidance
Future work continues under v0.2.x and v0.3 planning.
FCE v0.2.6 — Documentation & UX consolidation
Release date: 2026-01-11
Status: Stable
Overview
FCE v0.2.6 is a documentation expansion and utilities release.
The core functional assessment instrument remains unchanged.
This release expands documentation coverage with new pages, improves navigation consistency, and introduces reusable utilities for copy-ready content blocks.
v0.2.6 maintains full backward compatibility and does not alter any test logic, scoring algorithms, or data storage.
📚 New documentation pages
Concept page (concept.html)
A new standalone page explaining the core concepts of FCE:
- What FCE is and what problem it solves
- Why baseline-relative measurement matters
- How FCE works at a high level
- Integrity and refusal logic
- System properties and scope boundaries
Includes a copy-ready concept summary (EN/NO).
Scope & Limits page (scope.html)
A new standalone page providing explicit boundaries and interpretation rules:
- What FCE does and does not do (explicit non-goals)
- Interpretation rules (history-first, device consistency, context matters)
- Refusal and integrity logic
- Institutional use constraints
- Copy-ready disclaimer statements (EN/NO)
🧭 Navigation consolidation
Consistent menu navigation
- All documentation pages now follow the same menu order:
- About → Concept → Scope & Limits → Norwegian Context → How to Use → FAQ
- Menu items added to index.html to match documentation structure
- Added
aria-current="page"attributes for accessibility
Bottom navigation (docs-nav)
- Updated to follow canonical sequence across all pages
- Consistent left/right navigation flow
- "Open instrument" button remains in center position
I18N_PAGES mappings
- Fixed and standardized page title mappings for all documentation pages
- Corrected Norwegian translation for "Scope & Limits" (Omfang & begrensninger)
- Ensured consistent language switching across all pages
✏️ Content improvements
Updated descriptions
- "Functional execution signals": Added "response stability" to the list of measured aspects
- Execution vs intelligence: Added clarifying sentence separating FCE from intelligence/aptitude assessments
- Scope & limits: Updated concept.html section to point to scope.html instead of duplicating content
Translation fixes
- Fixed Norwegian translation: "Lære mer" → "Les mer" (Learn more)
- Removed obsolete "not present" notes from all documentation pages
🎯 Navigation enhancements
"Learn more" button
- Styled as topbar CTA (pill button with hover effects and arrow)
- Smart redirect: tracks last visited documentation page
- Redirects to last docs page, falls back to About page
- All documentation pages track
fce_last_docs_pagefor navigation continuity
Page tracking
- Dedicated
fce_last_docs_pagelocalStorage key for documentation pages - Separates documentation navigation from general page tracking
- Supports smart redirect for "Learn more" button
🔧 Documentation utilities
Shared copy-to-clipboard utility (docs.js)
- Centralized copy-to-clipboard functionality for all documentation pages
- Double-binding protection (
window.__FCE_COPY_BINDINGS__) - Per-element binding guard to prevent duplicate event listeners
- Supports modern Clipboard API with fallback for older browsers
Copy-ready blocks
- Standardized utility-header pattern (
.card.copy-block,.card-utility) - Copy buttons with tooltip, icon (📋), and label ("Copy"/"Kopier")
- Visual feedback: ✅ icon and "Copied"/"Kopiert" label on success
- Status text with auto-clear after 1.8 seconds
- Accessible:
aria-label,aria-live="polite"status spans
Copy-ready content blocks
- Concept page: "Short concept summary" (EN/NO)
- About page: "One-paragraph overview" (EN/NO)
- Scope page: "Short disclaimer" (EN/NO, already present)
All copy blocks use the same reusable pattern and can be easily added to future pages.
🎨 Styling updates
Copy button utility styles
.card-utility: Flex layout for title + action button.copy-btn: Pill button with hover/active states, tooltip support.copy-status: Status text with muted styling.is-copied: Temporary visual feedback state
Styles are reusable across all documentation pages.
🔐 Safety & compatibility
- No changes to:
- Test logic or scoring algorithms
- Baseline computation or thresholds
- History storage schema
- Existing data or records
- User workflows or session modes
- Instrument functionality (
app.js)
Backward compatibility is fully preserved.
All existing sessions and baselines remain valid and unchanged.
🚫 Explicit non-goals
FCE v0.2.6 does not:
- Add new tests or assessment paradigms
- Modify scoring or interpretation logic
- Change data storage format
- Alter existing session data
- Change instrument behavior or workflows
This release focuses on documentation, navigation, and utilities — not on the core instrument.
🔖 Versioning
- v0.2.6 is a minor release in the v0.2 series
- Builds on:
- v0.2.5 — Critical bug fixes
- Expands documentation coverage and improves maintainability
Future work continues under v0.2.x and v0.3 planning.
FCE v0.2.5 — Critical Bug Fixes
Release date: 2026-01-11
Status: Stable
Overview
FCE v0.2.5 is a critical bug fix release.
The core functional assessment instrument remains unchanged.
This release addresses data integrity issues and UI state consistency problems discovered in v0.2.4 — ensuring that sessions are recorded accurately and UI state reflects actual data availability.
v0.2.5 maintains full backward compatibility and does not alter any existing data or scoring logic.
🐛 Bug fixes in v0.2.5
🔒 Race condition in session completion
Fixed a critical race condition that could cause duplicate session records when users clicked rapidly during trial completion:
- Added guard in click handler to prevent processing clicks after all trials complete
- Added guard in
endSession()to prevent duplicate execution - Added guard in
nextTrial()to prevent processing after session ends
Impact: Prevents duplicate session entries in history and ensures accurate trial counts.
📊 Extra trial registration fix
Fixed an issue where rapid clicking could register 11 trials instead of the intended 10 (or any configured trial count):
- Click handler now correctly checks
trialIndex > totalTrialsbefore processing - Trial counting is now atomic and protected from race conditions
Impact: Ensures trial counts match configured session parameters exactly.
🎯 Training mode button state correction
Fixed an issue where the "Run Functional Check" button could appear enabled after completing a training session, even when no baseline existed:
- Added
updateBaselineInfo()call after non-divided training sessions complete - Ensures button state correctly reflects baseline availability
- Matches existing behavior for divided attention training mode
Impact: UI state now accurately reflects data availability across all session modes.
📚 Documentation updates
- Updated README.md to reflect v0.2.5 as latest release
- Added v0.2.5 section to roadmap.md
- Added v0.2.5 section to next-steps.md
- Completed v0.2.4 documentation content updates (about.html, how-to-use.html, faq.html, norwegian-context.html)
All documentation now accurately reflects the current state of the instrument.
🔐 Safety & compatibility
- No changes to:
- Test logic or scoring algorithms
- Baseline computation or thresholds
- History storage schema
- Existing data or records
- User workflows or session modes
Backward compatibility is fully preserved.
All existing sessions and baselines remain valid and unchanged.
🚫 Explicit non-goals
FCE v0.2.5 does not:
- Add new tests or features
- Modify scoring or interpretation
- Change data storage format
- Alter existing session data
- Introduce new UI features
This release is about correctness and reliability, not expansion.
🔖 Versioning
- v0.2.5 is a patch release in the v0.2 series
- Builds on:
- v0.2.4 — Refinement-only UX polish
- Fixes critical bugs while maintaining feature parity
Future work continues under v0.2.x and v0.3 planning.