ditdash U-UI3..6: integrate the four page-family migration branches #15

Merged
jsutter merged 8 commits from ui-integrate into main 2026-10-13 08:10:51 +00:00
Owner

Sequential integration of the four parallel U-UI3..6 migrations (ui-entity, ui-msp, ui-billing, ui-config-fed) onto main.

  • one kit: section/note/properties/details/link/swatch/slug collapse to a single definition; the msp chips/query_form, the billing button_link, and the config-fed page-family pieces land whole
  • the people lists live in msp.rs (the move wins); entity.rs keeps the rest of its migration
  • gate truth after the merges: entity.rs 104, shell.rs 58, every other view module 0 class= sites; style allowances empty (U-UI6 took the last style= site to an SVG rect fill)
  • assets/ditdash.css regenerated with the flake-pinned tailwind 4.1.18; snapshots refreshed
  • cargo test green, clippy -D warnings clean, ui_gates 9/9, checks.css-fresh green
Sequential integration of the four parallel U-UI3..6 migrations (ui-entity, ui-msp, ui-billing, ui-config-fed) onto main. - one kit: section/note/properties/details/link/swatch/slug collapse to a single definition; the msp chips/query_form, the billing button_link, and the config-fed page-family pieces land whole - the people lists live in msp.rs (the move wins); entity.rs keeps the rest of its migration - gate truth after the merges: entity.rs 104, shell.rs 58, every other view module 0 class= sites; style allowances empty (U-UI6 took the last style= site to an SVG rect fill) - assets/ditdash.css regenerated with the flake-pinned tailwind 4.1.18; snapshots refreshed - cargo test green, clippy -D warnings clean, ui_gates 9/9, checks.css-fresh green
Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
U-UI4 (the msp/people-page migration) — the home, history, users, and
operators pages now render through the ui:: kit, and the people lists move
into the msp family (views/msp.rs) so entity.rs stays disjoint from the
parallel entity-page unit.

- src/views/msp.rs: msp_home becomes four panes — what's-live (primary,
  sorted severity-first on the Surface::Live verdicts), fleet (secondary:
  the counts tiles plus the tenants/hosts/clients/channels sections),
  evidence (aside: every sources_unavailable row as an evidence item), and
  history (extra). Every fleet/people row's pill is a why-popover carrying
  its sources/confidence and the collector stamp; drift/unknown live rows
  carry their detail sentence and gaps; the jump lookup rides ui::section +
  ui::query_form; the history feed renders the gap state when the surface
  is uncollected, a true zero when the filters narrow everything away, and
  the applied-filter row as ui::chips; users/operators render the
  whole-list gap when a source is unavailable, and `sort=name` (the URL's
  key) orders by the name column where `severity` is the default.
- src/ui.rs: four kit additions — section() (the id-carrying h3 level),
  note() (the muted statement line), chips() (the applied-filter row), and
  query_form() (the GET lookup form) — each with unit tests.
- src/views/shell.rs: users_table/operators_table re-exported from msp;
  recorded_cell/observed_cell gain pub(super) for the kit live rows.
- tests: the class=-lint's msp.rs entry is deleted (the module carries
  zero classes) and entity.rs's ceiling shrinks 313 -> 311; the gate walk
  renders the new components; a new test confirms the migrated pages
  render under the shell + MSP selector; a new test pins the sort
  round-trip; the pages2 wording pins follow the new gap states; byte +
  semantic digests regenerated (UPDATE_SNAPSHOTS=1).
- assets/ditdash.css rebuilt with the flake's pinned CLI (byte-fresh).

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
U-UI6: config/branding/federation/converge render only through ui::
(zero class= in the three view modules; the gate allowlist entries are
deleted, never extended).

- the converge run state maps through Surface::ConvergeRun (motion →
  info, succeeded → ok, gated → warn, failed → bad); dito's refusal
  bytes render verbatim in the why-popover (the family law), the
  Apply/Decline contract unchanged
- the linked-msp fetch states map through Surface::RemoteFetch
  (unreachable → warn with the frozen probe + since lines, refused →
  bad, absent → info); the report refusal and the frozen strings ride
  the why-popovers
