Skip to content

highway(operator-surface) wave 1: Tier-A conformance kit + L0 hero = velocity+counts + contrast floor (3 lanes) - #82

Merged
Brian Krabach (bkrabach) merged 10 commits into
mainfrom
highway/os-wave-1
Sep 5, 2026
Merged

highway(operator-surface) wave 1: Tier-A conformance kit + L0 hero = velocity+counts + contrast floor (3 lanes)#82
Brian Krabach (bkrabach) merged 10 commits into
mainfrom
highway/os-wave-1

Conversation

@bkrabach

Copy link
Copy Markdown
Collaborator

Three lanes of the hw-operator-surface highway, 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).

Lane Item What landed Rows
tier-a-kit c1a tests/conformance/operator_surface/test_tier_a.py — one check per Tier-A Machine check name, 22 executed bad halves, open rows carried as xfail(strict) naming the row; make test-conformance-a + CI Tier 6 OSV1-027 Freeze 1 + Tier-A halves (004, 012 went red-der, 021ᴬ, 024–026)
hero ujy L0 hero rebuilt: fleet velocity over a stated window + in-flight / blocked / needs attention (was absent everywhere) / open — counts composed INTO the hero region; calm reported never celebrated; net-zero line count in webapp.py to keep OSV1-006's file:line register honest OSV1-001 VIOLATION → CONFORMS
contrast sxh --ink-quiet light #7c8ba0 → #596473 in 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 decorative OSV1-009 VIOLATION → CONFORMS

Cross-lane interactions resolved at integration (orchestrator commit):

  • Two 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/checks 60 passed · make ledger-mutate 54/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

…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).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants