Skip to content

Changelog ​

All notable changes to HealthGuard will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased] ​

2026-10-27: Scoped Android / Flutter device identity (SDK source 0.3.0) ​

Flutter source 0.3.0 generates a native SHA-256 pseudonym from Android ID with app/project scope, separately from installation/session IDs. Errors and failed requests carry status, source, scope, model/OS and App/SDK releases. Unavailable IDs never use random/model substitutes. The Dashboard separates stable identities, installation IDs and unidentified records, with shortcode/model search, paging and cross-version history. Alerts use the triggering event's code and release; an embeddable App debug page shows the same code. Historical identities are never backfilled or merged by model. Android 5–7, factory reset, user/signing/app-scope changes and legacy OS-upgrade limits are explicit; IDs are not permanently unique. Collector/Dashboard and a consuming App have passed release verification. The SDK remains pinned Git source, without pub.dev publication. Each self-hosted deployment still requires its own upgrade; target-tablet reinstall/data-clear and actual inbox checks remain pending.

2026-10-26: Separate occurrence, receipt and mail clocks (pending deployment) ​

Client occurrence, server receipt, notification creation, delivery-processing start and SMTP acceptance are shown separately. Event details and AI handoff show signed clock differences without concluding replay, transport delay, clock skew or a fresh current-release failure. Receipt is recorded by the server, cannot be overridden by clients, and survives replay/restart. Missing historical times are not inferred; test messages have no occurrence time. Requires Collector and Dashboard updates with a nullable additive receipt column, without SDK/app releases. Inbox acceptance remains separate.

2026-10-26: Issue IDs in alert subjects (pending deployment) ​

  • Automatic alert subjects use [HealthGuard][<full Issue ID>] <alert type> · <project name> so errors can be distinguished near the start of inbox rows.
  • New-issue, regression and threshold alerts retain the same complete issue ID across occurrences; event IDs still identify individual occurrences.
  • Requires a Collector update only. SDKs and consuming apps need no release. Queued, historical and test subjects retain their saved content; deployment and inbox acceptance are separate.

Confirmed manual archive with notes ​

Retained lifecycle and PR write APIs also enforce project ownership, preventing legacy calls from bypassing archive permissions.

Archive opens a confirmation dialog with an optional note (up to 4000 characters). Confirm archives directly without fixed or verified release prerequisites; Cancel or Escape makes no request, and failures retain the note for retry. Archived issues show the note and timestamp and can be restored manually; the previous note is retained after restoring. Archiving does not prove a fix. New reports remain counted while manual archives stay archived. Use Copy for AI with your external development tool; the Dashboard no longer shows start-repair, version verification, PR editing or repair-stage controls. Internal IDs and fingerprints remain hidden.

Filter chevrons are inset 12px with 36px reserved for text. Selectors and date fields have matching heights and visible keyboard focus. Search now sits beside the Issues heading; the duplicate group total is omitted while repair-stage counts remain. Search and filter behavior is unchanged.

Compact project detail controls ​

The duplicate project heading is removed from the content area. Actions and filters share a wrapping toolbar; metric labels and smaller values appear inline in one horizontal row. Compact underline repair filters attach directly to the Issue list panel. Narrow screens can scroll the metrics row, and full error text remains visible. HTTP event cards also wrap within narrow detail columns to prevent page overflow.

Right-aligned issue metadata ​

Issue rows keep type and event count on the left and group status, platforms and timestamps on the right. Full error titles still wrap separately; the metadata group wraps within narrow rows and mobile screens.

2026-10-15: Cloudflare deployment configuration parsing ​

  • Deployment ignores placeholder variables in credential documentation and reads actual account/API/DNS values, including Markdown formatting.
  • Parser regression tests cover the failure; explicitly supplied environment variables retain priority.

Full request URLs in HTTP titles ​

Opening a historical HTTP issue enriches its detail title with the newest matching event’s recorded absolute request URL, including non-sensitive query parameters, while retaining the full error. The selected row and AI report use the same title. Long text wraps; absent or mismatched evidence keeps the historical summary without guessing an origin. Grouping, repair and archive state are unchanged.

