Skip to content

docs: R-R17 no longer says the pack gate and CLAUDE.md promise "only that line" - #289

Merged
angeloINTJ merged 1 commit into
mainfrom
docs/r-r17-trl-ledger
Oct 24, 2026
Merged

angeloINTJ merged 1 commit into
mainfrom
docs/r-r17-trl-ledger

Conversation

@angeloINTJ

Copy link
Copy Markdown
Owner

What

Two rows of docs/analysis/MODELO_DE_RECURSOS.md (Living) still said that the language-pack gate and CLAUDE.md promise a missing @TRL entry affects "only that line". #287 (2026-10-22) rewrote both, and the parser's header comment too: nothing on the device reads @TRL, and every TRL( ) text shows in English with or without its entry.

Proof

  • 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 locally.
  • Documentation only: no image changes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LyLm7Q1o7kCHngE63BnoTx

…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
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Oct 24, 2026
@angeloINTJ
angeloINTJ merged commit c671617 into main Oct 24, 2026
13 checks passed
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
@angeloINTJ angeloINTJ mentioned this pull request Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant