Skip to content

Store each board's report of itself from its heartbeat - #20

Merged
IbraTech04 merged 2 commits into
masterfrom
claude/awesome-turing-bdgpfd
Sep 25, 2026
Merged

IbraTech04 merged 2 commits into
masterfrom
claude/awesome-turing-bdgpfd

Conversation

@IbraTech04

@IbraTech04 IbraTech04 commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

From agent 0.3.0 (LensBridge/agent#3), every heartbeat carries telemetry.board, the board's own report of itself:

  • the board app version
  • the installed content, its time zone and how many days are left
  • software waiting for the nightly install window, whether automatic updates are on, and when the last update check ran and why it failed
  • the outcome of the last agent self-update
  • whether the board's clock can be believed
  • which offline routes it accepts (service port, USB)
  • the last content sync error

The backend keeps the latest report per device and returns it to the admin portal:

  • New BoardReport record, stored through BoardReportConverter as JSON text in devices.board_report, plus board_report_at. The V3 migration exists for both Postgres and SQLite.
  • HeartbeatService stores the report when the heartbeat has one. A heartbeat without one keeps the last report.
  • DeviceSummary returns it as board and boardReportAt.
  • Unknown fields in a report are ignored, so a newer agent never breaks heartbeat parsing.

Test plan

  • mvn test: 602 pass, including HeartbeatServiceTest cases. One parses a full agent heartbeat JSON (with the new fields and an unknown field) and round-trips the stored report; one checks that a heartbeat without a report keeps the last one.
  • Booted the jar against a fresh SQLite database: Flyway applied V1 to V3, and Hibernate's validate accepted the schema.

Portal side: LensBridge/LensBridgeFrontend#10.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VUxfdFFUkL7SmAEUvUzspy

Boards (agent 0.3.0 on) send `telemetry.board` with every heartbeat: the
board app they run, the content they show and how many days are left,
software waiting for the nightly install window, the outcome of the last
agent self-update, and whether their clock can be believed. The backend
keeps the latest one per device (devices.board_report, JSON text, plus
board_report_at; V3 for Postgres and SQLite) and returns it in the device
summaries the admin portal lists, as `board` and `boardReportAt`.

A heartbeat without a report keeps the last one; unknown fields in a
report are ignored, so a newer agent never breaks heartbeat parsing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VUxfdFFUkL7SmAEUvUzspy
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

The agent now reports whether it follows the release channels, when it
last checked and why that failed; which offline routes the board accepts
(service port, USB); and its content's time zone, so the portal can work
out days left again from lastDay when a report is old.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VUxfdFFUkL7SmAEUvUzspy
@IbraTech04
IbraTech04 merged commit 1299d28 into master Sep 25, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants