Repository navigation
chore(https-test): the license page of pico_w_test_https is served from LittleFS, for 4,300 B of room - #288
Merged
Merged
Conversation
…om LittleFS, for 4,300 B of room pico_w_test_https (the bench image with the full console and the TLS server) had 44 B of real flash left: its last LOAD ended at 0x100FEFD4 against the FLASH region's end at 0x100FF000 (readelf -l, main 4f14159). The next stage of the UI-driver work (feat/ui-drivers, S10b-2) grows the product images about 160 B, so it would not link. The maintainer chose option (a) of three: move one more page of this image to LittleFS, as ALARMS_PAGE, FILE_PAGE and TEL_PAGE already are. Which page: tools/build_webui_gz.py's rule is big AND rarely opened AND not needed to bring the device up. Measured in this env on 2026-10-22, gzipped: DASH_PAGE 6,237 B is the most opened page; NET_PAGE 4,304 B may be the page that puts a new device on Wi-Fi (the failure CFG_PAGE had in July); USR_PAGE 3,140 B; LICENSE_PAGE 4,260 B. LICENSE_PAGE. Measured, all nine built from scratch on 4f14159 plus this change: - pico_w_test_https: flash used 1,032,404 -> 1,028,148 B (-4,256), .bin 1,044,436 -> 1,040,180 B; the last LOAD ends at 0x100FDF34, 4,300 B of room. Its budget comes down to the new size (tools/flash_budget.json; ota_exempt, no "bin"). - The other eight are byte for byte main's (sha256 against the base build of #287). - check_flash_budget.py on all nine and --table, gen_features.py --check, check_features.py, test_build_custom.py, and the local run of the gates job (47 of 47) pass. The deploy step grows with it: an HTTPS suite needs data/web/license.html.gz in /web/ beside the other three (POST /api/upload), or /license answers "Page asset missing", which tools/web_test_suite.py reports. The manifest's comment says so. Not verified on hardware: no Pico W is on the bench today (the target is a Pico 2 W). The check for when one is: flash this image, upload the four .gz, and run web_test_suite.py over HTTPS: /license must load from the file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LyLm7Q1o7kCHngE63BnoTx
#286 also appended to tools/flash_budget.json's measured_on and measured_at_commit, so the two appends conflicted. Resolved from main's file plus this branch's edits: the pico_w_test_https budget at 1,028,148 B and this change's entries after main's, now naming a8ccf4c as the base. Measured again on the merged tree, all nine from scratch, against main a8ccf4c built from scratch: pico_w_test_https alone differs (used 1,028,148 B against 1,032,404, .bin 1,040,180 against 1,044,436, the last LOAD ending at 0x100FDF34: 4,300 B of room); the other eight are byte for byte main's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LyLm7Q1o7kCHngE63BnoTx
angeloINTJ
pushed a commit
that referenced
this pull request
Oct 23, 2026
Takes main from 25e169d to 2075b84: #285 (tools: the savings floor measures past the BTstack bank's fill, with a new tools/test_measure_savings.py), #286 (src: the console and syslog name the event again outside English on alpha and wire: LogManager.cpp and .h, DisplayManager_Alpha.cpp, AppManager_Boot.cpp), #287 (docs: the bench of 2026-10-22, TRL( ), OTA and the packs) and #288 (the licence page of pico_w_test_https is served from LittleFS, which also merged #285 and #286 into its own branch). There is no conflict in src/: the branch also changed src/AppManager_Boot.cpp since 25e169d, and git merges it as text. The five conflicts are three texts and two measurements; the measurements are measured again on the merged tree, never merged as text. Conflicts, one line each: - CLAUDE.md: main's rewritten end of "Language packs" (TRL( ) is a ledger the device never reads), then the branch's bullet "The Ângulo's texts". - tools/README.md: every row kept: the branch's three UI-gate rows, main's measure_savings.py row and new test_measure_savings.py row (#285), then the branch's four rows main had left as they were; test_build_custom.py keeps the branch's 72 hostile profiles (the script prints 72 on the merged tree; main's 54 is the old count). - tools/check_lang_packs.py: one message, "a missing @WEBDICT/@angulo entry silently leaves that one line in English. (@TRL is a ledger the device never reads.)"; tools/test_lang_gate.py passes (52 of 52). - docs/analysis/PLANO_STABLE.md section 3.1: the eleven OTA rows written from the re-measured records (check_flash_budget.py --table passes: 11 images, 1 exempt); only the pico_wire row moves. - tools/flash_budget.json: budget = measured and the .bin of all eleven images from a build from scratch of the merged tree (list below); measured_on and measured_at_commit keep the branch's text, then main's sentences (#286, #288), then one for this merge. The READMEs need nothing: check_readme_numbers.py passes on the merged tree (750 cases in 11 suites, release 97.9 % of the slot, 170 event codes, 62 routes (52 gated, 10 public), in all three READMEs). CLAUDE.md and tools/README.md: the "scripts" figure follows tools/README.md's row count (198 at ecb527e, 199 with #285's test_measure_savings.py row). Flash used and .bin, ecb527e -> this merge, both built from scratch with the default core (ecb527e reproduces every record of its flash_budget.json, its eleven sha256 equal S10c B6-b's, and the 948 pt-BR frames of the six host screen groups are unchanged on the merge): - pico_w_release: 1,022,900 -> 1,022,900 B used (+0), 1,034,932 -> 1,034,932 .bin (+0) - pico_w_test: 1,027,348 -> 1,027,348 B used (+0), 1,039,380 -> 1,039,380 .bin (+0) - pico_w_test_https: 1,032,412 -> 1,028,148 B used (-4264), 1,044,444 -> 1,040,180 .bin (-4264) - pico_w_asserts: 1,025,204 -> 1,025,204 B used (+0), 1,037,236 -> 1,037,236 .bin (+0) - pico_w_alpha: 976,236 -> 976,228 B used (-8), 990,380 -> 990,380 .bin (+0) - pico_w_air: 1,019,480 -> 1,019,480 B used (+0), 1,035,340 -> 1,035,340 .bin (+0) - pico2_w_release: 998,928 -> 998,928 B used (+0), 998,952 -> 998,952 .bin (+0) - pico_wire: 592,268 -> 592,260 B used (-8), 604,304 -> 604,296 .bin (-8) - pico_wiretft: 774,596 -> 774,596 B used (+0), 786,632 -> 786,632 .bin (+0) - pico_wiretft_angulo: 814,716 -> 814,716 B used (+0), 826,752 -> 826,752 .bin (+0) - pico2_w_angulo: 1,035,608 -> 1,035,608 B used (+0), 1,035,632 -> 1,035,632 .bin (+0) Main's own change (#285 to #288), built the same way on its own trees, 25e169d -> 2075b84: - pico_w_release: 1,022,908 -> 1,022,908 B used (+0), 1,034,940 -> 1,034,940 .bin (+0) - pico_w_test: 1,027,348 -> 1,027,348 B used (+0), 1,039,380 -> 1,039,380 .bin (+0) - pico_w_test_https: 1,032,404 -> 1,028,148 B used (-4256), 1,044,436 -> 1,040,180 .bin (-4256) - pico_w_asserts: 1,025,212 -> 1,025,212 B used (+0), 1,037,244 -> 1,037,244 .bin (+0) - pico_w_alpha: 976,236 -> 976,228 B used (-8), 990,380 -> 990,380 .bin (+0) - pico_w_air: 1,019,480 -> 1,019,480 B used (+0), 1,035,340 -> 1,035,340 .bin (+0) - pico2_w_release: 999,016 -> 999,016 B used (+0), 999,040 -> 999,040 .bin (+0) - pico_wire: 592,308 -> 592,300 B used (-8), 604,344 -> 604,336 .bin (-8) - pico_wiretft: 774,612 -> 774,612 B used (+0), 786,648 -> 786,648 .bin (+0) The merge's delta equals main's on 8 of the nine images; it differs on pico_w_test_https. Host only: nothing of this merge has run on a board. Proof, host only (stages/sync5_c1 of the UI-drivers scratchpad): - Main's four PRs change 29 files and the merge changes the same 29 against ecb527e; every patch is identical to main's except the two measured files, check_lang_packs.py's resolved message and the one-line scripts figure of CLAUDE.md and tools/README.md. Main's 5 hunks in src/ (#286: AppManager_Boot.cpp, DisplayManager_Alpha.cpp x2, LogManager.cpp, LogManager.h) are each in the merge once; #288 touches neither src/ nor WebUI.h. - check_flash_budget.py passes for the eleven images, --table passes (11 images, 1 exempt), test_flash_budget.py 19 ok. Against ecb527e only pico_w_alpha, pico_wire and pico_w_test_https change; the other eight are byte-identical (sha256). - ci_gates_local.py --raso (depth-1 clone): 63 of 63 steps passed; 1 skipped (own env, CI only) - tools/elf_funcoes.py and reloc_only.py, ecb527e against the merge: pico_w_alpha and pico_wire change DisplayManager::trlLookup( ) and logcodeLookup( ) (#286; REAL, 3 -> 2 instructions); pico_w_test_https changes WebManager::handleLicense( ) (#288; REAL, 9 -> 6), drops WebUI_GZ::LICENSE_PAGE_GZ, gains "/web/license.html.gz", and 12 callers move literal words only; nothing in the other six products or the two Angulo images changes. Main's own pairs (25e169d -> 2075b84) give the same lists but for three items, all decoded with objdump: SensorManager::SensorManager( ) (UNPROVEN on the merge side only: its 4-byte constant 0xFFFFFFFF is equal, and the table beside it points at the same SoundManager::MEL_* arrays, 8 B further on in both pairs), and the text fragments 'd;' and 'jT6' (printable bytes inside the removed licence blob, 4,267 B on ecb527e and 4,260 B on 25e169d). - pico_w_test_https: the last LOAD ends at 0x100fdf34, 4,300 B before 0x100FF000 (ecb527e: 0x100fefdc, 36 B; main 2075b84: 0x100fdf34). - The Angulo: its two ELFs change no function or datum; 948 of 948 pt-BR host frames of the six groups equal ecb527e's; test_idiomas (121 checks), test_textos (105), test_temas (174 cases) and check_ui_texts pass. - pico_wire and pico_w_test_https rebuilt from scratch on this commit's tree give the reference sha256. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LyLm7Q1o7kCHngE63BnoTx
angeloINTJ
pushed a commit
that referenced
this pull request
Oct 23, 2026
…(S10c, stage D) Section 4.4 of docs/analysis/UI_DRIVERS.md still said that pico_w_test_https had 36 B, and that every step had to hold it within them. The sync of 2026-10-23 (262962f) brought main's #288, which serves that image's licence page from LittleFS. The image's last flash LOAD now ends at 0x100FDF34, 4,300 B before the FLASH region's end at 0x100FF000 (`readelf -lW` on the merged image; it ended at 0x100FEFDC on ecb527e). The review of the sync found the stale line; the merge does not touch this file. The image shrank by 4,264 B where main's own shrank by 4,256 B. Seven of the 8 B are the licence blob it drops, `LICENSE_PAGE_GZ`: 4,267 B on the branch and 4,260 B on main (`nm -S`), each followed by the next symbol with no padding. The eighth is not decoded. Documentation only. No image changes, and check_angulo.py exits 0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LyLm7Q1o7kCHngE63BnoTx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
pico_w_test_httpsis the bench image with the full console and the TLS server. It had 44 B of real flash left: its last LOAD ended at0x100FEFD4, and the FLASH region ends at0x100FF000(readelf -l, main 4f14159).The next stage of the UI-driver work (
feat/ui-drivers, S10b-2) grows the product images by about 160 B, so this image would no longer link. The maintainer chose option (a): move one more of its pages to LittleFS, the wayALARMS_PAGE,FILE_PAGEandTEL_PAGEalready are.Which page
tools/build_webui_gz.pysets the rule: the page must be big, rarely opened, and not needed to bring the device up. The candidates, measured in this env on 2026-10-22 (gzipped):DASH_PAGENET_PAGECFG_PAGEhad in July)LICENSE_PAGEUSR_PAGEMeasured
All nine images were built from scratch on 4f14159 plus this change, and again after merging main a8ccf4c (#285, #286) into the branch, against main built from scratch: the same numbers.
pico_w_test_httpsflash usedpico_w_test_https.bin0x100FEFD4/ 44 B0x100FDF34/ 4,300 Btools/flash_budget.json) comes down to the new size. The image isota_exempt, so it records no"bin".check_flash_budget.pyon all nine and--table,gen_features.py --check,check_features.py,test_build_custom.py, and a local run of the gates job (47 of 47).Deploy step
An HTTPS suite now needs
data/web/license.html.gzin/web/, beside the other three (POST /api/upload). Without it,/licenseanswers "Page asset missing", andtools/web_test_suite.pyreports that. The manifest's comment says so.Not verified on hardware
There is no Pico W on the bench today (the target is a Pico 2 W). When one is back, the check is:
.gzfiles.web_test_suite.pyover HTTPS./licensemust load from the file.🤖 Generated with Claude Code
https://claude.ai/code/session_01LyLm7Q1o7kCHngE63BnoTx