2026-10-15: Archive feedback and readable details ​

  • Archiving still requires verified repair. Clicking before verification explains the requirement; archive/reopen success and failed requests show visible feedback.
  • Action buttons share a height. Lists and details hide fingerprints and internal issue IDs; grouping and AI handoff retain necessary identifiers internally.

2026-10-15: HTTP failure identity and original Flutter IO evidence (unreleased) ​

  • New HTTP issues distinguish target origin, environment and actual failure phase, including connection/send/receive timeouts and explicit DNS failures. Query values, request IDs and durations do not fragment groups.
  • Alerts lead with the triggering occurrence and label historical summaries separately. Dashboard and AI reports retain original Dio types, request IDs and actual probe sample times/cache flags.
  • Late events and startup backfill cannot regress the latest summary or release. Historical IDs and repair links remain intact; mixed historical issues are not automatically split, and new events use v2 groups.
  • Flutter source 0.2.1 adds an optional IO adapter for original connection acquisition and response-header wait, frozen failure evidence and late-connection aborts, retaining pooling, proxies and certificate checks.
  • Original DNS/TCP/TLS subphases remain unavailable; independent probes never substitute for original timings. Not published to pub.dev. Server/site deployment, application packaging and real-device acceptance are separate.

2026-10-15: Browse before opening issue details ​

  • Until an issue is selected, details are hidden and a full-width list shows one issue per row; error messages display in full with wrapping, and metadata appears in a separate row below.
  • Select a card to open details; Close details restores the full list. Filters and project changes clear selection, and late responses cannot reopen a closed detail.
  • Mobile uses one column and scrolls to selected details; closing restores card focus. No API, storage or SDK changes.

2026-10-15: Flutter SDK 0.2.0 unifies detailed diagnostics (unreleased source) ​

  • The SDK owns request IDs, snapshots, network events, concurrency evidence and bounded phase probes; consuming apps can remove duplicate implementations.
  • Basic and detailed Android collection share one observer. Active probes require explicit HTTPS/443 allowlists and safe health paths and remain disabled by default.
  • Intentional cancellation is not an alert. Original errors, failure/sampling times and replay identity remain preserved.
  • Thirty Flutter SDK tests and static analysis pass. Source commit b9ad8bea6afcee848c99e67a8f141faa17a52fd3; pub.dev publication, Collector/Dashboard deployment, consuming-app releases and device acceptance are separate steps.
  • The logo, HealthGuard title and account subtitle share a home link; click from a project detail to return to the project list.
  • Supports keyboard Tab/Enter, visible focus and subdirectory deployments. Logged-out visitors remain at login; no SDK or client app upgrade is required.
  • Login, project list and project detail headers now display the same HealthGuard logo as the website, with a browser tab icon.
  • Asset URLs support subdirectory deployments; loading and alignment are verified at desktop/mobile widths. This visual update requires no SDK or client app upgrade.

2026-10-15: Rename projects ​

  • Both project sidebars expose Rename to the right of each title; long titles truncate with an ellipsis and show their full text on hover. Chinese/English names, cancellation and failed-save retry are supported.
  • Owners may change the display name (1–100 trimmed characters). App keys, SDK configuration, event/issue history and notification rules remain intact.
  • Adds PATCH /api/apps/:appKey; no database migration or client SDK upgrade is required. Source verification and deployment are tracked separately.

2026-10-14: Flutter SDK 0.1.1 integration compatibility (source update) ​

  • Preserve original failure time, environment, device metadata, stable fingerprints, request IDs and bounded diagnostic evidence.
  • Explicitly approved scalar context is supported; credentials and nested business payloads remain filtered. Document legacy queue and installation-ID migration.
  • Seven Flutter tests pass with 83.3% SDK line coverage and passing Dart analysis. Pin reviewed Git commit 1e95665f978f4347120c969a9771bbc64531cdca; pub.dev publication and Collector/Dashboard deployment are separate and remain pending.
  • Source documentation is synchronized; website production state requires separate verification.

