Implements strict sequential artefact gating in wizardState.updateGating() that queries verify_stage_artefacts and computes maxValidStage.
Automatically locks invalid stepper steps and falls back to maxValidStage with a user-facing warning notice if intermediate files are deleted or moved externally.
Centralizes all stage transitions through wizardState.navigateToStage(targetStep) across app.js, targen.js, printtarg.js, chartread.js, and colprof.js.
Adds window focus listener (window.addEventListener('focus', ...)) so returning to ICCery immediately updates gating based on external disk state.
Adds #wizardNotification banner component in index.html with warning styles and dismiss controls in main.css.
Adds comprehensive backend unit tests for verify_stage_artefacts in src-tauri/src/commands.rs.
### Summary
- Implements strict sequential artefact gating in `wizardState.updateGating()` that queries `verify_stage_artefacts` and computes `maxValidStage`.
- Automatically locks invalid stepper steps and falls back to `maxValidStage` with a user-facing warning notice if intermediate files are deleted or moved externally.
- Centralizes all stage transitions through `wizardState.navigateToStage(targetStep)` across `app.js`, `targen.js`, `printtarg.js`, `chartread.js`, and `colprof.js`.
- Adds window focus listener (`window.addEventListener('focus', ...)`) so returning to ICCery immediately updates gating based on external disk state.
- Adds `#wizardNotification` banner component in `index.html` with warning styles and dismiss controls in `main.css`.
- Adds comprehensive backend unit tests for `verify_stage_artefacts` in `src-tauri/src/commands.rs`.
Resolves #151.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
wizardState.updateGating()that queriesverify_stage_artefactsand computesmaxValidStage.maxValidStagewith a user-facing warning notice if intermediate files are deleted or moved externally.wizardState.navigateToStage(targetStep)acrossapp.js,targen.js,printtarg.js,chartread.js, andcolprof.js.window.addEventListener('focus', ...)) so returning to ICCery immediately updates gating based on external disk state.#wizardNotificationbanner component inindex.htmlwith warning styles and dismiss controls inmain.css.verify_stage_artefactsinsrc-tauri/src/commands.rs.Resolves #151.