You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2026/09/06 14:56:20 UTC

(causeway) 09/19: docs(openspec): archive declarative layout UI refinements

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch htmx
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit ca10d007d7ca9f3d4d0e3b78a5bf167b1e1ded37
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Sep 6 10:00:41 2026 +0100

    docs(openspec): archive declarative layout UI refinements
---
 .../.openspec.yaml                                 |  0
 .../design.md                                      |  0
 .../proposal.md                                    |  0
 .../specs/domain-web-components/spec.md            |  0
 .../generic-htmx-web-component-viewer/spec.md      |  0
 .../specs/generic-vue-web-component-viewer/spec.md |  0
 .../tasks.md                                       |  0
 openspec/specs/domain-web-components/spec.md       | 26 +++++++++++++++++-----
 .../generic-htmx-web-component-viewer/spec.md      | 21 +++++++++++------
 .../specs/generic-vue-web-component-viewer/spec.md | 19 +++++++++++-----
 10 files changed, 47 insertions(+), 19 deletions(-)

diff --git a/openspec/changes/refine-declarative-layout-ui/.openspec.yaml b/openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/.openspec.yaml
similarity index 100%
rename from openspec/changes/refine-declarative-layout-ui/.openspec.yaml
rename to openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/.openspec.yaml
diff --git a/openspec/changes/refine-declarative-layout-ui/design.md b/openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/design.md
similarity index 100%
rename from openspec/changes/refine-declarative-layout-ui/design.md
rename to openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/design.md
diff --git a/openspec/changes/refine-declarative-layout-ui/proposal.md b/openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/proposal.md
similarity index 100%
rename from openspec/changes/refine-declarative-layout-ui/proposal.md
rename to openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/proposal.md
diff --git a/openspec/changes/refine-declarative-layout-ui/specs/domain-web-components/spec.md b/openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/specs/domain-web-components/spec.md
similarity index 100%
rename from openspec/changes/refine-declarative-layout-ui/specs/domain-web-components/spec.md
rename to openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/specs/domain-web-components/spec.md
diff --git a/openspec/changes/refine-declarative-layout-ui/specs/generic-htmx-web-component-viewer/spec.md b/openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/specs/generic-htmx-web-component-viewer/spec.md
similarity index 100%
rename from openspec/changes/refine-declarative-layout-ui/specs/generic-htmx-web-component-viewer/spec.md
rename to openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/specs/generic-htmx-web-component-viewer/spec.md
diff --git a/openspec/changes/refine-declarative-layout-ui/specs/generic-vue-web-component-viewer/spec.md b/openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/specs/generic-vue-web-component-viewer/spec.md
similarity index 100%
rename from openspec/changes/refine-declarative-layout-ui/specs/generic-vue-web-component-viewer/spec.md
rename to openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/specs/generic-vue-web-component-viewer/spec.md
diff --git a/openspec/changes/refine-declarative-layout-ui/tasks.md b/openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/tasks.md
similarity index 100%
rename from openspec/changes/refine-declarative-layout-ui/tasks.md
rename to openspec/changes/archive/2026-09-06-refine-declarative-layout-ui/tasks.md
diff --git a/openspec/specs/domain-web-components/spec.md b/openspec/specs/domain-web-components/spec.md
index bc7b745c74e..617338c10ad 100644
--- a/openspec/specs/domain-web-components/spec.md
+++ b/openspec/specs/domain-web-components/spec.md
@@ -2981,11 +2981,12 @@ A row MUST accept only direct column children, and a column MUST accept direct f
 
 The foundation SHALL register `<cw-tabgroup>` and `<cw-tab>` as framework-neutral accessible tab containers.
 A tab group MUST accept only direct tab children, and a tab MUST accept only direct row children.
+The selected tab panel SHALL use the regular contained viewer-panel surface rather than an uncontained grey page background.
 
 #### Scenario: Tab group initializes
 
 - **WHEN** a connected tab group contains named tabs
-- **THEN** exactly one current tab has its corresponding panel visible
+- **THEN** exactly one current tab has its corresponding panel visible on the regular white viewer-panel surface
 - **AND** tab, tablist, tabpanel, accessible name, selection, control, and focus relationships are exposed correctly
 
 #### Scenario: User operates tabs with keyboard or pointer
@@ -3006,10 +3007,16 @@ A tab group MUST accept only direct tab children, and a tab MUST accept only dir
 - **THEN** it is excluded from presentation and a bounded diagnostic is emitted
 - **AND** valid tabs remain keyboard operable
 
+#### Scenario: Tab panel is presented at narrow width
+
+- **WHEN** the selected tab panel is rendered in a narrow container
+- **THEN** its white contained surface and nested layout remain within the available inline size
+- **AND** the tab group does not introduce horizontal document overflow
+
 ### Requirement: Authoritative metadata fieldset component
 
 The foundation SHALL register `<cw-metadata>` as an automatic fieldset bound to the current object's effective fieldset id `metadata`.
-It MUST render every ordered authoritative metadata property as an ordinary `<cw-property>` and every associated metadata action as an ordinary `<cw-action>` inside one accessible **Actions** panel dropdown.
+It MUST render every ordered authoritative metadata property as an ordinary `<cw-property>` and every associated metadata action as an ordinary `<cw-action>` inside one accessible ellipsis menu attached to the Metadata fieldset heading.
 It MUST NOT hard-code metadata member ids, infer membership from labels, expose raw layout resources, or render members outside the effective metadata fieldset.
 
 #### Scenario: Effective metadata fieldset resolves
@@ -3021,13 +3028,20 @@ It MUST NOT hard-code metadata member ids, infer membership from labels, expose
 #### Scenario: Metadata fieldset has associated actions
 
 - **WHEN** the effective metadata fieldset contains one or more associated actions
-- **THEN** one closed-by-default **Actions** panel dropdown contains those actions in authoritative order
-- **AND** opening or invoking through the panel uses ordinary action accessibility, authorization, prompts, invocation, results, and focus behavior
+- **THEN** one compact ellipsis trigger in the Metadata heading opens a bounded menu containing those actions in authoritative order
+- **AND** the trigger has an explicit accessible name, visible focus, and authoritative expanded state
+- **AND** opening or invoking through the menu uses ordinary action accessibility, authorization, disabled reasons, prompts, invocation, results, and focus behavior
+
+#### Scenario: Metadata action menu is dismissed
+
+- **WHEN** an open metadata action menu loses its active interaction through Escape, outside activation, action completion, supersession, or disconnection
+- **THEN** the menu closes predictably and obsolete menu work is retired
+- **AND** focus remains valid for the current connected component generation
 
 #### Scenario: Metadata fieldset has no actions
 
 - **WHEN** the effective metadata fieldset contains no authorized associated actions
-- **THEN** no empty Actions dropdown is rendered
+- **THEN** no ellipsis trigger or empty action menu is rendered
 - **AND** metadata properties remain available
 
 #### Scenario: Metadata authority is unavailable
@@ -3039,7 +3053,7 @@ It MUST NOT hard-code metadata member ids, infer membership from labels, expose
 #### Scenario: Metadata generation is superseded
 
 - **WHEN** object identity, effective layout, connection, or component generation changes during asynchronous metadata preparation
-- **THEN** obsolete structural-resource or parse work is retired
+- **THEN** obsolete structural-resource, parse, or open-menu work is retired
 - **AND** it cannot overwrite or append members into the newer metadata generation
 
 ### Requirement: Layout component diagnostics and host neutrality
diff --git a/openspec/specs/generic-htmx-web-component-viewer/spec.md b/openspec/specs/generic-htmx-web-component-viewer/spec.md
index cf9e1050af6..8be41974ffe 100644
--- a/openspec/specs/generic-htmx-web-component-viewer/spec.md
+++ b/openspec/specs/generic-htmx-web-component-viewer/spec.md
@@ -1674,7 +1674,8 @@ Title-free preview composition MUST preserve the selected detail members, action
 ### Requirement: HTMX Petclinic declarative layout demonstration
 
 The HTMX Petclinic application SHALL demonstrate application-authored `<cw-row>`, `<cw-column>`, `<cw-fieldset>`, `<cw-tabgroup>`, `<cw-tab>`, and `<cw-metadata>` composition beneath its existing object context and interaction controller.
-HTMX templates MUST NOT duplicate foundation span, tab, metadata-discovery, or panel-dropdown behavior.
+The demonstrated tab group SHALL contain an initial **Identity** tab followed by a **Metadata** tab and SHALL NOT retain the artificial **Layout help** tab or placeholder content.
+HTMX templates MUST NOT duplicate foundation span, tab, metadata-discovery, or action-menu behavior.
 
 #### Scenario: Petclinic layout renders wide and narrow
 
