- Add fieldLibrary metadata to HTML template packages, including form fields, custom time formats, multi-select options, and anesthesia options.
- Restore imported template field metadata into local compatibility caches and the backend field library API when available.
- Preserve legacy JSON template import compatibility while keeping user-facing exports on HTML packages.
- Prevent template field saves from overwriting stored multi-select and anesthesia options with empty values.
- Update README, AGENTS, feature, requirement, design, module, progress, component, and testing docs for complete template export behavior.
- Extend template export tests to cover field library metadata round-tripping.
- Track report editor AI regions in React state instead of only scanning contentEditable DOM during render.
- Observe editor AI region mutations and refresh the AI writing target dropdown without requiring page navigation or refresh.
- Select newly inserted AI regions immediately after insertion and keep a live DOM fallback for generation.
- Harden AI region insertion so it still appends the region if execCommand has no active editor selection.
- Escape AI region names before injecting template HTML and add an accessible label for the insert button.
- Add Playwright coverage for inserting an AI region and seeing it immediately in the AI writing dropdown.
- Update report editor, feature, progress, testing, and AGENTS documentation for AI region synchronization.
- Add template export utilities for standard JSON packages and standalone HTML template packages.
- Make the top-level JSON export use the standard surclaw template package format so it can be imported again.
- Add an HTML template package export that embeds A4/print styling and template metadata for visual preview and round-trip import.
- Extend template import to accept both JSON and HTML template package files while keeping old raw template JSON compatible.
- Add tests for package creation, HTML round-trip import, legacy JSON import, and file name cleanup.
- Update template management, feature, progress, testing, and AGENTS documentation for the new export formats.
- Update TemplateManage save flows to use the current in-memory template list instead of stale localStorage as the source of truth.
- Merge current templates back into the compatibility cache so newly created backend templates are not dropped on content save.
- Add an accessible label for the new-template button to support reliable E2E coverage.
- Add template list merge unit tests covering stale-cache replacement and newly created templates.
- Add Playwright coverage for creating a template, saving template content, and confirming it remains visible and persisted.
- Update feature, progress, testing, and AGENTS documentation for the template management fix.
- Add a self-signed HTTPS Nginx entrypoint on Docker port 4443 so browser microphone APIs can run in demo mode.
- Keep the existing HTTP port 4002 unchanged while exposing container port 443 and generating the demo certificate during image build.
- Update CORS defaults and Compose environment for the HTTPS frontend origin.
- Clarify the report editor microphone message with localhost, HTTPS, and browser trusted-origin demo options.
- Document the browser HTTP microphone limitation, HTTPS demo URL, and Chrome/Edge insecure-origin workaround in README and docs.
- Allow draft reports to be saved without patient name or hospital ID while keeping completed reports strictly validated.
- Preserve completed-report identity validation when updating existing reports by checking merged old and new values.
- Show real API save errors in the report editor and send expired sessions back to login instead of reporting a generic backend outage.
- Guard speech startup for missing getUserMedia or AudioContext support and explain localhost/HTTPS microphone requirements.
- Add report schema tests covering draft identity fields and completed-report validation.
- Update AGENTS and docs for report editor behavior, feature status, progress, and testing coverage.
- Align the backend seeded default surgery template with the report editor's default report content.
- Add backend demo defaults for the default template, Kimi provider, and Xunfei speech proxy configuration.
- Change system reset into a super-admin demo mode factory reset that clears reports, audit logs, files, custom templates, and non-default users.
- Keep only the default admin, manager, doctor, and default surgery template after demo reset.
- Replace the old local-only reset all data button with a two-confirmation backend reset flow.
- Add tests covering demo default alignment and database-backed demo reset behavior.
- Update docs to describe demo mode reset semantics and production credential cautions.
- Remove the super-admin one-time migration from browser local settings into backend AI and speech settings.
- Delete the migration-specific SystemSettings unit test that no longer matches the desired behavior.
- Restore feature, module, testing, and progress docs so settings secrets are documented as backend-managed only.
- Add a super-admin-only settings merge that copies legacy local AI provider keys into an empty backend settings record.
- Add matching migration for legacy Xunfei APPID, APIKey, and APISecret without overwriting existing backend secrets.
- Cover the migration and secret-preservation behavior with SystemSettings unit tests.
- Update feature, module, progress, and testing docs for the settings migration behavior.
- Add Auth Context route role guards so doctors cannot directly enter template management, user management, or audit logs.
- Add Audit Logs page, sidebar entry, frontend audit API client, and API client test.
- Add backend audit log query endpoint with super/admin visibility rules and query filtering.
- Extend PostgreSQL integration tests to cover audit log query permissions.
- Move Playwright E2E away from localStorage seed data to real backend API login and seed helpers.
- Add E2E coverage for route guards and audit log visibility.
- Run Playwright backend on port 3100 and proxy Vite API requests there to avoid local port conflicts.
- Make server:dev use the compiled NestJS server path, avoiding tsx parameter-property injection issues.
- Update README, AGENTS, feature, testing, security, deployment, progress, API, backendization, and auth/user module docs.