Settings - Delete Account -> Self Deactivate:
- backend: add POST /api/auth/self-deactivate (immediate, no email link)
Guards against last-admin and hidden super-admin. Revokes FCM tokens,
sends notification email, logs activity
- auth.js route: add /self-deactivate route
- auth_repository.dart: add requestSelfDeactivation()
- auth_provider.dart: add requestSelfDeactivation() (calls logout() after)
- settings_screen.dart: 2-step _handleDeactivateAccount: Step 1 confirm,
Step 2 type DEACTIVATE. Danger zone card updated to deactivation theme
Report screen - compliance filter button label overflow:
- Wrap label Text in Flexible to ellipsize instead of clip
Settings - Edit Schedule Dates modal button overflow:
- Column layout on narrow screens so buttons are never squished
Document screen - Open With not working on Windows:
- Use openwith.exe (Windows 8+) with fallback to rundll32 OpenAs_RunDLL
Windows sidebar - Archive tab:
- Move Archives from ACCOUNT group to OVERVIEW group
- Fix audit trail AppPagination infinite width layout crash on Windows and Android
- Fix Android audit trail header 41px horizontal overflow with responsive layout
- Add missing user and history table joins to dashboard and user activity count queries
- Implement StyledFolderIcon matching modern tabbed folder design with internal JHS/SHS chips
- Align bulk operations bar margin to match list and grid widget containers
- Make student screen Add Student button elevated with emerald gradient and shadow
- Move edit student modal close button from leading to actions bar
- Polish Edit Details and Edit Enrollment actions in student profile modal
- Remove recent activities and user history from dashboard; relocate to dedicated History tab
- Fix Document Breakdown overflow and rebalance Bento KPI grid layout
- Fix Android overflow on student profile Edit Details button
- Simplify grid view cards in documents and archives screens with minimal folder styling
- Fix transparency board filter contrast and export button styling in reports
- Default auto-update enrollment to off, add grace period input, and fix settings danger zone
- Exclude hidden super administrator from dashboard active users count
- Rename UPDATE PASSWORD button to UPDATE in change password modal
- Use single-word labels and uniform dimensions for user profile action buttons
- Fix requirements strip to use missingRequirementsProvider (per-student) instead
of global documentRequirementsProvider, so Completed/Archived/Needed states
are accurately reflected for each student
- Fix dropdown 'Select Document Type' status labels (was always [Completed]);
now correctly shows [Needed], [Archived], or [Completed] using ID-based lookup
from missingRequirementsProvider
- Add collapsible/expandable requirements strip with AnimatedCrossFade and
chevron toggle; shows mandatory-needed badge count in collapsed header
- Split needed chips into Mandatory (red) and Optional (orange) sections;
add Archived (blueGrey) section distinct from Completed (green)
- Add JHS/SHS category tag on each chip (muted grey badge)
- Simplify chip styling to neutral background/border; color only on status icon
- Remove tap-to-assign chip interaction; chips are now display-only
- Clean up unused _isRequirementMissing, _isRequirementArchived, and
_assignRequirementToEntry methods
- Update AGENTS.md: move completed Document Screen tasks into commented section
- Remove INFERRED_CONNECT_MS: tunnelConnected is now only set true when
cloudflared logs 'Registered tunnel connection' — never inferred from
process uptime.
- Add four independent health dimensions:
cloudflaredRunning — child process alive/exited
tunnelConnected — actual cloudflared connection registered
originHealthy — http://127.0.0.1:18484/ reachable (polled every 20s)
publicEndpointStatus — diagnostic only, never triggers restart
- Add checkOriginHealth(): polls 127.0.0.1:18484 with explicit IPv4
(family:4) to avoid Windows localhost/IPv6 ambiguity.
- Restart cloudflared ONLY on process exit. A public 502/503/504/530
is never a restart trigger.
- Add 90s startup connection timeout: logs 'degraded' warning with full
diagnostics if no connection registered, but does NOT kill the process.
- Improve structured [Tunnel] logging: clearly distinguishes origin,
process, connection, and public endpoint health in every log line.
- Token: never log the full value; log first 6 chars only as proof of
configuration. Fail fast with clear error if token is missing.
- Duplicate process guard: explicit log when skipping a second spawn.
- start_tunnel.bat: add prominent warning not to run while backend is
active; suppress token echo; add --no-autoupdate flag.