Skip to content

feat: add a static Tab5 node home - #39

Merged
vincentkoc merged 4 commits into
mainfrom
feat/tab5-node-home
Sep 10, 2026
Merged

feat: add a static Tab5 node home#39
vincentkoc merged 4 commits into
mainfrom
feat/tab5-node-home

Conversation

@vincentkoc

@vincentkoc vincentkoc commented Sep 7, 2026

Copy link
Copy Markdown
Member

Problem

Tab5 disables the animated face, leaving a transient text state and an idle-dark display instead of a recognizable node home. A generic connecting label also cannot distinguish Wi-Fi, the node Gateway connection, and the operator session used by Talk.

Changes

  • Add a static, unframed OpenClaw home with board identity and independent Wi-Fi/Gateway/Talk facts. Bounded setup guidance and error details remain visible alongside those facts; Canvas and Diagnostics take precedence.
  • Embed the existing 180 x 180 transparent OpenClaw image as 129600 read-only ARGB8888 bytes using IDF EMBED_FILES, with source hashes, conversion provenance and the MIT notice. No runtime PNG decoding or image animation.
  • Add a trailing, zero-default display.idle_brightness field. Tab5 explicitly uses 18%; omitted/zero preserves other boards' idle sleep, and explicit off requests remain unchanged. The dimly lit Tab5 home consumes more idle power.
  • Preserve tap/hold dispatch, camera-indicator foreground/minimum brightness, and the latest facts across display-lock timeouts. Missing-session facts clear only on raw accepted connect results, not busy errors or ordinary disconnects.
  • Document the display policy and add focused UI, compatibility and lifecycle regressions.

Dependency

Originally stacked on #37 to reuse its firmware bundles and provenance. That dependency has landed; this PR now targets main.

Review Follow-up

Repair commit e9ccae6d7855552c2e44c1e5f1292faa6a9028ab restores the existing USB-console setup guidance to the bounded home detail region with neutral styling. Error styling, independent connection facts, overlays and idle brightness remain unchanged. The actual LVGL regression failed on the original head at setup visibility; all three repaired host-rendering profiles pass with ASan/UBSan. Focused independent reviews found no actionable P0-P2 findings.

Current head 63ed5129f25e3b373f6bb3c9988829681a3c1d7a preserves that signed repair and the landed main commits through an ancestry merge. The only conflict was the existing LVGL CI invocation, which is retained. Its complete tree equals main e18627b3103d99b533cd73987ec486a865926111 plus the original PR39-only delta and the setup repair; the explicit component-release guard is unchanged. New-head CI, attempt 1, passed all five builds. No new firmware was flashed for this follow-up.

Checks

  • Real LVGL 9.3.0 host rendering: Tab5, zero-default sleep and animated-board scenarios pass with ASan/UBSan. The rendered home and error region were visually inspected.
  • Error visibility and first-frame camera layering regressions failed before their fixes and pass after them.
  • Legacy positional audio/display initializers, workflow lint and git diff --check pass.
  • Independent pixel-level verification matches all 32400 source PNG pixels to the embedded bitmap; source/raw hashes, straight alpha, LVGL byte order and license notice were checked. Full-input native secret scans include the binary. Code/docs review is separate from the binary asset review.
  • All five builds passed for the original head c7c7a0c in its exact-head CI run: component test app, generic ESP32, BOX3, Tab5 P4 and Waveshare S3. This is historical proof, not the follow-up head's CI result.
  • Hosted Waveshare validation passed all 37 lifecycle cases, including home-connection-facts, and all three real LVGL scenarios. This closes the SDK-dependent lifecycle execution gap from local validation.
  • Downloaded and verified Tab5 artifact 10028371339: the ZIP matches GitHub's artifact digest, all 11 checksum entries and 10 manifest file records match, and all four flash images match their declared offsets. The other three firmware bundles were not downloaded.

Original Firmware Provenance

  • PR head: c7c7a0c8cb2178ceba41af03e4b3a8c10f3b6f8a.
  • Compiled test merge: 217368b27de05687d560407f51ee0576e67fddfa, with parents c3867131285ecd0f3ddc6c7c644b4d71282f5a84 (PR37 base) and the PR head. Its Git tree equals the PR head's tree.
  • Tab5 ZIP: 2893051 bytes; SHA-256 3ff7857d2a7f3cea1389d909291c110cd7f49c116b312de622129e69dc054c1a.
  • Flash image offsets: 0x2000, 0x8000, 0x10000, 0x810000; sizes and non-overlap verified within 16 MiB.
  • Actual IDF: 362a1776ec212788fda95f75b733bfdde3a0c394, build revision v5.5.5-648-g362a1776ec2; esptool 4.12.0. The SDK matches the prior PR37 hardware build.

