Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
85 lines
8.5 KiB
Markdown
85 lines
8.5 KiB
Markdown
# 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.
|