Repository navigation
docs: R-R17 no longer says the pack gate and CLAUDE.md promise "only that line" - #289
Merged
Merged
Conversation
…that line" #287 (2026-10-22) rewrote CLAUDE.md's language-pack bullet, the docstring of check_trl( ) in tools/check_lang_packs.py and the header comment of src/DisplayManager_LangParser.cpp. All three now say that nothing on the device reads @TRL, and that every TRL( ) text shows in English with or without its entry. Two rows of docs/analysis/MODELO_DE_RECURSOS.md, a Living document, still said the gate and CLAUDE.md promised that a missing entry affects only that line: - R-R17 (section 4.6) keeps the hazard, which still holds, strikes the clause about the promise, and says what the three say since #287. Its evidence now cites the two lookups at DisplayManager_LangParser.cpp:244-258 and check_trl( ) at check_lang_packs.py:313-317; the old line numbers had drifted. - The appendix B.3 row is marked done, in that table's own convention (the location struck through, **feito**, and what changed). Checked: on main, `git grep -i "only that line\|só aquela linha"` finds these two rows and nothing else. check_angulo.py, check_readme_numbers.py, check_features.py and check_license.py pass. 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 28, 2026
Main's #289-#295, each hunk where this branch moved its code (plan step 1). First parent: 5f2cdaf, the docs step's tip; its eleven images are sha256-equal to 3d433d6's, so the C0 references (stages/sync6_c0) hold. What lands from main: #294 (an English boot lists the pack found in /lang; choosing it saves the language and waits for a boot: display/LangChoice.h, listLangFile( ), loadLangImpl<kListOnly>), #295 (the panel half of tools/check_authz.py, and the guard arm that asks for PERM_SYS_CONFIG before the theme and the language), the flash-budget gate that reads the .bin, test_air_web_session.py, the savings workflow, the manual and the changelogs. Conflicts (12), as resolved - src/DisplayManager_Touch.cpp: the branch's whole file (stage D moved the body to src/ui/original/ UiTouchChain.h; main's side would bring ~1,300 moved lines back). Main's one hunk, activeSlots = langRowsListed( isLangLoaded( ), isLangListed( ) ) and its comment, is applied at UiTouchChain.h:438-441. Against the docs tip the file differs by its :25 include comment only. - src/DisplayManager_i18n.cpp: the branch's side (drawSettingsLang left this file in S10a). Main's draw hunk (getListedLangName/Code( ), langRowsListed) is applied to src/DisplayManager_i18nUi.cpp:19-30, the unit that holds the original's draw. Main's clean hunks (static_assert LANG_COUNT == LANG_CHOICE_ROWS, showSettingsLang's langRowAtOpen) stay in the core; the header now says where the draw lives. - test/test_validators/test_main.cpp: both includes (SettingsSteps.h, LangChoice.h); main's cases clean. - tools/check_authz.py: main's root-based structure (routes_files, http_half, panel_half of root; main(argv); exit 2 on CannotRead) plus the branch's UI-driver audit as driver_files(root) and driver_half(root); DRIVER_EXTS kept; http_half keeps main's (rows, failures). The HTTP "clean (N routes ...)" line is printed once, then the drivers line, then the panel line; --list: routes, totals, drivers, panel table; rc 1 on a finding in any half. - tools/test_check_authz.py (add/add), D2: main's file keeps the name (25 cases; its check (h) now counts the routes before the totals line, because --list prints the driver's route after them). The branch's becomes tools/test_check_authz_drivers.py (39 checks + 11 mutants), adapted only where the merged gate forces it: make_base( ) copies src/SystemDefs_Records.h, make_tree( ) and gate_exts( ) copy tools/check_net_boundary.py (the panel half reads both, or every run exits 2), findings( ) skips the " - panel" lines, and mutant m7 is re-targeted (its old text, "failures += [...]", is gone; it now turns the returned findings into []). - .github/workflows/build.yml: every step of both sides. "Authorization gate tests (UI drivers)" runs test_check_authz_drivers.py, "Test the authorization gate" runs test_check_authz.py, and main's "Bench web client session tests" lands clean. - README.md, README.pt-BR.md, README.es-ES.md: the branch's sentences with the numbers check_readme_numbers.py measures: 765 cases in 11 suites (750 + main's 15), native 359 (344 + 15). - docs/analysis/PLANO_STABLE.md section 3.1 and tools/flash_budget.json: from the eleven builds (tools_s10c/budget_set.py; pico_w_test_https by hand, its entry has no "bin"); main's measured_on and measured_at_commit sentences are kept. - tools/README.md: both sides' rows; test_check_authz.py is main's row, test_check_authz_drivers.py the branch's, renamed. The count goes 199 -> 201 by the README's own definition (its table rows: grep -c '^| `' tools/README.md); CLAUDE.md quotes it and follows. D1, change of plan: the deletion of langSlotCount moves to step 3. Here the original's touch takes main's langRowsListed( isLangLoaded( ), isLangListed( ) ), as main's Touch.cpp hunk does; the Angulo's touch (ui/angulo/DisplayManager_UiA_Menus.cpp:387) keeps langSlotCount( _activeLangLoaded, LANG_COUNT ) untouched, so that step 3's host test T10 can still fail before its fix. langSlotCount (display/SettingsSteps.h:37) and its test in test_validators stay until then. D3, the sprawl: tools/feature_sprawl.json merged clean but is not trusted as text; check_feature_sprawl.py gives 368 = 365 + 3. That is the maintainer's decision of 2026-10-24 (~22h40: #294's +3 accepted as a recorded deviation) arriving on the branch, not a new one. Merged clean, wrong on this branch, corrected (the nine files re-read) - src/AppManager_Events.cpp: the guard arm's comment named DisplayManager_Touch.cpp as the sender of the theme and language events; the senders are actApplyTheme( ) and actApplyLang( ) in DisplayManager_Actions.h, which both UIs call. - src/AppManager_Boot.cpp, src/display/LangChoice.h: the heap sentence was main's pack alone. Now: @dict 3,292 B (3,294 B of heap) by check_lang_packs.py, and on the Angulo images also the @angulo table, 8,416 B in RAM of a 9,536 B section (host_telas.py); measured 2026-10-28 on this branch's pt-BR. - docs/AUTHORIZATION.md :18 names test_check_authz_drivers.py (the panel rules keep test_check_authz.py); MODELO_DE_RECURSOS.md R-R17 cites LangParser.cpp:27, :305-314 and check_lang_packs.py:341-344, :631-643 (its struck-through history row is left as written); CLAUDE.md count; the .pre-commit-config.yaml comment. - tools/tft_ui/test_textos.py: its check that the language hook is called right after the block that loads the pack failed on main's "#if SIMUT_DISPLAY_TFT else { listLangFile( ); } #endif" between the two; it now accepts exactly that arm (105 checks, 0 failed). The T5 loop was silent at C0 and failed here. - Kept as is, after checking that every "return false" of loadLangImpl comes before the path is written (:157, :267) and unloadLang( ) (:118) clears the rest, the @angulo offsets included: src/DisplayManager.h, DisplayManager_LangParser.cpp, LangPackIndex.h; and the main-only files. Proofs (host only; each number from its tool, 2026-10-28; records in stages/sync6_c1) T1 The eleven images from scratch (pio shim first in PATH, no PLATFORMIO_*, under flock; check_flash_budget.py right after each build), then once more on the staged tree this commit records: sha256 equal, 11 of 11. C0 -> C1, and main's growth for the family (Angulo images: wiretft's +688, pico2_w_release's +680): pico_w_release 1,035,116 -> 1,035,796 +680 B (main +680) dd741c9f32f5 pico_w_test 1,039,556 -> 1,040,244 +688 B (main +688) aec3fb47774f pico_w_test_https 1,040,356 -> 1,041,052 +696 B (main +696) 50d4c14dad14 pico_w_asserts 1,037,412 -> 1,038,092 +680 B (main +680) 34db1605f4c1 pico_w_alpha 990,380 -> 990,380 +0 B (main +0) sha256 equal to C0 and to main's pair ae687ec4b692 pico_w_air 1,035,340 -> 1,035,340 +0 B (main +0) f0bdf19bb78d pico2_w_release 999,096 -> 999,768 +672 B (main +680) 6104b438caf5 pico_wire 604,296 -> 604,296 +0 B (main +0) sha256 equal to C0 and to main's pair 577216451343 pico_wiretft 786,808 -> 787,488 +680 B (main +688) be6e2c44762d pico_wiretft_angulo 826,736 -> 827,336 +600 B (main +688) 2c9775fdf832 pico2_w_angulo 1,036,016 -> 1,036,600 +584 B (main +680) 89d1f444d4aa The functions that changed are main's pair for the family, name for name (elf_funcoes + reloc_only + objdump decode, stages/sync6_c1/cmp_c0, t1_vs_main_pair.txt): setup, core0Yield, findAndLoadLangFile (147 -> 86 instructions; 138 -> 77 on pico2), getActiveHelpText, webDictValue, handleTouch, showSettingsLang, drawSettingsLang; nine added (isLangLoaded, isLangListed, getListedLangName, getListedLangCode, listLangFile, loadLangImpl<false>, loadLangImpl<true>, LangPackScanner::feed, firstLangName); loadLangFile and its .part clone gone. pico_w_air: findAndLoadLangFile alone. The two Angulo images: main's pair minus handleTouch and drawSettingsLang (not linked) and getListedLangName/Code (only drawSettingsLang calls them). Link artifacts, decoded: _fini padding; SensorManager::SensorManager() (masked listing equal, a literal-pool word follows the growth); __binary_info_header_end (+672 and +584, the two pico2 images' growth). Two instruction counts differ from main's, decoded: handleTouch on pico2_w_release +6 against +7 (the activeSlots hunk is the same; the rest is a nop and literal-pool words), and setup on pico2_w_angulo +3 against the release's +4 (a nop). pico_w_asserts: its decoded changes equal pico_w_release's line for line, so no __LINE__ constant moved. T3 V-PIX pt-BR, six groups: 951 of 951 frames equal to the records (948 + D7's 3); the control (one frame changed, one missing, one extra) bites. T4 The eleven native suites pass, 765 cases = 750 + main's 15 (native 359, history_v5 62, cli 34, lan 14, logpolicy 59, otasig 83, alarmqueue 54, network 51, wired 19, air 17, sensors 13). T5 tools/tft_ui/test_*.py: 7 files, silent. T6 check_authz.py rc 0: "62 routes — 52 gated, 10 public-by-design" (once), "UI drivers, src/ui/**: 1 route, 1 gated", "32 events — 14 gated, 14 ungated, 4 registered deviations", 4 warnings; --list 103 lines. T7/T8 test_check_authz.py 25 of 25; test_check_authz_drivers.py "OK: 39 checks and 11 mutants". T11 check_readme_numbers.py OK (765 cases in 11 suites, release 98.0 % of the slot, 170 event codes, 62 routes, all three READMEs); check_feature_sprawl.py 368; check_lang_packs.py OK (pt-BR @dict 3292 B, @angulo 376 texts, 9536 B); test_flash_budget.py 24 ok; check_flash_budget.py --table OK (11 images, 1 exempt); test_lang_gate.py 52; test_air_web_session.py 4 ok. T12 ci_gates_local.py --raso: 65 of 66 steps passed, 1 skipped (CI only). The one failure is the fuzz step (clang++ cannot load libclang-cpp.so.18.1), as at C0 (63 of 64). New steps: "Authorization gate tests (UI drivers)" (renamed), "Test the authorization gate", "Bench web client session tests". Also: git diff --check clean; no conflict markers; drawSettingsLang is defined in the same three files as at C0 (DisplayManager_Alpha.cpp, DisplayManager_i18nUi.cpp, DisplayManager_None.cpp). Budgets (flash_budget.json used = budget = measured, and "bin"; PLANO_STABLE 3.1 headroom), old -> new pico_w_release 1,023,084 -> 1,023,764 (+680), bin 1,035,116 -> 1,035,796, headroom 5,027 -> 4,347 pico_w_test 1,027,524 -> 1,028,212 (+688), bin 1,039,556 -> 1,040,244, headroom 587 -> -101 pico_w_test_https 1,028,324 -> 1,029,020 (+696), no bin recorded (ota_exempt) pico_w_asserts 1,025,380 -> 1,026,060 (+680), bin 1,037,412 -> 1,038,092, headroom 2,731 -> 2,051 pico_w_alpha, pico_wire: unchanged (976,228 / 990,380 and 592,260 / 604,296) pico_w_air 1,019,480 -> 1,019,464 (-16), bin 1,035,340 unchanged, headroom 4,803 pico2_w_release 999,072 -> 999,744 (+672), bin 999,096 -> 999,768, headroom 569,431 -> 568,759 pico_wiretft 774,772 -> 775,452 (+680), bin 786,808 -> 787,488, headroom 253,335 -> 252,655 pico_wiretft_angulo 814,700 -> 815,300 (+600), bin 826,736 -> 827,336, headroom 213,407 -> 212,807 pico2_w_angulo 1,035,992 -> 1,036,576 (+584), bin 1,036,016 -> 1,036,600, headroom 532,511 -> 531,927 No image grows by more than main's growth for its family (D4). NEEDS A DECISION: pico_w_test is 101 B over the OTA ceiling. Its signed size is 1,040,485 B against a ceiling of 1,040,384 B, so "check_flash_budget.py pico_w_test <log>" fails (rc 1) and the 3.1 row records -101. The growth is main's own (+688 B), but this branch's test image had 587 B of headroom at C0 (main's: 763 B before #294, 75 B after), so main's growth does not fit. pico_w_asserts keeps 2,051 B (the gate warns: under one flash sector). Not fixed here. Not verified on hardware. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uy7K2mzEmmjBnpxpdYNDFu
Merged
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.
What
Two rows of
docs/analysis/MODELO_DE_RECURSOS.md(Living) still said that the language-pack gate andCLAUDE.mdpromise a missing@TRLentry affects "only that line". #287 (2026-10-22) rewrote both, and the parser's header comment too: nothing on the device reads@TRL, and everyTRL( )text shows in English with or without its entry.src/DisplayManager_LangParser.cpp:244-258andcheck_trl( )attools/check_lang_packs.py:313-317; the old line numbers had drifted.Proof
main,git grep -i "only that line\|só aquela linha"finds these two rows and nothing else.check_angulo.py,check_readme_numbers.py,check_features.pyandcheck_license.pypass locally.🤖 Generated with Claude Code
https://claude.ai/code/session_01LyLm7Q1o7kCHngE63BnoTx