Skip to content

Extend WidgetComponents typespecs: :operator_shell family + ariston_ui/unified_ui source.system [DRAFT — needs Pascal blessing]#170

Closed
ty13r wants to merge 1 commit into
mainfrom
claude/extend-widget-catalog-types-for-operator-shell
Closed

Extend WidgetComponents typespecs: :operator_shell family + ariston_ui/unified_ui source.system [DRAFT — needs Pascal blessing]#170
ty13r wants to merge 1 commit into
mainfrom
claude/extend-widget-catalog-types-for-operator-shell

Conversation

@ty13r
Copy link
Copy Markdown
Member

@ty13r ty13r commented May 16, 2026

Motivation

The Wave AshUI-3.3 audit for ariston-ui surfaced two operator-surface shell primitives — top_strip and mode_nav — that need canonical authoring upstream (issues #168 and #169). When I started authoring the Stage-1 IUR shape + catalog entries, the catalogs @type family enum and @type source typespecs blocked clean entries:

@type family ::
        :content_identity_and_disclosure
        | :form_control_and_composer
        | :row_and_artifact
        | :workflow_progress_and_status
        | :layer_shell_and_callout
        | :redline_and_code
        | :composition_behavior

@type source :: %{
        required(:system) => :ash_ui,
        required(:pr) => pos_integer(),
        required(:name) => atom()
      }
  • top_strip is plausibly stretchable to :layer_shell_and_callout (existing entries: sticky_frosted_header, slide_over_panel, event_callout) but mode_nav does not fit any of the 7 existing families cleanly.
  • New widgets originating from ariston-ui (or authored natively here) cannot honestly fit source.system: :ash_ui.

Changes

  • Add :operator_shell to the @type family union and the @families runtime list.
  • Widen @type source system field from :ash_ui to :ash_ui | :ariston_ui | :unified_ui.

No catalog entries are added in this PR. Stage-1 PRs for top_strip and mode_nav will land in follow-ups once this schema is blessed.

Why DRAFT

Pinging @pcharbon70 for schema preference:

Naming for the new family:

  • Option A (this PR): :operator_shell — concise, specific to operator-surface chrome
  • Option B: :shell_and_navigation — more generic, would also accommodate non-operator shells if they emerge

source.system shape:

  • Option A (this PR): widened union :ash_ui | :ariston_ui | :unified_ui — keeps enum auditability
  • Option B: open atom() — full flexibility, less compile-time safety

Happy to take either. If you want :shell_and_navigation + open atom(), I will re-author this PR with that shape.

Out of scope

  • No new catalog entries (top_strip + mode_nav land in follow-up PRs after this lands)
  • No changes to source.pr — kept as pos_integer() (new entries point to the unified_ui PR that introduces them)
  • No changes to other catalog files / runtime functions

References

…i/unified_ui source.system

The existing `WidgetComponents.@type family` enum (7 values) doesn't
accommodate the operator-surface shell primitives — top_strip + mode_nav
(filed as issues #168 + #169) — and the existing `WidgetComponents.@type
source` restricts `system` to `:ash_ui` only, which can't honestly track
widgets originating from ariston-ui or authored natively in unified_ui.

Additions:
- New `:operator_shell` family member (covers top_strip + mode_nav and
  any future operator-surface chrome primitives that don't fit the
  existing 7 families)
- `source.system` widened from `:ash_ui` to `:ash_ui | :ariston_ui |
  :unified_ui` so new entries can accurately attribute origin

Mirrors the @families runtime list with the new family entry.

DRAFT pending Pascal's review of naming + source-schema shape. Naming
alternative: `:shell_and_navigation` if Pascal prefers a more generic
container. Source.system alternative: `atom()` (no enum) if Pascal
wants full flexibility.

No catalog entries added in this PR — those land in follow-ups once
the schema is blessed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ty13r
Copy link
Copy Markdown
Member Author

ty13r commented May 16, 2026

Closed per Pascal Discord 2026-05-16: corrected architecture path. New approach drops source field entirely (catalog schema relaxation) and authors widgets directly in UnifiedUi (dependency chain starts there, not ash_ui).

@ty13r ty13r closed this May 16, 2026
ty13r added a commit that referenced this pull request May 16, 2026
…16) (#178)

Per Pascal's Discord decision 2026-05-16: drop the `source` field from
the WidgetComponents catalog entirely. Provenance (which AshUi PR a
canonical kind originally came from) lives in git history, not in the
runtime catalog. Loose pragmatic family coupling preserved.

Changes:
- `@type component` no longer requires `:source`. Now only `:kind`,
  `:family`, `:summary`, `:aliases`.
- `@type source` deleted (was `:ash_ui` PR mapping shape, no longer
  modeled).
- All 20 existing `@components` entries stripped of `source: %{...}`
  (sed-driven uniform strip; functional equivalent of the original
  catalog with provenance externalized).
- `WidgetComponents.source_mapping/0` deleted.
- `UnifiedUi.Reference.widget_component_source_mapping/0` deleted
  (was a wrapper around `source_mapping/0`).
- `UnifiedUi.Tooling.widget_component_catalog/0` no longer includes
  `source_mapping` key.
- Catalog test: "source mapping records every AshUi PR in order" test
  deleted; tooling-catalog + reference assertions stripped of
  source_mapping references.

Rationale:
- Authoring canonical kinds directly in UnifiedUi (not via ash_ui
  upstream PR mapping) means the source field stops being meaningful.
  The actual dependency chain starts at UnifiedUi.
- Schema relaxation unblocks shell-primitive authoring (top_strip,
  mode_nav, sidebar_*, unread_badge, command_palette) without
  needing to fabricate ash_ui PR numbers.

Closed in flight:
- #168 (top_strip canonical request — closed,
  re-approach via direct authoring)
- #169 (mode_nav canonical request — same)
- #170 (DRAFT source.system widening — closed
  in favor of dropping source entirely)

Verification:
- mix format --check-formatted clean
- mix compile --warnings-as-errors clean
- unified-ui test suite: 153 tests, 0 failures
- live_ui test suite: 478 tests, 0 failures

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

1 participant