@@ -1682,14 +1683,20 @@ HTMX templates MUST NOT duplicate foundation span, tab, metadata-discovery, or p
 - **THEN** fieldsets and collections use authored column spans at wide width and stack in semantic order at narrow width
 - **AND** page navigation, member behavior, collection presentation, and document overflow remain correct
 
+#### Scenario: PetOwner tab composition renders
+
+- **WHEN** the PetOwner exact page reaches its presentable state
+- **THEN** the current Identity tab contains the owner's identity fields and the following Metadata tab contains `<cw-metadata>`
+- **AND** no Layout help tab or artificial placeholder panel is present
+
 #### Scenario: User operates the HTMX tab group
 
-- **WHEN** the user changes tabs by pointer and keyboard
-- **THEN** foundation updates the accessible current panel without an HTMX request or route replacement
+- **WHEN** the user changes between Identity and Metadata by pointer or keyboard
+- **THEN** foundation updates the accessible current white panel without an HTMX request or route replacement
 - **AND** the application shell and object context remain stable
 
-#### Scenario: HTMX metadata panel resolves
+#### Scenario: HTMX metadata menu resolves
 
-- **WHEN** the demonstrated object's effective metadata fieldset is available
-- **THEN** `<cw-metadata>` shows exactly its authoritative properties and an Actions dropdown only when associated actions exist
-- **AND** HTMX does not provide hard-coded metadata member ids or action grouping
+- **WHEN** the demonstrated object's effective metadata fieldset contains associated actions
+- **THEN** `<cw-metadata>` shows exactly its authoritative properties and a heading ellipsis menu containing the authorized actions
+- **AND** HTMX does not provide hard-coded metadata member ids, action grouping, menu state, or menu positioning
diff --git a/openspec/specs/generic-vue-web-component-viewer/spec.md b/openspec/specs/generic-vue-web-component-viewer/spec.md
index 8505cb5c4c7..db75670a84d 100644
--- a/openspec/specs/generic-vue-web-component-viewer/spec.md
+++ b/openspec/specs/generic-vue-web-component-viewer/spec.md
@@ -585,7 +585,8 @@ Its title-free inline previews MUST preserve the same useful details, actions, n
 ### Requirement: Vue Petclinic declarative layout parity
 
 The Vue Petclinic application SHALL author the same representative `<cw-row>`, `<cw-column>`, `<cw-fieldset>`, `<cw-tabgroup>`, `<cw-tab>`, and `<cw-metadata>` structure as the HTMX reference where the corresponding exact page is reconciled.
-Vue MUST treat those elements as custom elements and MUST NOT own their responsive, tab, metadata-discovery, or action-dropdown state.
+The reconciled tab group SHALL contain an initial **Identity** tab followed by a **Metadata** tab and SHALL NOT retain the artificial **Layout help** tab or placeholder content.
+Vue MUST treat those elements as custom elements and MUST NOT own their responsive, tab, metadata-discovery, or action-menu state.
 
 #### Scenario: Vue layout renders
 
@@ -593,14 +594,20 @@ Vue MUST treat those elements as custom elements and MUST NOT own their responsi
 - **THEN** shared foundation elements preserve equivalent fieldset, column, tab, and metadata relationships to HTMX
 - **AND** Vue wrappers do not duplicate visible members or alter semantic ordering
 
+#### Scenario: Vue PetOwner tab composition renders
+
+- **WHEN** the PetOwner route page reaches its presentable state
+- **THEN** the current Identity tab contains the owner's identity fields and the following Metadata tab contains `<cw-metadata>`
+- **AND** no Layout help tab or artificial placeholder panel is present
+
 #### Scenario: User operates the Vue-hosted tabs
 
-- **WHEN** pointer or keyboard input changes the current tab
-- **THEN** foundation updates selection, focus, and panels without Vue component state or route navigation
+- **WHEN** pointer or keyboard input changes between Identity and Metadata
+- **THEN** foundation updates selection, focus, and the current white panel without Vue component state or route navigation
 - **AND** the application-owned route outlet and object context remain stable
 
 #### Scenario: Vue-hosted metadata resolves
 
-- **WHEN** `<cw-metadata>` consumes the current Vue route's object context
-- **THEN** the same effective metadata properties and associated Actions dropdown are presented as in HTMX
-- **AND** generated member components retain ordinary foundation behavior
+- **WHEN** `<cw-metadata>` consumes the current Vue route's object context with associated actions
+- **THEN** the same effective metadata properties and heading ellipsis action menu are presented as in HTMX
+- **AND** generated member components retain ordinary foundation behavior while Vue owns no menu state