Original Physical Display Check

  • The compiled 217368b27de05687d560407f51ee0576e67fddfa image was flashed and booted on an M5Stack Tab5 with ESP32-P4 revision 1.3. All four post-write flash digests were independently verified at 0x2000, 0x8000, 0x10000 and 0x810000.
  • Fresh external-camera captures of the idle home and return to home were visually checked: the intended OpenClaw image, OpenClaw Room Node identity and board name are readable, with Wi-Fi Offline, Gateway Pairing required and Talk Waiting for operator, without overlapping content.
  • The home remained visible after more than 13 seconds without input in both captures: measured intervals were 13.392 seconds and 13.359 seconds, each including 10 seconds without input followed by approximately 3 seconds of external-camera warmup. The firmware's 18% brightness request was verified; physical luminance and PWM were not instrumented.
  • One home-to-Diagnostics-open-to-close-to-home round trip passed without a display-lock timeout or retry. At the final checkpoint, Diagnostics was closed, Talk was idle and no errors were reported. This is a bounded display observation, not a clean full-GUI qualification or proof that the intermittent timeout is fixed.

Limits

Physical touch, Tab5 camera capture, network pairing, Canvas RPC, API/provider calls and end-to-end Talk remain unqualified on this Tab5 firmware. Physical luminance and PWM were not measured. The existing intermittent 100 ms display-lock timeout remains unresolved; the observed diagnostics close does not establish that it is repaired. No SDK/protocol/provider changes, version bump or release.

CI still inherits the moving release-v5.5 SDK lane. The recorded SDK is not the pristine v5.5.5 release tag. Artifact integrity, hosted builds and the bounded physical display check do not establish reproducibility, secure-update qualification or full hardware qualification.

@clawsweeper

clawsweeper Bot commented Sep 7, 2026

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added P2 Normal priority bug or improvement with limited blast radius. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Sep 7, 2026
@clawsweeper

clawsweeper Bot commented Sep 7, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed September 10, 2026, 12:39 PM ET / 16:39 UTC (Revision 9).

ClawSweeper review

What this changes

Adds a static room-node home with separate Wi-Fi, Gateway and Talk statuses, retained setup guidance, and optional idle brightness enabled at 18% on Tab5.

Merge readiness

Ready for maintainer review

The static home remains useful work absent from main. The earlier setup-guidance finding is repaired, the draft blocker is resolved, and no remaining actionable patch defect was found.

Priority: P2
Reviewed head: 63ed5129f25e3b373f6bb3c9988829681a3c1d7a

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused implementation with compatibility coverage, resolved prior feedback and no remaining concrete blocker.
Proof confidence 🌊 off-meta tidepool Not applicable: The MEMBER-authored PR is exempt from the external-contributor proof gate. Its body records bounded physical Tab5 home and Diagnostics observations on the original firmware; the setup repair has reported LVGL coverage, without a new physical flash.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Not applicable Not applicable: The MEMBER-authored PR is exempt from the external-contributor proof gate. Its body records bounded physical Tab5 home and Diagnostics observations on the original firmware; the setup repair has reported LVGL coverage, without a new physical flash.
Evidence reviewed 7 items Current main still lacks the requested home: Main renders transient text and a diagnostics hint, with zero idle brightness; the static home is introduced by this branch. The GitHub releases endpoint returned no releases.
Prior finding resolved: The current renderer retains ROOM_UI_SETUP details with neutral styling. The added regression covers both USB-console instructions, screen bounds, overlay precedence and restoration. GitHub's repair-commit patch independently confirms this change.
Compatibility and bounded validation: The display field is appended after ctx; omitted aggregate fields remain zero. Regression coverage checks legacy positional initialization, zero-default sleep, Tab5 brightness, independent connection facts, display-lock retries and overlays. Tests were inspected, not executed during this read-only review.
Findings None None.
Security None None.

How this fits together

The shared room-node runtime turns network and Talk events into display status. Board adapters supply the display and backlight controls, while Canvas and Diagnostics can cover the home screen.

flowchart TD
  A[Wi-Fi events] --> D[Room-node status facts]
  B[Gateway and Talk events] --> D
  C[Board display settings] --> E[Shared display controller]
  D --> E
  F[Canvas and Diagnostics] --> E
  E --> G[Home screen and backlight]
Loading

Before merge

None.

Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Production and test source delta Production C/header +288/-36; test code +516/-6 Production growth implements the stated home and status behavior, with larger focused regression coverage.
Embedded image 129,600 bytes added The static asset adds firmware size without a runtime PNG decoder or animated image allocation.

Technical review

Best possible solution:

Keep display policy in the shared controller, preserve zero-default sleep for existing boards, and retain independent status facts beneath overlays.

Do we have a high-confidence way to reproduce the issue?

