Ângulo standard across the brand, READMEs, site and docs; firmware version on the login page - #166
Merged
Merged
Conversation
…ndard ANGULO.md, the interface guide the device's web UI has followed since 2.4.6-beta, now governs everything with a screen or a reader, and AGENTS.md §7 says so explicitly: the eight rules in full, where every copy of the tokens lives and what is never edited by hand, the brand, the deviations found in the code today, and what a machine checks. Brand. tools/gen_logo.py draws everything from the display face and reads every colour from docs/assets/angulo.css, a byte-for-byte copy of simut-rx/web/angulo.css: the S on an acento disc (data/favicon.ico 835 -> 731 B, the 16 px frame optically sized), the wordmark light and dark, the Powered-by badges (no gradient, no emoji, no shadow) and the social card. The device's login brand is the same outline, traced from Bricolage Grotesque instead of Liberation Sans Bold. READMEs x3: a <picture> logo, badges in one colour and flat-square (the flat style draws a gradient), a tagline that says what the product does, state in words instead of emoji, headings in sentence case. The all-contributors block is left as the bot writes it. Site. A layout of our own replaces Cayman's gradient header on every Markdown page; the landing page moves to the tokens and gains a theme switch on angulo:tema, the manual's key. Four facts on it were wrong and are fixed from the README revised against the code on 2026-09-23: Wi-Fi is not configured from the panel, the asset names, "it is beta", and a colophon still naming v2.3.2-beta. Docs. About 260 emoji out of the Living documents, the state written in words. Snapshot documents are untouched: a record that gets edited stops being evidence. tools/check_angulo.py, in the gates job: the token copy pinned by sha256, the site's CSS on tokens and the 4 px grid, the brand on token colours, no emoji in the READMEs, on the site or in a Living document. Mutation-tested: 19 of 19 rules give exactly one finding when broken; 409 findings against the main this branches from, 0 here. Measured on 2026-09-24, main 649d677 and this branch built side by side: 'used' -168 B on release, test, test_https and asserts (Favicon::DATA -104, LOGIN_PAGE_GZ -62, the other pages +-3 B around the new asset hash); 0 on alpha and air, where the bytes fall inside the 4 KiB alignment pad. The flash budgets stay and 'measured' moves (tools/flash_budget.json). The site was built with jekyll 3.10 and GitHub Pages' default plugins and checked in both themes and at phone width. Not yet run on hardware. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jq4auDQppGzmAx1gLKn1z3
The login page has no session, so it cannot ask /api/perms, where the top bar reads the version. build_webui_gz.py now reads SIMUT_VERSION from src/SystemDefs_Limits.h, the one place it is defined, and stamps it over @SIMUT_VERSION@ before minifying. The version is also part of the generator's up-to-date stamp: without it, a release bump alone would find WebUI_GZ.h current and ship the previous number. The pattern only accepts [0-9A-Za-z.+-], because the value lands in the HTML as it is. On the page it sits under the tagline in the Ângulo dado style (13/20, monospace, tinta-2), since a version is an identifier. SECURITY.md §8 says what this exposes: the page is public by design, so anyone who reaches it learns which advisories apply -- the same number the release image already announces to the LAN in its mDNS TXT record, and the reason only the latest release is supported. Measured: LOGIN_PAGE_GZ 6,585 -> 6,659 B; 'used' +80 B on release, test and asserts, +72 on test_https, 0 on alpha and air (alignment pad). The generated page carries <span class="ver">v2.7.2</span> and no token is left in any page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jq4auDQppGzmAx1gLKn1z3
…a credential tools/scan_secrets.sh step 3 matches `(pass|secret|token|api_key)[a-z_]* = "<literal>"` case-insensitively, so `TOKENS = "docs/assets/angulo.css"` was reported as a literal credential and failed the gates job on this PR. The value is a file path, and the allowlist is for credentials published on purpose, so the name changes instead: ANGULO_CSS and ANGULO_CSS_SHA256. Both gates pass locally after the rename: check_angulo.py (77 documents) and scan_secrets.sh (clean). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jq4auDQppGzmAx1gLKn1z3
Owner
Author
Hardware test — together with #165Tested as one release candidate: Login page (both images)
Web UI
Device
CI: the first run failed the secret gate on |
angeloINTJ
pushed a commit
that referenced
this pull request
Sep 25, 2026
SIMUT_VERSION 2.7.2 -> 2.7.3, and everything that names the current release catches up: CHANGELOG (en, pt-BR), the three READMEs, both user manuals, the docs index, the landing page in its three languages, and the product manual (chapters 1, 3, 4, 5, 9, 13, 14 and 28, appendix C), regenerated. v2.7.3 is #165 (Restart without saving on /config) and #166 (the Ângulo standard; the firmware version on the login page). The manuals gain both: the Restart section in chapter 5 and the user manuals' commit section, the version line in chapter 13 and the authentication section. Stale since v2.7.2, fixed here: - the READMEs' "On main, not yet released" row still listed three things v2.7.2 shipped; it is gone, and the alpha LCD bullet that carried the same label is named for what it does; - tools/build_manual.py had VERSION typed as "v2.7.1", so the product manual's cover and <meta> said v2.7.1 through the whole v2.7.2 release. It now reads SIMUT_VERSION from src/SystemDefs_Limits.h, as build_webui_gz.py already does; - the pt-BR and es-ES READMEs counted 61 HTTP routes; check_authz.py counts 62, as the English one says. All three said 408 host test cases; CI run 36115353101 on main ran 410 (185+63+33+45+39+16+29). Flash, all six built locally at this commit: used 998,220 release, 1,003,764 test, 1,011,388 test_https, 1,000,396 asserts, 963,476 alpha, 1,003,328 air. flash_budget.json 'measured' moves to these (#165 had not moved it); budgets unchanged. Against the published v2.7.2 .bin: release +168 B, alpha and air the same size to the byte. The images carry the new version (WebUI_GZ.h stamp ver=2.7.3). Gates run locally: scan_secrets, gen_logcodes --check, check_authz, check_license, check_angulo, check_fsguard, check_air_consistency, test_h5_day_merge; the product manual builds with 1,724 internal links and none broken. Not flashed at this commit: the version bump is one digit, and the published .uf2 is flashed on the bench after the release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jq4auDQppGzmAx1gLKn1z3
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.
Two commits.
1. The Ângulo standard for everything with a screen or a reader.
ANGULO.md— the interface guide the device's web UI has followed since 2.4.6-beta — now covers the brand, the three READMEs, the docs site, the landing page and the Living documents, andAGENTS.md§7 makes it explicit for anyone building here: the eight rules, where each copy of the tokens lives and what is never edited by hand, the brand, the deviations found in the code, and what a machine checks.tools/gen_logo.pyreads every colour fromdocs/assets/angulo.css(a byte-for-byte copy ofsimut-rx/web/angulo.css) and draws the S of the display face on anacentodisc:data/favicon.ico835 → 731 B, wordmark light and dark, Powered-by badges without gradient, emoji or shadow, the social card. The device's login brand is the same outline.<picture>logo, badges in one colour andflat-square, a tagline that says what the product does, state in words instead of emoji, sentence-case headings. The all-contributors block is left as the bot writes it.tools/check_angulo.pyin thegatesjob — mutation-tested, 19 of 19; 409 findings against the base, 0 here.2. The firmware version on the login page.
build_webui_gz.pystampsSIMUT_VERSIONinto the page at build time (it has no session to ask/api/perms), and the version is part of the generator's up-to-date stamp so a bump cannot ship the old number.SECURITY.md§8 records the exposure.Measured (main
649d677and this branch built side by side on 2026-09-24):used−88 B on release, test and asserts, −96 on test_https, 0 on alpha and air (the 4 KiB alignment pad absorbs it). Flash budgets unchanged,measuredupdated with a journal entry. All eight gates-job checks pass locally; the site was built with jekyll 3.10 and GitHub Pages' default plugins.Hardware: being tested on the bench together with #165 before merge — results in a comment below.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Jq4auDQppGzmAx1gLKn1z3