highway(operator-surface) wave 3: one source of visual truth — zero literal colour/font/size outside the token module (Core 4) - #84
Merged
Conversation
…size outside webtheme Core 4 / OSV1-005 + OSV1-032 close. - webtheme.py: split TOKENS_CSS out of CSS (CSS byte-identical, verified); add SINGLE_SOURCE_CSS (spacing utilities on the 4px scale, histogram, state fills, attn rows, page headings, textareas, chart fills) and TRUST_CSS + trust_style_tag(). - webtrust.py: ships no stylesheet and no style tag at all; emits the token module's own tag, which inlines the live tokens (still self-contained). - webpwa.py: the offline body carries no colour/font/size; asks the UA via <meta name="color-scheme"> instead. - webapp/webbrowse/widgets/chartsvg: 66 literal inline sites -> 0. - exemption register 23 -> 8 (laundered literals and computed colours became classes/data attributes; only real computed lengths remain). - ledger: OSV1-005 VIOLATION->CONFORMS, OSV1-032 GAP->CONFORMS, OSV1-006 register rewritten; probes retargeted, mutations rewritten (57/57 proven). - declared out-of-lane: OSV1-003 probe guards flipped sides, OSV1-024/-025 re-derived from their passing pairs, OSV1-031 tally 9 -> 6, and the two leftover strict-xfail markers removed from the Tier-A kit.
…locked KPI icon can finally quiet itself)
…red, OSV1-031 re-counted, Tier-B run re-recorded Union of lane/visual-truth (4 commits) onto wave-2 main (6c2e9fa). RE-MEASURED ON THE UNION TREE, never transcribed from a lane's own base: - OSV1-006's exemption register: webtheme.py's three computed sites sit at 4197/4216/4223 here, not the lane's 4143/4162/4169 (core10 and the lane's own CSS both shifted the module). The probe's EXEMPTION_REGISTER and the row's notes table are both re-derived from the re-run census. - OSV1-031 (Freeze 5): 4 red Core rows on the union (003, 008, 010, 012), not the lane's 6 -- it counted a base where OSV1-015/-016 were still red and the browser tier did not exist. Title, notes tally and probe pin moved 5 -> 4. - Tier-B re-recorded on this tree (chromium 148.0.7778.0 / playwright 1.60.0) and run twice: 290 of 294 fields byte-identical, including every field any row asserts. OSV1-003's numbers are unchanged -- a calm L1 still paints 97 `--blocked` pixels, and the three discrimination arms still read 10 531 / 264 / 16 681. CONFLICTS RESOLVED AS UNIONS, never pick-a-side: OSV1-003 keeps wave-2's recorded-sweep assertions AND takes the lane's palette guards flipped to the absent side; OSV1-003's mutation pair keeps both the calm-pixel counterfactual and the returning-palette guard; OSV1-024 keeps both of its mutations. ONE REGRESSION FOUND BY THE RE-RECORD, AND REPAIRED. The lane moved chartsvg's ink out of inline `style=` into `.axis-label[data-watch]` / `[data-val]` / `[data-today]` (specificity 0,2,0), which LOSES to the pre-existing `.wt-observatory .svg-chart .axis-label{fill:var(--ink-tertiary)}` (0,3,0) that an inline attribute had always outranked. The watch band's axis labels, the histogram's value labels and the velocity chart's today tick therefore stopped painting their own ink, and `.val-label` lost its default fill entirely (SVG falls back to black -- invisible on the dark ground). Measured, not reasoned: 979 `--watch` px on a dark L1 against 1 161 before. Every chart-ink selector is now scoped through `.svg-chart` (>= 0,3,0 and later in the cascade), and the re-recorded sweep reads 1 161 again -- byte-identical to the pre-lane value. Two new discriminating guards in tests/unit/test_chartsvg.py, each demonstrated failing against the pre-fix stylesheet.
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.
The
visual-truthlane (item np3) of thehw-operator-surfacehighway, integrated onto wave-2 main.What landed (Core 4 — one source of visual truth):
style=sites carrying a LITERAL colour/font/size: 66 → 0.<style>-block literals outside the token module (webtrust's retired#0D0D0C/#F2EEE6/#D9A253palette): 40 → 0 — webtrust and the PWA offline page now consume the token set. Repeated spacing/type literals became utility/component classes inwebtheme.CSSrather than 66 one-line substitutions..kpi-card.is-blocked.is-zero .k .icon).Integration (orchestrator): 14 union conflicts (the lane forked before core10 + wave-2 landed). Register RE-MEASURED on the union tree (webtheme sat +54 lines from the lane's base) and set in both the probe and OSV1-006's notes.
LAST_RUN.jsonre-recorded (2 runs, every asserted field byte-identical) — which caught a specificity regression the lane's inline→class move introduced:.axis-label[data-…](0,2,0) lost to.wt-observatory .svg-chart .axis-label(0,3,0) that inline had always outranked, silently reverting chart ink (979 vs 1,161--watchpx on dark L1) and dropping.val-label's fill to SVG-black. Scoped through.svg-chart; sweep reads 1,161 again; two guards added intest_chartsvg.py, each demonstrated failing pre-fix.Ledger: OSV1-005 (Core 4) VIOLATION → CONFORMS; OSV1-025 (Conformance 6) GAP → CONFORMS (good half undeferred, passing); OSV1-032 (Freeze 6, register complete) GAP → CONFORMS; OSV1-031 (Freeze 5) re-pinned 4 red Core rows (003, 008, 010, 012 — all measured). Tally → 26 CONFORMS / 4 VIOLATION / 3 GAP / 3 N-A.
Verified on the union:
pytest ledger/checks60 ·make ledger-mutate63/63 · Tier-A 39 passed / 3 xfailed / 0 failed · Tier-B 52 passed / 35 xfailed / 0 failed · pyright 0 · ruff clean · unit+integration+cli 1421 passed. Two failures are not this change: the documented doctor live-sweep check, and a pre-existing CLI test-isolation defect (test_list_on_a_project_with_no_matching_items_exits_zero_with_empty_listreads a session-scoped project another module deferred items into — fails identically on main; filed separately).🤖 Generated with Amplifier