2026-10-14: Reusable network diagnostics (source complete, unreleased) ​

  • Web, mini-program and uni-app SDKs are prepared at 0.4.0, with shared failure categories, field allowlists, per-origin throttling, durable failed-request replay and collector acknowledgement checks.
  • Added standalone Flutter/Dio SDK source 0.1.0 and an Android network-state plugin, preserving native exception reporting and bounded persistent queues.
  • Collector replay is idempotent by event ID. Dashboard, AI reports and alert emails show network evidence from the triggering event.
  • Unsupported network state and DNS/connect/TTFB phases stay unavailable. Generic Failed to fetch remains an unknown cause and does not establish DNS, TLS or CORS failure.
  • Validation: 183 TypeScript and 4 Flutter tests passed, with builds and static checks passing. Two service-level database tests were skipped because their environment was not configured.

Release status: This entry corresponds to main-project commit 38cc9e2. npm/pub.dev publication, server deployment, consuming-app migration and device network-switch acceptance are pending. A source version bump is not a release. Flutter can currently be consumed from Git/path; the new JS option requires source containing this implementation, not an older default registry install.

See Network diagnostics and Flutter SDK.

[0.3.0] - 2026-06-18 ​

Added ​

  • New @health-guard/repair-agent package: scans project SDK config, logs in to HealthGuard, pulls issue list/details, and supports local source keyword matching.

Fixed ​

  • SDK transport failures now use backoff retry (transportFailureRetryDelayMs, default 30s); failed events are requeued and manual flush() forces a retry.
  • sdk-uniapp and sdk-miniprogram now align with sdk-web backoff retry behavior.

Changed ​

  • Public npm packages bumped to 0.3.0.

[0.2.0] - 2026-06-09 ​

Added ​

  • Manual Repair Tasks (Repair Task Phase 1)
    • Create repair tasks from Issues with agent selection (Hermes / Codex / Claude Code / Manual)
    • Task status flow: pending → claimed → running → pr_created → closed
    • Dashboard repair task list, detail page, and cancel action
    • PostgreSQL persistence for repair tasks and progress notes
    • Separate authentication APIs and agent APIs
  • Issue management and filtering
  • Shortened Issue ID display + copy-to-AI button
  • Version number in Dashboard sidebar
  • Alipay mini-program monitoring context
  • Missing CSS styles and i18n for issue detail page

Fixed ​

  • Prevent infinite recursion loop when SDK transport fails
  • Remove unused reactive import

Docs ​

  • Repair task workflow design document (Chinese & English)
  • Repair task Phase 1 implementation plan

[0.1.0] - 2026-05-01 ​

Added ​

  • H5/Web SDK (@health-guard/sdk-web)
    • Automatic JavaScript error capture
    • HTTP request failure monitoring (fetch + XHR)
    • Promise rejection capture
    • Performance metrics collection
  • WeChat Mini Program SDK (@health-guard/sdk-miniprogram)
    • Runtime error capture
    • Promise rejection capture
    • wx.request monitoring
    • Page lifecycle breadcrumbs
  • uni-app Multi-platform SDK (@health-guard/sdk-uniapp)
    • Supports H5, WeChat, Alipay, Douyin, App platforms
    • Automatic runtime environment detection
    • Device info and page URL detection
  • Dashboard Frontend (Vue 3 + Vite)
    • Project management (create, view, SDK integration guide)
    • Overview page (event stats, error rate, failed requests)
    • Issue list (aggregation, platform filter, time filter)
    • Issue detail (stack trace, breadcrumbs, event timeline)
    • Auto-detect language with manual override
  • Server Backend (Node.js + Fastify)
    • Batch event ingestion API
    • Issue aggregation and pagination
    • Local authentication (register/login, session token)
    • Per-user project isolation
  • PostgreSQL Persistence
    • Connection pooling (pg.Pool)
    • Batch INSERT optimization
    • Timestamp indexing
    • Automatic data retention cleanup
  • Docker One-Click Deploy
    • docker-compose.yml (PostgreSQL + Server + Dashboard)
    • Health check endpoint
    • Deployment guide
  • Security Hardening
    • Authentication on all query endpoints
    • nanoid ID generation
    • Graceful shutdown (SIGTERM/SIGINT)
    • Rate limiting and CORS

Docs ​

  • README (Chinese & English)
  • Operator guide
  • AI CLI operations manual

Released under the MIT License.