[US-012] Modalità Rullo Continuo (Throttled OCR)
- Status: Draft
- Author: Business Analyst
- Created: 2026-07-28
1. Description
As an operator,
I want to activate a continuous OCR-and-translate mode with a second hotkey that updates the overlay at a configurable rate,
so that I can follow dynamically changing screens (e.g. scrolling AS/400 output) without repeatedly pressing the trigger hotkey.
2. Acceptance Criteria (DoD)
3. Architectural Guardrails
- Modules involved:
Aurora.Core (state machine IContinuousModeController, sampling frequency setting), Aurora.UI (hotkey binding for HotkeyRullo, state indicator), Aurora.App (DI wiring, coordinates OCR → Translation → UI pipeline on each tick)
- Related ADRs: ADR-006 (module contracts — continuous mode state lives in Core), ADR-007 (composition root —
Aurora.App drives the polling loop)
- Isolation constraints:
- The continuous mode state (active/inactive) and the throttle timer live in
Aurora.Core under IContinuousModeController — not in Aurora.UI or Aurora.OCR.
Aurora.App is the only place where the pipeline OCR → Translation → publish overlay event is assembled; individual modules do not call each other.
- The sampling frequency is read from
IAppSettings — never hardcoded. It must be configurable at runtime without restart (reads the value on each tick).
Aurora.UI raises a Core event on HotkeyRullo press; Aurora.Core toggles state and adjusts the timer.
4. Expected Test Cases
[US-012] Modalità Rullo Continuo (Throttled OCR)
1. Description
As an operator,
I want to activate a continuous OCR-and-translate mode with a second hotkey that updates the overlay at a configurable rate,
so that I can follow dynamically changing screens (e.g. scrolling AS/400 output) without repeatedly pressing the trigger hotkey.
2. Acceptance Criteria (DoD)
HotkeyRullohotkey (fromIAppSettings) toggles continuous mode: first press activates, second press deactivates.IAppSettings(default: every 500 ms).Aurora.Coreowns the continuous-mode state machine;Aurora.UIexposes the toggle via the hotkey and reflects state — it does not own the state.3. Architectural Guardrails
Aurora.Core(state machineIContinuousModeController, sampling frequency setting),Aurora.UI(hotkey binding forHotkeyRullo, state indicator),Aurora.App(DI wiring, coordinates OCR → Translation → UI pipeline on each tick)Aurora.Appdrives the polling loop)Aurora.CoreunderIContinuousModeController— not inAurora.UIorAurora.OCR.Aurora.Appis the only place where the pipelineOCR → Translation → publish overlay eventis assembled; individual modules do not call each other.IAppSettings— never hardcoded. It must be configurable at runtime without restart (reads the value on each tick).Aurora.UIraises a Core event onHotkeyRullopress;Aurora.Coretoggles state and adjusts the timer.4. Expected Test Cases
IContinuousModeController.Toggle()alternates betweenActiveandInactivestates on successive calls.CaptureTickevent at the configured interval; no new tick fires while the previous one is being processed.IContinuousModeController.Stop()deactivates continuous mode and stops the timer.HotkeyRullotoggles the tray icon between "active" and "normal" state variants.Aurora.UIdoes not referenceAurora.OCR,Aurora.Translation, orAurora.Admin(NetArchTest).Aurora.Core, not inAurora.UIorAurora.OCR(NetArchTest).