You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit b79bf23
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: ROADMAP.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -62,6 +62,7 @@ Phase 1 software progress is also underway:
62
62
63
63
-[x] System reports the firmware/commit, reset reason, uptime, panel, heap, storage capacity, current OTA state, and persistent last OTA result.
64
64
-[x] Notes and ride summaries use recoverable backup replacement; rides publish only after durable sync, and health logs repair incomplete final rows.
65
+
-[x] Notes loads complete files up to 65,535 bytes, replacing a silent 2,047-byte prefix. Recovery/read/close errors, oversized files and NUL data disable Save; byte-length and SD checks run before storage changes. Its launcher leave hook clears editor ownership. Four preceding-source controls reproduce full-note truncation; 36 native file/fault cases and five real LVGL cases pass, including maximum ASCII/UTF-8 notes and 25 reopens without retained resources in the unchanged 96 KiB pool. Linux and Windows CI retain separate source-bound evidence. Physical SD/panel and power cuts remain open.
65
66
-[x] Shared CSV tail recovery now scans backwards in 512-byte blocks. Eight previous-source controls exceed stdio seek budgets; a 64 KiB partial tail drops from 65,538 seeks to 130 with the same retained prefix. All 32 native byte/boundary/fault cases, original storage checks and five MQTT/HTTP logging cases pass with closed modeled handles. The unflashed firmware builds with unchanged configuration. Linux CI retains source hashes and compilation/result logs; physical SD timing and power cuts remain open.
66
67
-[x] Built-in SD paths, timestamps, units, 8.3-safe collision names, `.TMP`, and `.BAK` behavior are documented.
67
68
-[x] Persisted brightness choices, a dimmed two-minute screen, and configurable 5/10/30-minute or Never screen-off behavior are implemented.
Copy file name to clipboardExpand all lines: docs/architecture.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -83,6 +83,8 @@ The serial log viewer loads at most 512 validated rows and closes the file befor
83
83
84
84
CSV tail repair uses a 512-byte scratch buffer and scans backwards by blocks before truncating at the most recent LF. HTTP, MQTT and Ring health logging share this helper with serialized writers. A seek/read failure prevents truncation; later truncate/sync/close failures preserve the first error. Native checks verify retained bytes and reduced stdio call counts, while physical FAT/SD latency and power-loss durability remain device checks.
85
85
86
+
Notes uses a temporary PSRAM buffer to load an entire file of up to 65,535 bytes and frees that buffer after LVGL copies the text. It applies the editor's character limit after loading, using LVGL's bulk text path. Recovery/read/close failures, oversized files and NUL data disable editing and Save; the save callback rechecks ownership, SD availability and byte length before changing paths. The launcher leave hook clears its editor pointer and permission before content deletion. The existing replacement helper still syncs/closes `NOTE.TMP`, retains the previous complete generation in `NOTE.BAK`, and reports publication failures. Real LVGL checks use the unchanged 96 KiB pool; physical SD and panel behavior remain open.
87
+
86
88
See [Storage and compatibility contract](compatibility.md) and [Data formats](data-formats.md).
Copy file name to clipboardExpand all lines: docs/data-formats.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,6 +21,8 @@ Tab5 OS keeps user-owned documents and logs on the removable microSD card. Built
21
21
22
22
Files ending in `.TMP` are unpublished: they may be incomplete after power loss, or fully synced but retained because publication failed. They must not be reported as finished captures without validation. A `.BAK` file is the previous complete generation and can be used for recovery when its corresponding final file is absent.
23
23
24
+
Notes edits complete text files of at most 65,535 bytes. A missing note starts an empty draft; a missing final note can be restored from `NOTE.BAK`. Recovery, open, read or close failures disable editing and Save until a successful reopen. Oversized files and files containing NUL bytes also disable Save and keep their original bytes. Save checks the draft's byte length before changing any path, including for UTF-8 text whose character count is smaller than its byte count. Notes loads the complete text in bulk before applying the editor's character limit. Leaving Notes clears its editor pointer and Save permission. Native files and LVGL checks verify these boundaries; physical SD removal, full-card and power-loss behavior remain hardware gates.
25
+
24
26
Files opens published Scope and I2C `.CSV` captures as graphs when their headers match the formats below. The viewer shows up to the first 2,048 well-formed rows, leaves the file unchanged, and shows failed I2C reads as gaps. Other files retain the text preview.
25
27
26
28
Files also opens published UART and RS-485 `.CSV` logs as a timestamped RX/TX timeline. The viewer loads up to the first 512 well-formed rows, shows eight rows per page, and lets you filter by direction or switch between hex and escaped ASCII without changing the file. Unpublished `.TMP` files retain the text preview.
| Relay, parsers, calculations, clipboard or file formats |[Core command reference](#core-command-reference); choose the affected module and any independent reference test. |
13
13
| Storage writes or incomplete CSV rows |[Core command reference](#core-command-reference), [CSV tail recovery](#csv-tail-recovery) and a firmware build. |
14
+
| Notes loading, saving or lifecycle |[Notes storage and UI](#notes-storage-and-ui) and a firmware build. |
14
15
| Offline apps, SPI or I2C editor/result flows |[Offline and peripheral UI](#offline-and-peripheral-ui). |
15
16
| Serial, saved serial logs or RTU Frames |[Serial and RTU UI](#serial-and-rtu-ui). |
16
17
| Modbus TCP, NTP, Wake-on-LAN, UDP or HTTP fixtures |[Network fixtures and UI](#network-fixtures-and-ui). |
@@ -96,6 +97,20 @@ Seek/read failures preserve all bytes, including a short read without a supplied
96
97
97
98
Generated source, full storage/header/test hashes and compile/result logs stay under `build/storage-csv-tail/`. Linux CI runs the fixture and retains those files as `storage-csv-tail-logs`, including compiler/test failures. Its 32 cases are separate from the seven-suite Windows native total.
The portable runner compiles four unchanged Notes functions extracted from `main/main.c` and the actual complete `storage_io.c`. Its 36 native-file cases cover missing/empty notes, backup recovery, the former 2 KiB boundary, 5 KiB and maximum-size files, oversized and NUL-containing files, allocation/recovery/open/read/close errors, the first read error, save length/UTF-8 guards, card availability, stream/publication/rollback failures and stale Save/reopen behavior. Every case independently checks final, backup and temporary bytes and closes its modeled file/allocation handles. Four prior-source full-file controls reproduce truncation to 2,047 bytes; recovery and read faults also reproduce unsafe Save actions. New allocation/probe/leave controls test the added boundaries rather than asserting that the previous callbacks used those APIs.
109
+
110
+
The optional real LVGL mode runs five additional cases against the cached pinned library with its existing 96 KiB pool. It checks complete 65,535-byte ASCII and 65,534-byte UTF-8 load/save, an oversized original file, a multibyte draft whose byte count exceeds the limit, and 25 reopen cycles with identical free bytes and allocation counts. Text is installed before the character limit so LVGL uses its bulk path. Files are native; SD faults and PSRAM allocation APIs are controlled. This does not prove physical rendering, card latency, removal or power-loss durability.
111
+
112
+
Generated callbacks/config/storage source, full main/function/storage/header/test hashes and compile/result logs stay under the selected output directory. Linux CI retains the 36-case evidence as `notes-io-logs`. Windows CI runs the five real LVGL cases after the existing seven suites and retains separate `notes-ui-logs`; those five add to the prior 815 native checks. Both artifacts retain diagnostics when their test step fails.
0 commit comments