frontend-patterns/research/reviews/PatternBreadthExpansion.md
tegwick 50c68575f1 Broaden pattern hypotheses across presentation composition and quality
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
2026-09-26 21:46:28 +02:00

85 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Pattern breadth expansion — 2026-09-26
Status: editorial source review and synthetic decision probes by Codex, under
WP-0003 T01. The user explicitly requested broader pattern coverage after the
navigation slice. This supersedes its immediate pause on adding candidates, while
preserving the open evidence gates and pending implementation tests.
Six drafts cover decisions absent or implicit in the previous ten: presentation
logic placement, derived-value ownership, feature boundaries, selective execution,
rendering-failure containment and return from modal interaction. They are research
hypotheses, not six new inventions or canonical admissions. Most develop existing
program targets. Focus Return deliberately narrows the broad accessibility seed.
No additional live inference was run; future live execution remains on llm-connect.
## Primary claims before normalization
Accessed 2026-09-26. Except the dated Fowler article and pinned FSD document, these
are living pages with exact revisions/publication dates unknown. Documentation
examples are not observed production deployments. No application was executed.
| Claim / source | Locator | Source observation | Proposed interpretation and limit |
| --- | --- | --- | --- |
| B01 / SRC-0023 | [Fowler: Presentation Model](https://martinfowler.com/eaaDev/PresentationModel.html), How it Works / When to Use It; 2004-07-19, author-marked draft | Presentation decisions can live outside GUI controls; synchronizing model and view adds work | Develop Presentation Model as a particular separation mechanism, not a universal controller architecture |
| B02 / SRC-0024 | [Redux: Deriving Data with Selectors](https://redux.js.org/usage/deriving-data-selectors), Deriving Data / Calculating Derived Data | Compute additional values from minimal stored state; selectors encapsulate lookups and calculations | Develop Derived State independently of the library; editable overrides and historical snapshots require different ownership |
| B03 / SRC-0025 | [FSD: Slices and segments, pinned source](https://github.com/feature-sliced/documentation/blob/6691676119fc998b6d58a2b32582c0074a072f2d/src/content/docs/docs/reference/slices-segments.mdx), Slices / Public API rule | Product-oriented groups expose public interfaces and constrain imports | Develop Vertical Feature Slice; module organization alone says nothing about release independence |
| B04 / SRC-0026 | [Astro: Islands architecture](https://docs.astro.build/en/concepts/islands/), What is an island? / Client Islands | Client islands activate selected components separately; regions can communicate and share state | Develop selective client execution; do not infer security isolation, fault containment or measured speed |
| B05 / SRC-0027 | [React: Component](https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary), Catching rendering errors | Rendering boundaries show a fallback; exclusions include event handlers, SSR, boundary-self errors and ordinary async callbacks; documented transition exception exists | Develop a boundary with a stated failure scope, not a catch-all recovery guarantee |
| B06 / SRC-0028 | [WAI APG: Modal dialog](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/), Keyboard Interaction, notes 1–2 | Focus enters the dialog and normally returns to its invoker; removed invokers and subsequent workflow steps justify another target | Develop Focus Return narrowly around modal tasks, not arbitrary route changes or a conformance certification |
Source integrity note: the rendered FSD page contained unrelated footer links. The
substantive grouping/interface claims were checked against the project's pinned
repository source above; footer material was excluded. This corroborates the text,
not an independent implementation or publisher.
## Distinct decisions and counterexamples
| Candidate | Decision newly made explicit | Counterexample / overlap boundary |
| --- | --- | --- |
| [Presentation Model](../candidates/PresentationModel.md) | Where does presentation behavior live independently of widgets? | A trivial page needs no extra object; Local Draft State concerns intent lifetime instead |
| [Derived State](../candidates/DerivedState.md) | Which values can be recomputed rather than independently changed? | A user override or historical snapshot is not merely a cache; derivation does not establish freshness |
| [Vertical Feature Slice](../candidates/VerticalFeatureSlice.md) | Which changes belong behind one module interface? | A coupled backend/API contract can still force coordinated releases |
| [Islands of Interactivity](../candidates/IslandsOfInteractivity.md) | Which document regions need client activation? | A tightly coupled editor may justify one runtime root; enhancement and fault isolation remain separate |
| [Failure Boundary](../candidates/FailureBoundary.md) | Which failure can this region contain, and how does it recover? | Partial continuation can be unsafe; rendering recovery cannot reverse a payment |
| [Focus Return](../candidates/FocusReturn.md) | Where does keyboard work continue after a modal closes? | Returning to a deleted invoker is invalid; ordinary background updates should not move focus |
## Synthetic probes — not full validation cases
These are author-generated design traces, not runtime observations or an independent
comparison with a baseline. They provide provisional links to planned cases without
marking VC-04–10 covered or complete.
| Probe | Baseline decision in plain language | Candidate contribution / changed constraint |
| --- | --- | --- |
| Dense workspace, relevant to VC-08 | Keep selection, editable intent and server data distinct; compute visible totals | Presentation Model organizes the decisions; Derived State avoids another mutable total. Add user override: store the override as an explicit input instead of recomputing it away |
| Publication with one calculator, extension of VC-03 | Deliver readable content and activate the calculator separately | Islands describe activation placement. Change to tightly coupled whole-page editing: reconsider the split; no automatic performance advantage |
| Two feature teams, relevant to VC-06 | Keep capability internals private and compose through interfaces | Vertical Feature Slice explains module boundaries. Change to independent releases: add compatibility/version/deployment contracts; the slice alone is insufficient |
| Optional dashboard panel, relevant to VC-05 | A rendering fault shows a local fallback while other panels remain usable | Failure Boundary makes the caught failure class explicit. Change the fault to a rejected network request: handle request state separately; do not assume the render boundary caught it |
| Reconciliation dialog over a record list, extension of VC-01 | Closing should restore a usable keyboard continuation | Focus Return identifies invocation ownership. Remove the invoking row during the task: choose the next logical surviving target, with a nested-dialog ownership check |
These baseline narratives already express the decisions. Naming them has not been
shown to improve outcomes. Each draft records a concrete next test and an alternative.
## Dispositions and unresolved questions
Retain six separate hypotheses for now, giving sixteen developed drafts. Keep
Presentation Model distinct from its optional Derived State and Local Draft State;
keep module, activation and failure boundaries distinct even when they coincide.
Focus Return may ultimately belong inside a broader interaction pattern, but its
current evidence only supports a narrower investigation.
Defer Independent Feature Boundary until deployment evidence is located; defer
Persistent Subscription and Conflict-Free Merge until ordering/reconnect or merge
semantics are studied. No need to add those names just to populate every family.
Q03 recurrence and Q04 usefulness remain open. Q06 now has an explicit counterexample:
a source module boundary can exist within a single coordinated deployment. Q05 gains
a question: should interruption/focus contracts shape composition before components
are selected? Neither question is closed by these documentary probes.
[WP-0003](../../workplans/FEP-WP-0003-contrasting-schools.md) owns the next evidence:
inspect a pinned application for feature imports and release boundaries; execute
rendering versus request-failure probes; exercise modal return with a removed invoker.
Keep the earlier navigation runtime checks and WP-0002 human-validation obligation
open. Evidence gaps do not prevent this authorized exploratory expansion, and the
expansion does not satisfy the M1/M2 gates.