Not applicable as a feature request; current-main source confirms the existing text-only, idle-dark behavior.

Is this the best way to solve the issue?

Yes. Extending the shared display controller avoids board-specific duplication, and the trailing zero-default field preserves existing board initialization.

AGENTS.md: not found in the target repository.

Codex review notes: model internal, reasoning medium; reviewed against e18627b3103d.

Labels

Label justifications:

  • P2: This is a bounded room-node display improvement with no demonstrated urgent runtime regression.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The MEMBER-authored PR is exempt from the external-contributor proof gate. Its body records bounded physical Tab5 home and Diagnostics observations on the original firmware; the setup repair has reported LVGL coverage, without a new physical flash.

Evidence

What I checked:

  • Current main still lacks the requested home: Main renders transient text and a diagnostics hint, with zero idle brightness; the static home is introduced by this branch. The GitHub releases endpoint returned no releases. (components/esp-openclaw-room-node/room_ui_controller.c:152, e18627b3103d)
  • Prior finding resolved: The current renderer retains ROOM_UI_SETUP details with neutral styling. The added regression covers both USB-console instructions, screen bounds, overlay precedence and restoration. GitHub's repair-commit patch independently confirms this change. (components/esp-openclaw-room-node/room_ui_controller.c:150, e9ccae6d7855)
  • Compatibility and bounded validation: The display field is appended after ctx; omitted aggregate fields remain zero. Regression coverage checks legacy positional initialization, zero-default sleep, Tab5 brightness, independent connection facts, display-lock retries and overlays. Tests were inspected, not executed during this read-only review. (components/esp-openclaw-room-node/tests/test_room_ui_controller.c:190, 63ed5129f25e)
  • Captured physical-display evidence: The supplied body, sourceRevision 8e9a839c151b4127effd3c38634fb065966679d9ea3459eb4041d2e909d9f780, records a flashed original firmware image, readable home statuses, 13.392-second and 13.359-second idle observations, and one Diagnostics round trip. It expressly reports no follow-up flash and no network or Talk qualification. The supplied scratch directory contained no media to inspect independently. (c7c7a0c8cb21)
  • Asset and workflow security scope: The embedded bitmap hash matches its provenance notice. The workflow delta adds the local LVGL test invocation without changing action references, permissions, SDK selection or release behavior. (components/esp-openclaw-room-node/assets/openclaw_lobster.argb8888, 63ed5129f25e)
  • Review readiness verified: Live GitHub metadata confirms the pinned head remains open, non-draft and cleanly mergeable against the pinned main. The prior review's draft-only action no longer applies. (63ed5129f25e)

Likely related people:

  • steipete: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (8 earlier review cycles)
  • reviewed 2026-09-07T17:27:36.510Z sha c7c7a0c :: needs changes before merge. :: [P2] Preserve setup instructions on the static home
  • reviewed 2026-09-07T17:42:14.470Z sha c7c7a0c :: needs changes before merge. :: [P2] Preserve setup instructions on the static home
  • reviewed 2026-09-07T17:52:35.788Z sha c7c7a0c :: needs changes before merge. :: [P2] Preserve setup instructions on the static home
  • reviewed 2026-09-10T09:57:18.030Z sha c7c7a0c :: blocked before merge. :: [P2] Preserve setup instructions on the static home
  • reviewed 2026-09-10T11:52:45.394Z sha e9ccae6 :: blocked before merge. :: none
  • reviewed 2026-09-10T12:07:10.234Z sha 63ed512 :: needs maintainer review before merge. :: none
  • reviewed 2026-09-10T12:48:24.239Z sha 63ed512 :: needs changes before merge. :: none
  • reviewed 2026-09-10T12:58:13.695Z sha 63ed512 :: needs changes before merge. :: none

Base automatically changed from ci/firmware-provenance to main September 10, 2026 09:52
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Sep 10, 2026
@vincentkoc
vincentkoc marked this pull request as ready for review September 10, 2026 16:31
@vincentkoc
vincentkoc merged commit 407dc9e into main Sep 10, 2026
14 checks passed
@vincentkoc
vincentkoc deleted the feat/tab5-node-home branch September 10, 2026 16:45
vincentkoc added a commit that referenced this pull request Sep 13, 2026
* commit 'f3f7719a9d2d75763c1645dcd758b61189c8e872':
  fix(ci): pin Tab5 to qualified ESP-IDF image
  fix(tab5): retain DMA buffers when flash encryption is active
  feat(tab5): add a static room-node home (#39)
  fix(talk): enforce safe SDK logging without global changes
  fix(ci): verify unpatched camera components against their lock
  fix(ui): retain setup guidance on the node home
  ci: publish traceable example firmware bundles (#37)
  ci: require explicit verified component releases (#38)
  docs: clarify source setup and hardware qualification
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant