highway(operator-surface) wave 1: Tier-A conformance kit + L0 hero = velocity+counts + contrast floor (3 lanes) - #82
Merged
Conversation
…d halves, wired into make test + CI
Freeze 1 asks for a Tier-A kit at a named path that runs on every pull
request; Freeze 4 asks that every Conformance fixture's bad half has been
demonstrated by running it. Both now hold.
tests/conformance/operator_surface/
test_tier_a.py one test per Tier-A **Machine check:** name the contract
states -- hero.velocity_and_counts, state.not_colour_only,
visual.single_source, reads.never_write, calm.keeps_slot,
deps.no_framework, antigoals.enforced, push.alarm_only,
palette.status_hue_set, perception.floors -- each a pure
check function with a GOOD half against the real artifact
and at least one BAD half against a deliberately wrong one.
Plus two coverage tripwires: one reads the contract and
fails if a Tier-A check is unimplemented or stale, one
fails if any check ships no bad half.
conftest.py CALM / ALARM / EMPTY rendered fixtures, each in its OWN
workspace root -- L0 aggregates every project in a
workspace, so sharing one root would make the calm render
alarming and the empty render non-empty.
Six good halves are xfail(strict=True) naming their open ledger row -- never
skipped, never deleted. strict is load-bearing: when the fix lands the test
XPASSes and the run fails, which is the instruction to flip the row and delete
the marker in the same change.
Core 4's census and exemption register are IMPORTED from ledger/ rather than
reimplemented (OSV1-025's own warning: two censuses disagree silently). The
register is hoisted to test_operator_rows.EXEMPTION_REGISTER so the kit can
read it, and the kit asserts it still agrees with the live census.
Ledger, re-derived from the kit's real results rather than from a file
appearing:
OSV1-004 GAP -> CONFORMS Core 3 measured over rendered L0/L1/L2: zero
status-bearing elements without text or an
accessible name.
OSV1-012 GAP -> VIOLATION Core 8 measured: slots all survive, but three
regions keep their slot and say nothing.
OSV1-027 GAP -> CONFORMS Freeze 1, both halves: the kit exists AND runs
(Makefile test-conformance-a, CI Tier 6).
OSV1-021/-024/-025/-026 stay GAP -- fixtures exist and discriminate,
good halves deferred against OSV1-001/-005/-012
and the Tier-B kit.
OSV1-030/-031 (out of lane scope, minimal): Freeze 4 retargeted to the
Tier-B half; Freeze 5's red-Core tally 10 -> 9.
Every retargeted probe carries a mutation that flips it red: the spent "the
Tier-A kit file appears" counterfactual is replaced by what must actually move
-- the Core row a deferred good half waits on closing, CI dropping the step,
or a renderer growing its empty branch. make ledger-mutate: proven 52 / 52.
…ts (OSV1-001)
operator-surface.v1 Core 1: "The L0 hero region carries throughput over a
stated window, presented together with the counts an operator acts on: in
flight (held), blocked, needs attention, and open/ready."
Before: the hero was a verdict LINE (`render_verdict_hero`, no figure and no
count at all); velocity was a chart two regions below; a separate five-card
KPI strip sat under the hero carrying agents/held/ready/blocked/resolved-24h
-- and "needs attention" existed nowhere as a count, on either region.
Now: one hero panel. `widgets.render_velocity_hero` leads with the velocity
figure and STATES its window ("0 resolved / last 24h"), demotes the verdict
sentence to a caption beside it, and composes the four named counts INTO the
same region through the existing `.kpi-strip`/`.kpi-card` vocabulary. The
route holds no separate `kpi_html` fragment any more: exactly one `.kpi-strip`
renders on the page, inside the hero. "Resolved 24h" is no longer a card
because it is the figure; the agents-active reading it displaced survives in
the verdict caption and in the "Agents now" section.
Calm is reported, never celebrated (Core 8): nothing scales with its value, so
an all-empty fleet renders `0` at exactly the size a populated one renders
`115`, every count still labelled, no slot collapsed -- asserted on populated
AND all-empty fixtures at both the widget and the rendered-route level. Also
preserved: `role="status"` on the hero (Core 6), text labels on every count
(Core 3), the three status hues (Core 2), zero new inline style sites (Core 4).
Ledger: OSV1-001 VIOLATION -> CONFORMS (VIOLATION-MOVEMENT -- the pin went red
because the behaviour moved toward the clause). Probe retargeted at the fixed
shape in the same change; its mutation replaced by two, one per half of the
closed defect. `make ledger-mutate` 54/54, zero unproven.
Out of scope but forced by the flip, and minimal: OSV1-031 counts red
Core-carrying rows, so its pinned tally moved 10 -> 9 (probe, title, notes),
and `_mo031`'s anchor -- which used OSV1-001 as its specimen -- was repointed
at OSV1-015. No other row's disposition changed.
New widget/CSS are APPENDED at the end of widgets.py/webtheme.py rather than
slotted beside their siblings: the Core 4 exemption register (OSV1-006, not
this lane's row) pins inline-style sites by file:line in both files, and
webapp.py's edit is net-zero on line count for the same reason. Documented in
place at each site.
…V1-009)
`--ink-quiet` in LIGHT mode was the only token below the WCAG floor: 3.09 /
2.93 / 2.72:1 against the three light grounds, six below-floor text pairs
because the two light token blocks duplicate the same value. The ported design
system calls that token decorative-only, but this app paints real reading copy
with it -- chartsvg.py:294's "No activity in this window" empty-state caption,
`.status-chip.st-resolved`, `.priority-chip.p3,.p4`, `.link-chip .none`,
`.fleet-row .agents.is-zero`, the actions-drawer count -- so the exemption does
not apply and the fix belongs at the token, not at the call sites.
Darkened #7c8ba0 -> #596473 along the same hue, in BOTH light blocks
(`@media (prefers-color-scheme:light)` and `:root[data-theme="light"]`, which
are held in sync by comment alone):
--ink-quiet on --color-ground 3.09:1 -> 5.36:1
--ink-quiet on --color-ground-elevated 2.93:1 -> 5.08:1
--ink-quiet on --color-ground-sunken 2.72:1 -> 4.71:1
Deliberately not taken to 7:1 -- quiet stays visibly quieter than
--ink-tertiary (7.85:1). Dark mode already cleared the floor and is unchanged.
No call site moved off the token; no reading-copy usage was relabelled
decorative. 54/54 text pairs now clear 4.5:1; 9/9 non-text pairs clear 3:1
(unchanged by this fix, now guarded rather than assumed).
Ledger, same change:
* OSV1-009 VIOLATION -> CONFORMS, with the measured before/after table.
* `test_row_osv1_009` retargeted off its pin: asserts the floors over the
LIVE token blocks (no transcribed ratios), that the two light blocks have
not drifted on the measured token set, and that the four-step ink ramp did
not collapse -- so contrast cannot be bought by deleting a ramp step.
* Mutation harness: the single FIXED-direction mutation is replaced by two
REGRESSION mutations, one per light block, proving the probe notices a
half-revert. 54/54 mutations proven.
* OSV1-031 (Freeze 5 tally) pin 10 -> 9 red Core rows, as its own failure
message instructs, with the movement recorded in the row.
Out of scope but caused by this change, named: OSV1-006's exemption register
is keyed by `file:line`, and the comment lines added above shifted three
webtheme.py coordinates (4120/4139/4146 -> 4131/4150/4157). Same three sites,
same code, same register set -- coordinates re-derived, nothing else touched.
`test_dashboard_held_item_raises_the_custody_reading` matched `Held</span>` against a card that now reads "In flight (held)" and lives inside the hero region (Core 1 / OSV1-001). What the test guards is unchanged -- a real held count on L0, never a fabricated holder identity -- so only the label and the docstring's description of where the card sits moved.
…contrast lane fixed OSV1-009 in the same wave tier-a-kit pinned Core 7's token half as xfail(strict) against the six below-floor --ink-quiet pairs; the contrast lane fixed them at the token in the same wave, so the union XPASSes. Marker removed; docstring table updated.
…-- the hero lane fixed OSV1-001 in the same wave
…FORMS -- wave-1 union of hero + contrast + tier-a-kit Three lanes landed in one wave and each re-derived its own rows against its own base: hero closed OSV1-001, contrast closed OSV1-009, tier-a-kit closed OSV1-004. Both hero and tier-a-kit independently re-pinned Freeze 5's tally to 9; the union is 7 (remaining red: 003 005 008 010 012 015 016). Conformance 5 (OSV1-024) was pinned as GAP-until-OSV1-001-closes; with the hero rebuilt and the kit's good half undeferred it passes on the real L0, so the row is re-derived from the PASSING pair (never from the fixture's presence) and its harness mutation now runs in the regression direction (re-deferring the good half must go red).
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.
Three lanes of the
hw-operator-surfacehighway, integrated locally and verified as a union. Ledger rows re-derived by each lane from real measurement; the orchestrator resolved the two cross-lane interactions (below).tests/conformance/operator_surface/test_tier_a.py— one check per Tier-A Machine check name, 22 executed bad halves, open rows carried asxfail(strict)naming the row;make test-conformance-a+ CI Tier 6--ink-quietlight#7c8ba0 → #596473in BOTH duplicated light token blocks; all 54 text pairs ≥ 4.5:1, 9 non-text ≥ 3:1, in all three token blocks; no reading copy relabelled decorativeCross-lane interactions resolved at integration (orchestrator commit):
xfail(strict)deferrals in the kit XPASSed once their fix lanes merged (Core 1 hero, Core 7 floors) → markers removed.OSV1-031(Freeze 5 gate) pins the red Core-row count; two lanes each re-pinned it to 9 against their own base → union re-pinned to 7 (remaining: 003 005 008 010 012 015 016).OSV1-024(Conformance 5) was GAP-until-OSV1-001-closes → re-derived from the PASSING good half → CONFORMS; its harness mutation flipped to the regression direction.Verified on the union:
pytest ledger/checks60 passed ·make ledger-mutate54/54 · Tier-A kit 38 passed / 4 xfailed (open rows) · pyright 0 · ruff clean. OSV1 tally 15 → 14 CONFORMS / 15 GAP / 4 VIOLATION / 3 N-A. Core 10 (core10 lane), the Tier-B browser kit, and the inline-style migration follow in the next wave.🤖 Generated with Amplifier