Skip to content

Releases: zwoomer/fce

FCE v0.4.0 — Interpretation layer, docs IA, validation-research

06 Apr 22:42

Choose a tag to compare

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 ms suffix) consistently in summaries and trend copy.
  • Status labels: Home preview and trend listings prefer stored statusText when 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 #instruction first; deep-link alignment with #instrument preserved 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 to docs/summary.md.

Docs bottom navigation (docs-nav)

  • Reading order: FAQ → Why this existsApplications / Use ContextsValidation / 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.html footers 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, and RELEASE_v0.3.1.mddocs/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.js script tag, docs-nav, footers across pages; validation-research.html expanded with full validation stance copy (EN/NO/LT).
  • Removed: svg-preview.html (depended on root SVG marks).

New files

  • menu-sections.js
  • applications.html
  • validation-research.html
  • RELEASE_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 development
  • docs/next-steps.md — v0.3.x closure, v0.4.0 shipped, v0.4.x next; docs/summary.md noted
  • docs/roadmap.md — v0.3.x complete, v0.4.0 shipped, v0.4.x planned; docs/summary.md noted

🔄 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

19 Jan 02:39

Choose a tag to compare

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:mm format (24-hour, locale-independent)
  • Timezone offset: New timezoneOffsetMin column 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.label and ui.noteLabel i18n 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.noteLabel key for localized note labels (EN: "Note", NO: "Merk", LT: "Pastaba")
  • Reason text: history.reasonText.R1_INVALID_EXECUTION, R2_INSUFFICIENT_DATA, R3_EXCESS_NOISE for 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 currentColor for 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 currentColor at ~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.html for 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 ...
Read more

FCE v0.3.2 — Unified navigation and Precision history polish

14 Jan 08:24

Choose a tag to compare

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 visibilitychange and beforeunload events
  • Restoration triggered by #restore-scroll hash 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.html explaining 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, Variability
  • history.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-long hidden by default (display: none), only shown on hover-capable devices

Files changed

  • index.html — Brand link structure, Learn More logic, scroll restoration
  • why.html — New documentation page
  • All canonical doc pages — Brand link, scroll storage/restoration
  • app.js — Precision history rendering, I18N keys
  • style.css — Topbar fixes, brand link hover, hamburger affordances, link styling
  • .nojekyll — Skip Jekyll processing for faster GitHub Pages deployment

🚀 Deployment

  • GitHub Pages optimization: Added .nojekyll file 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

14 Jan 07:06

Choose a tag to compare

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, startTrainingBtn click handlers to set mode-specific defaults
  • Removed forced trialCountInput.value = 15 from testType.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 #taskLegendSlot and decorateDividedLegend() helper

Files changed

  • app.js — Trial defaults, trend rendering, target placement, legend updates
  • index.html — Added #taskLegendSlot for Divided Attention legend
  • style.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

13 Jan 20:15

Choose a tag to compare

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:

  1. Reaction Time — Simple response speed and consistency
  2. Go / No-Go — Inhibitory control under time pressure
  3. Divided Attention — Execution quality under split attention
  4. 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 session
  • nextPrecisionTrial() — Generate and display next target
  • showPrecisionFeedback() — Display trial outcome feedback
  • endPrecisionSession() — Clean up and save session
  • showPrecisionPrep() / hidePrecisionPrep() — Prep overlay management
  • handlePrecisionFullscreenChange() — Fullscreen event handling
  • updatePrecisionNotice() — Fullscreen notice updates
  • handlePrecisionResize() — Window resize handling
  • runPrecisionResetOnce() — Reset coordination
  • isAnyFullscreenActive() — Fullscreen state detection
  • getBaselineSavedPrecision() — Baseline summary rendering
  • getCheckPrecision() — 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

13 Jan 00:49

Choose a tag to compare

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 localStorage flag (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.25
    • warn (yellow) if ≤ baseline SD × 1.75
    • bad (red) if > baseline SD × 1.75
    • na (neutral) if no baseline SD available
  • Trials chip:
    • ok if ≥ expected trials
    • warn if < expected trials
    • na if 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
  • Baseline/Training sessions:
    • Show neutral na badge with mode label
  • Invalid sessions:
    • Always show bad class with "Invalid" text

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 trialLog array
  • 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") and t("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-id attributes 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 sessionStorage to remember navigation state
  • Smooth restoration: Uses requestAnimationFrame for 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.na opacity improved (0.7 → 0.8) for better visibility

🐛 Bug fixes

Badge rendering

  • Fixed badge class format: Changed from badge-ok/badge-bad to space-separated badge 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-id attribute 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...
Read more

FCE v0.2.8 — Language support, UX improvements & bug fixes

12 Jan 05:55

Choose a tag to compare

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 totalTrials trials
  • 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 all endSession() 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_v1 while docs pages used fce_lang
    • All pages now use fce_lang as the primary key
    • Language selection now persists correctly between index.html and docs pages
    • Backward compatibility maintained with migration from fce_lang_v1 to fce_lang
  • 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

11 Jan 10:34

Choose a tag to compare

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

11 Jan 09:26

Choose a tag to compare

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_page for navigation continuity

Page tracking

  • Dedicated fce_last_docs_page localStorage 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

11 Jan 06:44

Choose a tag to compare

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 > totalTrials before 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.