diff --git a/SCOPE.md b/SCOPE.md index 5845618..d496049 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -24,7 +24,7 @@ and agent reference, following the preliminary direction in `INTENT.md`. Research scaffold with an infospace-bench adapter as of 2026-09-26. The adapter has deterministic integration tests, completed bounded live investigations through -llm-connect, and three synthetic architecture walkthroughs (VC-03 provisional). Ten developed research +llm-connect, and three synthetic architecture walkthroughs (VC-03 provisional). Sixteen developed research drafts remain hypotheses; none is canonically admitted. No frontend application runtime exists. See `research/bench/README.md`, `REVIEW.md` (the initial review) and `workplans/` for follow-up work. diff --git a/TREE.md b/TREE.md index d6e44e1..19bc9a7 100644 --- a/TREE.md +++ b/TREE.md @@ -242,15 +242,21 @@ research/bench/sources/joplin-conflicts.md research/bench/sources/kubernetes-stale-writes.md research/bench/sources/obsidian-conflicts.md research/candidates/ConflictCopy.md +research/candidates/DerivedState.md research/candidates/ExplicitReconciliation.md +research/candidates/FailureBoundary.md +research/candidates/FocusReturn.md research/candidates/InvalidateAndReproject.md +research/candidates/IslandsOfInteractivity.md research/candidates/LocalCommitBoundary.md research/candidates/LocalDraftState.md research/candidates/MutationOutcomeTracking.md research/candidates/PendingSynchronization.md +research/candidates/PresentationModel.md research/candidates/ProgressiveEnhancement.md research/candidates/URLAddressableState.md research/candidates/VersionCheckedMutation.md +research/candidates/VerticalFeatureSlice.md research/cases/CarniatoGrandUnifyingArchitecture.md research/cases/LocalFirstAuthority.md research/catalog/PatternCandidateCatalog.md @@ -364,6 +370,7 @@ research/reviews/MatrixRecoveryExperiment.md research/reviews/NavigationCoverage.md research/reviews/NavigationRenderingEvidence.md research/reviews/ObsidianConflictScreen.json +research/reviews/PatternBreadthExpansion.md research/reviews/RecoveryReviewMetrics.json research/reviews/RecoveryWalkthroughReview.md research/reviews/ResearchOptimization.md diff --git a/research/README.md b/research/README.md index f61af59..17137f0 100644 --- a/research/README.md +++ b/research/README.md @@ -43,3 +43,8 @@ Current follow-up: [shared guidance corrections](reviews/SharedGuidanceRevision. and [navigation/rendering evidence](reviews/NavigationRenderingEvidence.md), with [provisional VC-03](walkthroughs/VC03-ContentPublication.md). Ten developed hypotheses; M1 remains open and the broader M2 evidence gate is not satisfied. + +Latest expansion: [six broader candidates and decision probes](reviews/PatternBreadthExpansion.md) +cover presentation logic, derived state, feature organization, client activation, +failure containment and modal focus. Current total: sixteen developed hypotheses; +previous counts above describe earlier slices. No additional runtime or model runs. diff --git a/research/candidates/DerivedState.md b/research/candidates/DerivedState.md new file mode 100644 index 0000000..747a6a9 --- /dev/null +++ b/research/candidates/DerivedState.md @@ -0,0 +1,38 @@ +--- +title: Derived State +status: draft +maturity: hypothesis +families: [projection, affordance] +scales: [L3, L6] +admission: research-candidate-only +--- + +# Derived State + +Context: totals, filters and enabled states can be calculated from existing inputs. +Keeping separate mutable copies risks disagreement; repeated computation costs time. + +Proposed solution: identify the authoritative inputs and derive a read-only result +from a coherent input snapshot. Cache expensive results only with explicit dependency +and invalidation rules. An independently editable proposal is a new input, not a +computed value to overwrite when its source changes. + +Result: fewer mutable synchronization obligations, at the cost of computation and +cache bookkeeping. Deriving from stale input does not make the output fresh. Time, +locale and access context must be represented when they influence the result. + +Evidence: B02 locates Redux selector guidance. This is a documented mechanism, +not a requirement to adopt Redux or a global store. Alternative: a maintained +materialized view when recomputation is too expensive, with its consistency contract. +Historical snapshots and user overrides must retain their distinct meanings. + +Proposed relations: supplies [Presentation Model](PresentationModel.md); refreshing +inputs through [Invalidate and Reproject](InvalidateAndReproject.md) is conditional. + +Next test: change a filtered record and its filter together; verify list and total +use the same snapshot, then challenge a cached result with a changed locale. + +Evidence locators: [breadth review](../reviews/PatternBreadthExpansion.md). +All relations are research proposals; no canonical identity or admitted graph edges. +The next test is planned, not executed. Known uses of the complete proposed contract +have not been verified in this investigation. diff --git a/research/candidates/FailureBoundary.md b/research/candidates/FailureBoundary.md new file mode 100644 index 0000000..0ebf905 --- /dev/null +++ b/research/candidates/FailureBoundary.md @@ -0,0 +1,40 @@ +--- +title: Failure Boundary +status: draft +maturity: hypothesis +families: [quality, composition] +scales: [L5, L6] +admission: research-candidate-only +--- + +# Failure Boundary + +Context: a failing region should not remove unrelated useful work. Continuity +competes with the cost of partial-state recovery and boundary coordination. + +Proposed solution: define which failures a boundary contains, replace the affected +region with usable feedback, and give recovery an explicit reset/retry contract. +Keep required navigation and recoverable intent outside the failing subtree when +appropriate. If containment itself fails, define the next enclosing recovery path. + +Result: some work can continue; shared state corruption or global runtime failure +may still cross the boundary. Resetting presentation does not undo remote effects. +Never replay a write merely because a region remounted. Distinguish expected domain +rejection and network errors from uncaught rendering faults. + +Evidence: B05 locates React's rendering-error boundary and documented exclusions; +this proposal does not claim it catches every asynchronous or event-handler error. +Alternative: fail the entire task when partial continuation would mislead users. +A fallback is a product state that needs accessible controls, not just logging. + +Proposed relations: [Mutation Outcome Tracking](MutationOutcomeTracking.md) handles +uncertain writes separately; [Focus Return](FocusReturn.md) applies to modal dismissal, +not automatically to every error replacement. + +Next test: inject render, event-handler, network and fallback failures separately; +record which are contained and whether retry duplicates an accepted operation. + +Evidence locators: [breadth review](../reviews/PatternBreadthExpansion.md). +All relations are research proposals; no canonical identity or admitted graph edges. +The next test is planned, not executed. Known uses of the complete proposed contract +have not been verified in this investigation. diff --git a/research/candidates/FocusReturn.md b/research/candidates/FocusReturn.md new file mode 100644 index 0000000..e65b6f4 --- /dev/null +++ b/research/candidates/FocusReturn.md @@ -0,0 +1,42 @@ +--- +title: Focus Return +status: draft +maturity: hypothesis +families: [quality, affordance] +scales: [L6] +admission: research-candidate-only +--- + +# Focus Return + +Context: a modal task temporarily interrupts another keyboard workflow. Closing it +can leave users without a meaningful continuation point. Continuity competes with +changing document structure and the next task's needs. + +Proposed solution: retain the invocation context and choose a meaningful focus +location inside the modal. On closing, return focus to the invoker when appropriate; +if it disappeared or completion changes the next step, choose a logical surviving +target. Define ownership for nested dialogs so an obsolete close callback cannot +move focus out of the current task. + +Result: interruption has an explicit return path, but dynamic targets need lifecycle +handling. Do not steal focus on unrelated background updates or apply modal focus +containment to ordinary page regions. This narrow candidate does not claim complete +accessibility conformance; labeling, inert background and keyboard behavior remain +part of the containing dialog contract. + +Evidence: B06 locates APG's modal focus guidance and return exceptions. Generalizing +to route transitions requires separate evidence. Alternative: inline interaction +when modal interruption adds no value. Defer merging this into a broader accessible +interaction pattern until contrasting cases support that scope. + +Proposed relation: can support [Explicit Reconciliation](ExplicitReconciliation.md) +when comparison uses a modal; reconciliation does not require a modal. + +Next test: close nested dialogs, delete the invoking row, and complete a task that +creates the next target; verify keyboard and assistive-technology behavior. + +Evidence locators: [breadth review](../reviews/PatternBreadthExpansion.md). +All relations are research proposals; no canonical identity or admitted graph edges. +The next test is planned, not executed. Known uses of the complete proposed contract +have not been verified in this investigation. diff --git a/research/candidates/IslandsOfInteractivity.md b/research/candidates/IslandsOfInteractivity.md new file mode 100644 index 0000000..0d8536d --- /dev/null +++ b/research/candidates/IslandsOfInteractivity.md @@ -0,0 +1,39 @@ +--- +title: Islands of Interactivity +status: draft +maturity: hypothesis +families: [projection, execution] +scales: [L3, L5] +admission: research-candidate-only +--- + +# Islands of Interactivity + +Context: a document contains a few interactive regions surrounded by readable +content. Client execution cost competes with interaction readiness and coordination. + +Proposed solution: deliver useful document content, then activate selected regions +with separately scoped client behavior and an explicit loading policy. Declare what +works before activation and how regions exchange shared state, if needed. + +Result: the execution surface can shrink, but delayed activation, shared dependencies +and cross-region state introduce complexity. A region is not a security sandbox or +proof of fault containment. Loading several runtimes can erase the intended savings. +A dense application with tightly coupled interactions may benefit from one client +root instead; measure before claiming faster delivery. + +Evidence: B04 locates Astro's client-island mechanism. Server islands are a separate +mechanism and are not generalized here. No application benchmark or independent +full-pattern recurrence is established by this documentation. + +Proposed relations: can complement [Progressive Enhancement](ProgressiveEnhancement.md) +but does not guarantee a no-script task; [Failure Boundary](FailureBoundary.md) +requires its own contract. + +Next test: fail one region's script download and delay another; verify document +reading, pre-activation controls, focus continuity and cross-region consistency. + +Evidence locators: [breadth review](../reviews/PatternBreadthExpansion.md). +All relations are research proposals; no canonical identity or admitted graph edges. +The next test is planned, not executed. Known uses of the complete proposed contract +have not been verified in this investigation. diff --git a/research/candidates/PresentationModel.md b/research/candidates/PresentationModel.md new file mode 100644 index 0000000..55c86bd --- /dev/null +++ b/research/candidates/PresentationModel.md @@ -0,0 +1,39 @@ +--- +title: Presentation Model +status: draft +maturity: hypothesis +families: [composition, affordance] +scales: [L4, L6] +admission: research-candidate-only +--- + +# Presentation Model + +Context: a screen contains presentation decisions that are difficult to exercise +through widget APIs. Testability and reuse compete with binding complexity. + +Proposed solution: represent presentation state and decisions independently of the +concrete controls; adapt that model into the view and translate interaction back +into intents. Domain authority stays outside presentation decisions. Specify the +binding direction and ownership of each editable value to avoid feedback loops. + +Result: logic can be tested without mounting the full interface, but model/view +synchronization becomes another failure surface. This is broader than Local Draft +State: a presentation model may contain selection and enablement without any draft. +Do not create a second editable copy of every domain object by default. + +Evidence: B01 locates Fowler's named pattern and its synchronization trade-off. +The source is a historical draft, not a verified deployment in this research. +Alternative: keep a trivial screen's logic in its view; another controller style +may be sufficient. Full-pattern recurrence here remains unverified. + +Proposed relations: may contain [Local Draft State](LocalDraftState.md) and compute +[Derived State](DerivedState.md); neither is mandatory. + +Next test: edit, refresh and change selection; verify ownership of draft versus +server observation and ensure a binding update does not trigger duplicate commands. + +Evidence locators: [breadth review](../reviews/PatternBreadthExpansion.md). +All relations are research proposals; no canonical identity or admitted graph edges. +The next test is planned, not executed. Known uses of the complete proposed contract +have not been verified in this investigation. diff --git a/research/candidates/VerticalFeatureSlice.md b/research/candidates/VerticalFeatureSlice.md new file mode 100644 index 0000000..9fe48f1 --- /dev/null +++ b/research/candidates/VerticalFeatureSlice.md @@ -0,0 +1,40 @@ +--- +title: Vertical Feature Slice +status: draft +maturity: hypothesis +families: [composition] +scales: [L4] +admission: research-candidate-only +--- + +# Vertical Feature Slice + +Context: one product change spans UI, state and service interaction scattered across +technical folders. Change locality competes with reuse and cross-feature coordination. + +Proposed solution: group the frontend parts of a cohesive capability behind an +explicit public interface. Declare permitted dependencies and compose capabilities +at a higher boundary. Put shared primitives where their ownership is clear; do not +hide cross-feature workflows inside another feature's private modules. + +Result: a capability can evolve internally, but interface design and shared concepts +need maintenance. A folder or barrel export does not enforce isolation. This is a +source-code boundary, not proof of independent deployment, team autonomy, security +isolation or an end-to-end backend service boundary. + +Evidence: B03 locates Feature-Sliced Design's product-oriented grouping and public +API rules. The proposed pattern abstracts those mechanisms without adopting its +entire layer taxonomy. Full-pattern application recurrence remains unverified. +Alternative: technical layers for a small cohesive application; extract shared +behavior only when its ownership and consumers justify the new coupling. + +Proposed relation: may contain [Presentation Model](PresentationModel.md); feature +boundaries need not coincide with [Failure Boundary](FailureBoundary.md). + +Next test: change one capability's storage adapter; inspect imports and consumer +contracts. Change only deployment cadence next and identify new obligations. + +Evidence locators: [breadth review](../reviews/PatternBreadthExpansion.md). +All relations are research proposals; no canonical identity or admitted graph edges. +The next test is planned, not executed. Known uses of the complete proposed contract +have not been verified in this investigation. diff --git a/research/catalog/PatternCandidateCatalog.md b/research/catalog/PatternCandidateCatalog.md index 0f03ddc..0681bd4 100644 --- a/research/catalog/PatternCandidateCatalog.md +++ b/research/catalog/PatternCandidateCatalog.md @@ -103,3 +103,22 @@ documentation mechanisms do not establish full-pattern recurrence or decision be Six existing drafts received [shared guidance corrections](../reviews/SharedGuidanceRevision.md) outside the frozen pilot. Stop adding drafts for this slice; next gather implementation evidence and challenge the proposed contracts. + +## Broader decisions — 2026-09-26 + +The user's request to broaden supersedes the previous slice's pause on candidate +addition. Six further developed hypotheses bring the current total to **sixteen**: + +| Draft | Family / scale | Decision | +| --- | --- | --- | +| [Presentation Model](../candidates/PresentationModel.md) | composition, affordance / L4, L6 | Separate presentation decisions from widget APIs | +| [Derived State](../candidates/DerivedState.md) | projection, affordance / L3, L6 | Compute values instead of maintaining competing mutable copies | +| [Vertical Feature Slice](../candidates/VerticalFeatureSlice.md) | composition / L4 | Organize a capability behind a public module interface | +| [Islands of Interactivity](../candidates/IslandsOfInteractivity.md) | projection, execution / L3, L5 | Activate selected document regions | +| [Failure Boundary](../candidates/FailureBoundary.md) | quality, composition / L5, L6 | Contain a declared failure class and define recovery | +| [Focus Return](../candidates/FocusReturn.md) | quality, affordance / L6 | Resume keyboard work after modal interruption | + +[Breadth review](../reviews/PatternBreadthExpansion.md) records primary claims, +non-overlap, counterexamples, synthetic probes and deferred candidates. Initial seed +rows above are historical inventory, not additional developed records. No canonical +admission, proven recurrence or demonstrated presentation benefit is claimed. diff --git a/research/catalog/SourceCatalog.md b/research/catalog/SourceCatalog.md index b486de5..b2852c8 100644 --- a/research/catalog/SourceCatalog.md +++ b/research/catalog/SourceCatalog.md @@ -93,3 +93,19 @@ independent application. [Review](../reviews/MatrixRecoveryExperiment.md). Living pages accessed 2026-09-26, exact revisions unknown; no runtime checks. [Claim locators, dispositions and limits](../reviews/NavigationRenderingEvidence.md). + +## Presentation, composition and quality expansion — 2026-09-26 + +| ID | Primary source | Scope / revision | +| --- | --- | --- | +| SRC-0023 | [Fowler: Presentation Model](https://martinfowler.com/eaaDev/PresentationModel.html) | 2004-07-19 historical draft; presentation/view synchronization | +| SRC-0024 | [Redux: Deriving Data with Selectors](https://redux.js.org/usage/deriving-data-selectors) | Minimal stored state and computed views | +| SRC-0025 | [FSD slices/segments](https://github.com/feature-sliced/documentation/blob/6691676119fc998b6d58a2b32582c0074a072f2d/src/content/docs/docs/reference/slices-segments.mdx) | Pinned revision 6691676119fc998b6d58a2b32582c0074a072f2d; product grouping and public interfaces | +| SRC-0026 | [Astro islands](https://docs.astro.build/en/concepts/islands/) | Client activation boundaries | +| SRC-0027 | [React Component](https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary) | Rendering-error fallback and exclusions | +| SRC-0028 | [WAI APG modal dialog](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/) | Focus entry/return and exceptions | + +All accessed 2026-09-26; exact revisions unknown unless stated. Bounded documentary +review, no runtime or deployment validation. [Claims B01–B06 and dispositions](../reviews/PatternBreadthExpansion.md). +These sources address different mechanisms and do not establish independent +recurrence of any one complete candidate. diff --git a/research/plan/OpenQuestions.md b/research/plan/OpenQuestions.md index d79698b..b87dc84 100644 --- a/research/plan/OpenQuestions.md +++ b/research/plan/OpenQuestions.md @@ -71,3 +71,11 @@ are 18/24 for each condition after four corrections. No presentation benefit is established; equal totals do not establish equivalence. Worksheet declares model authorship and prior aggregate-result exposure. Q04 remains open; future rubrics should split compound obligations before execution. + +## Breadth update — 2026-09-26 + +[Six-candidate review](../reviews/PatternBreadthExpansion.md) extends Q03/Q05/Q06. +Q06 separates module interfaces, client activation, fault containment and independent +release contracts. Q05 asks when modal focus/lifecycle requirements must shape +composition. Q03 still lacks verified recurrence for these complete contracts; +Q04 still lacks demonstrated decision benefit. Synthetic probes do not close cases. diff --git a/research/reviews/NavigationCoverage.md b/research/reviews/NavigationCoverage.md index 4751a45..70d7344 100644 --- a/research/reviews/NavigationCoverage.md +++ b/research/reviews/NavigationCoverage.md @@ -4,13 +4,15 @@ WP-0003 T01 working matrix. Entries mark located evidence, not completed streams | Stream | Current evidence | Key gap / disagreement | | --- | --- | --- | -| A — GUI architecture | No dedicated primary-source comparison yet | Presentation/domain separation and competing historical models | +| A — GUI architecture | [B01/B02](PatternBreadthExpansion.md): Presentation Model and selectors | Independent application uses and comparison with other controller/state models | | B — Navigation/hypermedia | [N01–N04/N06](NavigationRenderingEvidence.md): htmx, SvelteKit and browser history | Framework examples versus pinned application behavior; direct entry versus transient state | -| C — Rendering/execution | [N05](NavigationRenderingEvidence.md): SvelteKit HTML/client options; existing SRC-0001 interpretation | Pre-rendering, hydration, islands and streaming lack comparable implementation coverage | +| C — Rendering/execution | [N05](NavigationRenderingEvidence.md): SvelteKit HTML/client options; existing SRC-0001 interpretation | [B04](PatternBreadthExpansion.md) adds client-island docs; implementation comparisons and performance evidence remain missing | | D — Authority/synchronization | [Transactional evidence](TransactionalEvidenceExpansion.md), [frontend recovery](FrontendRecoveryImplementations.md), [Matrix experiment](MatrixRecoveryExperiment.md) | Synthetic receiver cannot prove production durability/deduplication; canonical admission remains open | -| E — Composition/organization | Seed catalog only | Independent feature/deployment boundaries and their operational cost | -| F — Quality | Retention/recovery guidance; navigation resilience requirements | No accessibility/performance validation; no-script support is narrower than resilience | +| E — Composition/organization | [B03](PatternBreadthExpansion.md): feature grouping and public interfaces | Independent feature/deployment boundaries and their operational cost | +| F — Quality | Retention/recovery guidance; [B05/B06](PatternBreadthExpansion.md): rendering failures and modal focus | No accessibility/performance validation; no-script support is narrower than resilience | -Next slice is implementation evidence for B/C, not expansion of the candidate count. +The user subsequently requested broader coverage: six drafts and documentary probes +were added in the breadth review. Implementation evidence for B/C remains pending. +All six streams now have some documentary material; none is thereby complete. VC-01/02 are synthetic reviewed drafts; VC-03 is provisional; VC-04–10 remain planned. No source count is used as a recurrence score or evidence-gate substitute. diff --git a/research/reviews/PatternBreadthExpansion.md b/research/reviews/PatternBreadthExpansion.md new file mode 100644 index 0000000..916a096 --- /dev/null +++ b/research/reviews/PatternBreadthExpansion.md @@ -0,0 +1,85 @@ +# 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. diff --git a/workplans/FEP-WP-0003-contrasting-schools.md b/workplans/FEP-WP-0003-contrasting-schools.md index 90ceb2a..09c8f9d 100644 --- a/workplans/FEP-WP-0003-contrasting-schools.md +++ b/workplans/FEP-WP-0003-contrasting-schools.md @@ -65,3 +65,19 @@ Next bounded action under T01: select and pin one implementation, test direct lo no-script navigation, history misses and full/fragment cache behavior. Under T02, independently review the trace and resolve the offline availability gap before calling it complete. T03 remains todo; keep M1 human validation in WP-0002 T03. + +## User-directed pattern broadening — 2026-09-26 + +The user explicitly requested broader pattern coverage, superseding the previous +slice's candidate-count pause. T01 remains progress: reviewed SRC-0023–0028 and +added six hypotheses (Presentation Model, Derived State, Vertical Feature Slice, +Islands of Interactivity, Failure Boundary, Focus Return). Sixteen drafts now exist; +M1's original seed cap describes its initial subset, not a global admission quota. +See research/reviews/PatternBreadthExpansion.md for B01–B06, five synthetic decision +probes, counterexamples and deferred candidates. No new runtime/inference calls. + +T02/T03 remain todo: probes do not complete VC-04–10 or M2. Next evidence under T01: +pin an application and inspect feature imports versus release coupling; exercise +render versus request failures and modal focus after invoker removal. Previous +navigation/history/cache checks remain open. WP-0002 retains independent-human +validation. No frozen-pilot edits, canonical promotion or evidence-gate completion.