- the config fail-closed states render through the kit: the invalid-HEAD
  banner as a warn pill, the closed write path and the no-document state
  as gap notes, whole uncollected surfaces as gap states
- the kit grows the page-family pieces (section, card, prose, properties,
  forms) and the css is rebuilt with the pinned CLI (css-fresh green)
- snapshots regenerated for the two migrated surfaces (converge,
  msp_home operator)

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
The U-UI3 page-family migration: the app, tenant, host and edge pages
render from the typed kit (no class= of their own left — entity.rs's
pre-migration ceiling shrinks 313 -> 106 for the U-UI4..6 families).

- src/views/entity.rs: the four page families move to ui::panes/pane
  (primary = the object/attention table, secondary = the detail, aside =
  related entities, extra = activity, per page); the object tables take
  the status-first column (ui::status_cell), severity-then-name default
  sort (the URL's `sort` round-trip stays, FR-23), data-priority column
  collapse (status + name never hide); the why-popovers carry the
  verdicts' own detail + row gaps + recorded deploy date, the
  provenance-derived rows carry their sources, and the gap states carry
  the sources_unavailable reason word-for-word; KPI tiles where the
  pages own headline numbers (apps/services/live, channels/branches/
  previews, the port verdict counts); the absence trio for empty
  states; the traffic panels move their runtime geometry to SVG
  attributes (fill/stroke/width) and the share bars to an SVG rect —
  every `style=` site is gone from the family.
- src/ui.rs: the page-family kit — link/gated_link, muted/subline/note/
  caption, section/properties/details, kpi_row/value_row, code, alert,
  share_bar/swatch, chart, traffic_status, recorded_text/observed_text
  (moved from shell.rs), action_form/action_unavailable, plus the pane
  anchor id (pane-<id>).
- theme/ditdash.css: the semantic --dn-link token (light teal, dark
  120 169 255 — 6.7:1+/4.5:1 required where the raw teal read 3.55:1);
  .dn-link and the popover links ride it; the alert/bar/swatch component
  rules; the pill glyph fill wraps its channel triplet in rgb() — the
  bare `var(--glyph)` was invalid CSS and rendered glyphs transparent.
- src/views/shell.rs: LINK points at the semantic .dn-link; the
  recorded/observed text helpers delegate to the kit; provenance_badge
  deleted (its last caller migrated to ui::pill).
- tests: the pane-anchor assertions move to id="pane-<id>", the denied
  row asserts the data-status hook, the host chart lines assert the SVG
  stroke attributes, the gate's dated ceilings + style allowances follow
  the migration, the kit walk covers the new components; byte + semantic
  digests regenerated (UPDATE_SNAPSHOTS=1).

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
Conflicts resolved: shell.rs keeps U-UI3's kit-delegating cells at
pub(super) (the msp pages call them); ui.rs concatenates the two kits
with one section/note (the unified section carries both the fragment id
and the section-<id>-h heading), a generic properties, and the msp
chips/query_form; ui_gates sums the per-module counts to the merged
tree (entity 104, shell 63, msp 0).

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
Conflicts resolved to the merged tree's truth: billing.rs reaches zero
(its allowance entry is deleted — five entries remain), the snapshot
digests refresh, and the shared kit's 4-arg kpi_tile call sites carry
the key slot.

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
Conflicts resolved to the merged tree's truth: one section (the fragment
id plus the {id}-h heading wired through aria-labelledby), one note, the
generic properties, the 3-arg details, one link/swatch/slug — the
duplicated kit pieces from the parallel migrations collapse to a single
definition each; the msp tables' aria anchors follow the section's
heading contract; the run/remote Surface mappings land whole; the
allowlist shrinks to entity 104 / shell 58 and the style allowances
empty (U-UI6 took the last style= site to an SVG rect fill); the
dead verdict-badge/live-core-cell helpers the union of migrations
orphaned are deleted; assets/ditdash.css regenerated with the pinned
4.1.18 and the digests refreshed.

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
deepnet/ditdash!15
No description provided.