Preserve initial frontend pattern language research scaffold
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
This commit is contained in:
parent
017ad6ea17
commit
2a5dabdc85
43 changed files with 2030 additions and 1 deletions
84
README.md
84
README.md
|
|
@ -1,3 +1,85 @@
|
||||||
# frontend-patterns
|
# frontend-patterns
|
||||||
|
|
||||||
A Christopher Alexander style pattern language for frontend architecture and design.
|
A coherent, generative pattern language for frontend architecture and design.
|
||||||
|
|
||||||
|
The project treats frontend architecture not as a choice among frameworks or named styles, but as the progressive resolution of recurring forces concerning:
|
||||||
|
|
||||||
|
- authority,
|
||||||
|
- addressability,
|
||||||
|
- projection,
|
||||||
|
- interaction,
|
||||||
|
- mutation,
|
||||||
|
- synchronization and reconciliation,
|
||||||
|
- composition,
|
||||||
|
- execution and delivery,
|
||||||
|
- quality boundaries.
|
||||||
|
|
||||||
|
The repository is intended as an **infospace for both human and agentic reference**.
|
||||||
|
|
||||||
|
Its goal is to make frontend architecture:
|
||||||
|
|
||||||
|
1. understandable as a set of recurring design problems,
|
||||||
|
2. navigable as a connected language of patterns,
|
||||||
|
3. generative rather than merely taxonomic,
|
||||||
|
4. explicit about trade-offs and failure modes,
|
||||||
|
5. independent of framework fashion,
|
||||||
|
6. grounded in known implementations and sources,
|
||||||
|
7. machine-readable enough for agents to reason over.
|
||||||
|
|
||||||
|
## Core proposition
|
||||||
|
|
||||||
|
> Frontend architecture is the progressive resolution of forces concerning
|
||||||
|
> authority, addressability, projection, interaction, synchronization,
|
||||||
|
> composition, and execution. A frontend pattern language captures recurring
|
||||||
|
> resolutions of those forces and the contexts they create for subsequent
|
||||||
|
> design decisions.
|
||||||
|
|
||||||
|
## Repository map
|
||||||
|
|
||||||
|
- `canon/` — normative vocabulary and structure of the language.
|
||||||
|
- `patterns/` — individual frontend architecture and design patterns.
|
||||||
|
- `sequences/` — generative sequences for common frontend situations.
|
||||||
|
- `architectures/` — named architectural configurations expressed through patterns.
|
||||||
|
- `technologies/` — mappings from technologies/frameworks to the patterns they implement.
|
||||||
|
- `research/` — research material, source reconciliation, concepts, catalogues, and cases.
|
||||||
|
- `templates/` — authoring templates for new patterns and mappings.
|
||||||
|
|
||||||
|
## Design principles
|
||||||
|
|
||||||
|
### Patterns before products
|
||||||
|
|
||||||
|
React, Solid, HTMX, Astro, LiveView, Vue, Svelte and similar technologies are treated as implementations and examples, not as the ontology.
|
||||||
|
|
||||||
|
### Forces before preferences
|
||||||
|
|
||||||
|
A pattern should be selected because of the forces present in a context, not because a framework community considers it idiomatic.
|
||||||
|
|
||||||
|
### Relations before lists
|
||||||
|
|
||||||
|
Patterns form a graph. Important relations include:
|
||||||
|
|
||||||
|
- requires
|
||||||
|
- enables
|
||||||
|
- refines
|
||||||
|
- generalizes
|
||||||
|
- complements
|
||||||
|
- alternative-to
|
||||||
|
- conflicts-with
|
||||||
|
- commonly-combined-with
|
||||||
|
- creates-context-for
|
||||||
|
- implemented-by
|
||||||
|
- observed-in
|
||||||
|
|
||||||
|
### Sequences before checklists
|
||||||
|
|
||||||
|
A pattern language should help generate architecture through an ordered sequence of decisions.
|
||||||
|
|
||||||
|
### Failure modes are part of the pattern
|
||||||
|
|
||||||
|
Software patterns must describe when they become harmful, misleading, expensive or fragile.
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
This repository begins as a research-backed v0.1 scaffold. The first research case is Ryan Carniato's
|
||||||
|
"The Grand Unifying Architecture of Frontend", used as a starting point for decomposing modern frontend
|
||||||
|
architectures into deeper responsibilities and forces.
|
||||||
|
|
|
||||||
69
TREE.md
Normal file
69
TREE.md
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
# Repository Tree
|
||||||
|
|
||||||
|
```text
|
||||||
|
frontend-patterns/
|
||||||
|
├── architectures/
|
||||||
|
│ ├── DocumentWeb.md
|
||||||
|
│ ├── Islands.md
|
||||||
|
│ ├── LocalFirst.md
|
||||||
|
│ ├── Microfrontends.md
|
||||||
|
│ ├── README.md
|
||||||
|
│ ├── ServerComponents.md
|
||||||
|
│ └── SPA.md
|
||||||
|
├── canon/
|
||||||
|
│ ├── Forces.md
|
||||||
|
│ ├── FrontendPatternLanguage.md
|
||||||
|
│ ├── PatternSchema.md
|
||||||
|
│ ├── Relations.md
|
||||||
|
│ ├── Responsibilities.md
|
||||||
|
│ └── Scales.md
|
||||||
|
├── patterns/
|
||||||
|
│ ├── address/
|
||||||
|
│ │ └── README.md
|
||||||
|
│ ├── affordance/
|
||||||
|
│ │ └── README.md
|
||||||
|
│ ├── authority/
|
||||||
|
│ │ └── README.md
|
||||||
|
│ ├── composition/
|
||||||
|
│ │ └── README.md
|
||||||
|
│ ├── execution/
|
||||||
|
│ │ └── README.md
|
||||||
|
│ ├── mutation/
|
||||||
|
│ │ └── README.md
|
||||||
|
│ ├── projection/
|
||||||
|
│ │ └── README.md
|
||||||
|
│ ├── quality/
|
||||||
|
│ │ └── README.md
|
||||||
|
│ ├── synchronization/
|
||||||
|
│ │ └── README.md
|
||||||
|
│ └── README.md
|
||||||
|
├── research/
|
||||||
|
│ ├── cases/
|
||||||
|
│ │ └── CarniatoGrandUnifyingArchitecture.md
|
||||||
|
│ ├── catalog/
|
||||||
|
│ │ ├── PatternCandidateCatalog.md
|
||||||
|
│ │ └── SourceCatalog.md
|
||||||
|
│ ├── compendium/
|
||||||
|
│ │ └── FrontendArchitectureCompendium.md
|
||||||
|
│ ├── concepts/
|
||||||
|
│ │ ├── GenerativeSequence.md
|
||||||
|
│ │ └── ResponsibilityModel.md
|
||||||
|
│ ├── plan/
|
||||||
|
│ │ ├── OpenQuestions.md
|
||||||
|
│ │ └── ResearchProgram.md
|
||||||
|
│ └── README.md
|
||||||
|
├── sequences/
|
||||||
|
│ ├── CollaborativeApplication.md
|
||||||
|
│ ├── ContentSite.md
|
||||||
|
│ ├── GeneralWebApplication.md
|
||||||
|
│ ├── LocalFirstApplication.md
|
||||||
|
│ ├── README.md
|
||||||
|
│ └── TransactionalApplication.md
|
||||||
|
├── technologies/
|
||||||
|
│ └── README.md
|
||||||
|
├── templates/
|
||||||
|
│ ├── Pattern.md
|
||||||
|
│ └── TechnologyMapping.md
|
||||||
|
├── INTENT.md
|
||||||
|
└── README.md
|
||||||
|
```
|
||||||
18
architectures/DocumentWeb.md
Normal file
18
architectures/DocumentWeb.md
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# DocumentWeb
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
|
||||||
|
Describe **DocumentWeb** as a configuration of independent frontend patterns rather than as a monolithic architectural style.
|
||||||
|
|
||||||
|
## To establish
|
||||||
|
|
||||||
|
- context
|
||||||
|
- dominant forces
|
||||||
|
- pattern configuration
|
||||||
|
- variants
|
||||||
|
- consequences
|
||||||
|
- failure modes
|
||||||
|
- known implementations
|
||||||
|
- sources
|
||||||
18
architectures/Islands.md
Normal file
18
architectures/Islands.md
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Islands
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
|
||||||
|
Describe **Islands** as a configuration of independent frontend patterns rather than as a monolithic architectural style.
|
||||||
|
|
||||||
|
## To establish
|
||||||
|
|
||||||
|
- context
|
||||||
|
- dominant forces
|
||||||
|
- pattern configuration
|
||||||
|
- variants
|
||||||
|
- consequences
|
||||||
|
- failure modes
|
||||||
|
- known implementations
|
||||||
|
- sources
|
||||||
18
architectures/LocalFirst.md
Normal file
18
architectures/LocalFirst.md
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# LocalFirst
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
|
||||||
|
Describe **LocalFirst** as a configuration of independent frontend patterns rather than as a monolithic architectural style.
|
||||||
|
|
||||||
|
## To establish
|
||||||
|
|
||||||
|
- context
|
||||||
|
- dominant forces
|
||||||
|
- pattern configuration
|
||||||
|
- variants
|
||||||
|
- consequences
|
||||||
|
- failure modes
|
||||||
|
- known implementations
|
||||||
|
- sources
|
||||||
18
architectures/Microfrontends.md
Normal file
18
architectures/Microfrontends.md
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Microfrontends
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
|
||||||
|
Describe **Microfrontends** as a configuration of independent frontend patterns rather than as a monolithic architectural style.
|
||||||
|
|
||||||
|
## To establish
|
||||||
|
|
||||||
|
- context
|
||||||
|
- dominant forces
|
||||||
|
- pattern configuration
|
||||||
|
- variants
|
||||||
|
- consequences
|
||||||
|
- failure modes
|
||||||
|
- known implementations
|
||||||
|
- sources
|
||||||
24
architectures/README.md
Normal file
24
architectures/README.md
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Named Architectures
|
||||||
|
|
||||||
|
Named frontend architectures are represented here as **configurations of patterns**.
|
||||||
|
|
||||||
|
This prevents architectural labels from becoming indivisible categories.
|
||||||
|
|
||||||
|
Initial candidates:
|
||||||
|
|
||||||
|
- Document Web
|
||||||
|
- SPA
|
||||||
|
- Islands
|
||||||
|
- Server Components
|
||||||
|
- Microfrontends
|
||||||
|
- Local-First
|
||||||
|
|
||||||
|
Each file should eventually answer:
|
||||||
|
|
||||||
|
- What problem family does the architecture address?
|
||||||
|
- Which patterns are essential?
|
||||||
|
- Which are optional?
|
||||||
|
- Which forces make the configuration attractive?
|
||||||
|
- Which forces make it unattractive?
|
||||||
|
- Which architectural variants exist?
|
||||||
|
- Which technologies commonly implement it?
|
||||||
18
architectures/SPA.md
Normal file
18
architectures/SPA.md
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# SPA
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
|
||||||
|
Describe **SPA** as a configuration of independent frontend patterns rather than as a monolithic architectural style.
|
||||||
|
|
||||||
|
## To establish
|
||||||
|
|
||||||
|
- context
|
||||||
|
- dominant forces
|
||||||
|
- pattern configuration
|
||||||
|
- variants
|
||||||
|
- consequences
|
||||||
|
- failure modes
|
||||||
|
- known implementations
|
||||||
|
- sources
|
||||||
18
architectures/ServerComponents.md
Normal file
18
architectures/ServerComponents.md
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# ServerComponents
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
|
||||||
|
Describe **ServerComponents** as a configuration of independent frontend patterns rather than as a monolithic architectural style.
|
||||||
|
|
||||||
|
## To establish
|
||||||
|
|
||||||
|
- context
|
||||||
|
- dominant forces
|
||||||
|
- pattern configuration
|
||||||
|
- variants
|
||||||
|
- consequences
|
||||||
|
- failure modes
|
||||||
|
- known implementations
|
||||||
|
- sources
|
||||||
80
canon/Forces.md
Normal file
80
canon/Forces.md
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
# Forces
|
||||||
|
|
||||||
|
Forces make architectural decisions non-trivial.
|
||||||
|
|
||||||
|
The initial force vocabulary is intentionally broader than frontend implementation concerns.
|
||||||
|
|
||||||
|
## Experience
|
||||||
|
|
||||||
|
- interaction latency
|
||||||
|
- perceived responsiveness
|
||||||
|
- continuity of interaction
|
||||||
|
- discoverability
|
||||||
|
- addressability
|
||||||
|
- accessibility
|
||||||
|
- recoverability
|
||||||
|
- offline usability
|
||||||
|
|
||||||
|
## Information
|
||||||
|
|
||||||
|
- authoritative consistency
|
||||||
|
- freshness
|
||||||
|
- cacheability
|
||||||
|
- conflict probability
|
||||||
|
- collaborative concurrency
|
||||||
|
- data locality
|
||||||
|
- privacy
|
||||||
|
- information completeness
|
||||||
|
|
||||||
|
## Execution
|
||||||
|
|
||||||
|
- first-content latency
|
||||||
|
- hydration cost
|
||||||
|
- client compute cost
|
||||||
|
- server compute cost
|
||||||
|
- bandwidth cost
|
||||||
|
- connection lifetime
|
||||||
|
- network reliability
|
||||||
|
- startup cost
|
||||||
|
- incremental update cost
|
||||||
|
|
||||||
|
## Change
|
||||||
|
|
||||||
|
- feature change frequency
|
||||||
|
- schema change frequency
|
||||||
|
- independent deployability
|
||||||
|
- team autonomy
|
||||||
|
- release coupling
|
||||||
|
- compatibility pressure
|
||||||
|
|
||||||
|
## Engineering
|
||||||
|
|
||||||
|
- implementation complexity
|
||||||
|
- reconciliation complexity
|
||||||
|
- cognitive load
|
||||||
|
- testability
|
||||||
|
- observability
|
||||||
|
- debuggability
|
||||||
|
- portability
|
||||||
|
- security exposure
|
||||||
|
|
||||||
|
## Operations
|
||||||
|
|
||||||
|
- scalability
|
||||||
|
- fault containment
|
||||||
|
- deployment complexity
|
||||||
|
- cache invalidation complexity
|
||||||
|
- telemetry quality
|
||||||
|
- incident recoverability
|
||||||
|
|
||||||
|
## Research questions
|
||||||
|
|
||||||
|
The vocabulary should remain small enough to reason with.
|
||||||
|
|
||||||
|
Research should determine:
|
||||||
|
|
||||||
|
- which forces are independent,
|
||||||
|
- which are merely metrics,
|
||||||
|
- which are compound concepts,
|
||||||
|
- which forces recur across most frontend patterns,
|
||||||
|
- which forces should be modeled as dimensions rather than labels.
|
||||||
219
canon/FrontendPatternLanguage.md
Normal file
219
canon/FrontendPatternLanguage.md
Normal file
|
|
@ -0,0 +1,219 @@
|
||||||
|
# Frontend Pattern Language
|
||||||
|
|
||||||
|
## 1. Premise
|
||||||
|
|
||||||
|
Frontend architecture is best understood as a progression of design decisions made under interacting forces.
|
||||||
|
|
||||||
|
Frameworks and named architectural styles are downstream manifestations of these decisions.
|
||||||
|
|
||||||
|
The pattern language therefore models:
|
||||||
|
|
||||||
|
1. the **context** in which a problem occurs,
|
||||||
|
2. the **forces** that make the problem non-trivial,
|
||||||
|
3. the **pattern** that resolves those forces,
|
||||||
|
4. the **resulting context** created by the resolution,
|
||||||
|
5. the **relations** to other patterns,
|
||||||
|
6. the **known implementations** of the pattern.
|
||||||
|
|
||||||
|
## 2. Fundamental responsibilities
|
||||||
|
|
||||||
|
The initial model uses the following responsibilities.
|
||||||
|
|
||||||
|
### Address
|
||||||
|
|
||||||
|
How application state, resources, views or intents are named and revisited.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- URL,
|
||||||
|
- route,
|
||||||
|
- document identifier,
|
||||||
|
- workspace identifier,
|
||||||
|
- command target.
|
||||||
|
|
||||||
|
### Authority
|
||||||
|
|
||||||
|
Which copy or system is allowed to define truth.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- server authority,
|
||||||
|
- local authority,
|
||||||
|
- replicated authority,
|
||||||
|
- event-log authority.
|
||||||
|
|
||||||
|
### Projection
|
||||||
|
|
||||||
|
How authoritative or selected information becomes perceivable frontend state.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- server-rendered HTML,
|
||||||
|
- client-rendered view,
|
||||||
|
- streamed projection,
|
||||||
|
- static projection.
|
||||||
|
|
||||||
|
### Affordance
|
||||||
|
|
||||||
|
Immediate local state and behavior that makes interaction responsive and intelligible.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- open/closed state,
|
||||||
|
- focus state,
|
||||||
|
- draft input,
|
||||||
|
- pending feedback,
|
||||||
|
- speculative UI.
|
||||||
|
|
||||||
|
### Mutation
|
||||||
|
|
||||||
|
How user intent becomes a proposed or committed state change.
|
||||||
|
|
||||||
|
### Synchronization
|
||||||
|
|
||||||
|
How separated copies discover and exchange changes.
|
||||||
|
|
||||||
|
### Reconciliation
|
||||||
|
|
||||||
|
How conflicting, stale or concurrent observations and mutations are resolved.
|
||||||
|
|
||||||
|
### Composition
|
||||||
|
|
||||||
|
How independently understandable pieces combine into a larger frontend.
|
||||||
|
|
||||||
|
### Execution
|
||||||
|
|
||||||
|
Where and when computation occurs.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- build time,
|
||||||
|
- server,
|
||||||
|
- edge,
|
||||||
|
- browser,
|
||||||
|
- worker,
|
||||||
|
- device.
|
||||||
|
|
||||||
|
## 3. Relation to the Navigation → Content → Affordance model
|
||||||
|
|
||||||
|
The useful decomposition proposed by Ryan Carniato can be interpreted as:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Navigation ≈ Address + mutation orchestration
|
||||||
|
Content ≈ Authority → Projection
|
||||||
|
Affordance ≈ local interaction + speculative state
|
||||||
|
```
|
||||||
|
|
||||||
|
This is a powerful projection for server-authoritative web applications.
|
||||||
|
|
||||||
|
The broader language keeps authority independent so that local-first, peer-to-peer and replicated architectures can be represented without distortion.
|
||||||
|
|
||||||
|
## 4. Pattern families
|
||||||
|
|
||||||
|
Initial families:
|
||||||
|
|
||||||
|
- `authority`
|
||||||
|
- `address`
|
||||||
|
- `projection`
|
||||||
|
- `affordance`
|
||||||
|
- `mutation`
|
||||||
|
- `synchronization`
|
||||||
|
- `composition`
|
||||||
|
- `execution`
|
||||||
|
- `quality`
|
||||||
|
|
||||||
|
Families are navigational aids, not the primary ontology.
|
||||||
|
|
||||||
|
Patterns may participate in several families.
|
||||||
|
|
||||||
|
## 5. Pattern scales
|
||||||
|
|
||||||
|
The initial scale model is:
|
||||||
|
|
||||||
|
```text
|
||||||
|
L0 Experience / Product
|
||||||
|
L1 Application Topology
|
||||||
|
L2 Authority & Distribution
|
||||||
|
L3 Navigation & Projection
|
||||||
|
L4 Feature / Domain Boundaries
|
||||||
|
L5 Components
|
||||||
|
L6 Interaction & State
|
||||||
|
L7 Elements / Implementation
|
||||||
|
```
|
||||||
|
|
||||||
|
The scale prevents unlike patterns from being compared as peers.
|
||||||
|
|
||||||
|
## 6. Generative use
|
||||||
|
|
||||||
|
The language should support a sequence such as:
|
||||||
|
|
||||||
|
```text
|
||||||
|
1. Characterize the experience
|
||||||
|
2. Place authority
|
||||||
|
3. Establish addressability
|
||||||
|
4. Place projection
|
||||||
|
5. Choose communication window
|
||||||
|
6. Add local affordances
|
||||||
|
7. Define mutation and reconciliation
|
||||||
|
8. Establish feature boundaries
|
||||||
|
9. Establish deployment boundaries
|
||||||
|
10. Strengthen quality boundaries
|
||||||
|
11. Measure and adapt
|
||||||
|
```
|
||||||
|
|
||||||
|
This sequence is provisional and must be tested against real systems.
|
||||||
|
|
||||||
|
## 7. Technology mappings
|
||||||
|
|
||||||
|
Technologies should be described as pattern configurations.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Astro
|
||||||
|
implements:
|
||||||
|
Static Projection
|
||||||
|
Server Projection
|
||||||
|
Islands of Interactivity
|
||||||
|
Deferred Client Execution
|
||||||
|
```
|
||||||
|
|
||||||
|
A framework may implement several alternative patterns depending on configuration.
|
||||||
|
|
||||||
|
## 8. Named architectures
|
||||||
|
|
||||||
|
A named architecture is treated as a reusable configuration of patterns, not as an indivisible pattern.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- SPA
|
||||||
|
- Islands
|
||||||
|
- Server Components
|
||||||
|
- Microfrontends
|
||||||
|
- Local-first
|
||||||
|
- Document web
|
||||||
|
- Hypermedia-driven application
|
||||||
|
|
||||||
|
## 9. Evidence maturity
|
||||||
|
|
||||||
|
Every pattern should eventually carry an evidence maturity.
|
||||||
|
|
||||||
|
Suggested levels:
|
||||||
|
|
||||||
|
- `hypothesis`
|
||||||
|
- `emerging`
|
||||||
|
- `established`
|
||||||
|
- `canonical`
|
||||||
|
|
||||||
|
Maturity describes confidence in the pattern description, not desirability.
|
||||||
|
|
||||||
|
## 10. Canon evolution
|
||||||
|
|
||||||
|
Changes to the core canon should prefer:
|
||||||
|
|
||||||
|
1. extending terminology,
|
||||||
|
2. clarifying relations,
|
||||||
|
3. introducing specializations,
|
||||||
|
4. only then redefining existing concepts.
|
||||||
|
|
||||||
|
The objective is a stable conceptual core with an expanding edge.
|
||||||
96
canon/PatternSchema.md
Normal file
96
canon/PatternSchema.md
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
# Pattern Schema
|
||||||
|
|
||||||
|
Each pattern consists of structured metadata plus explanatory prose.
|
||||||
|
|
||||||
|
## Canonical metadata
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
id: FEP-AFF-001
|
||||||
|
name: Optimistic Overlay
|
||||||
|
family:
|
||||||
|
- affordance
|
||||||
|
- mutation
|
||||||
|
scale: L6
|
||||||
|
status: hypothesis
|
||||||
|
|
||||||
|
context:
|
||||||
|
- remote authority
|
||||||
|
- perceptible mutation latency
|
||||||
|
|
||||||
|
forces:
|
||||||
|
improves:
|
||||||
|
- interaction_latency
|
||||||
|
- perceived_responsiveness
|
||||||
|
worsens:
|
||||||
|
- reconciliation_complexity
|
||||||
|
- implementation_complexity
|
||||||
|
|
||||||
|
requires:
|
||||||
|
- identifiable_mutation
|
||||||
|
- authoritative_state
|
||||||
|
|
||||||
|
relations:
|
||||||
|
refines:
|
||||||
|
- local_interaction_state
|
||||||
|
enables:
|
||||||
|
- immediate_feedback
|
||||||
|
conflicts_with:
|
||||||
|
- destructive_uncompensated_mutation
|
||||||
|
|
||||||
|
known_uses: []
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
maturity: hypothesis
|
||||||
|
sources: []
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
## Human-readable structure
|
||||||
|
|
||||||
|
Every pattern should contain:
|
||||||
|
|
||||||
|
```text
|
||||||
|
# Pattern Name
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
## Forces
|
||||||
|
|
||||||
|
## Solution
|
||||||
|
|
||||||
|
## Dynamics
|
||||||
|
|
||||||
|
## Resulting Context
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
## Failure Modes
|
||||||
|
|
||||||
|
## Known Uses
|
||||||
|
|
||||||
|
## Related Patterns
|
||||||
|
|
||||||
|
## Evidence
|
||||||
|
|
||||||
|
## Implementation Notes
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
A pattern should:
|
||||||
|
|
||||||
|
- describe a recurring problem,
|
||||||
|
- expose at least two meaningful forces,
|
||||||
|
- propose a reusable configuration,
|
||||||
|
- explain consequences,
|
||||||
|
- identify failure modes,
|
||||||
|
- create or refine a context in which other patterns apply.
|
||||||
|
|
||||||
|
A useful technique is not automatically a pattern.
|
||||||
|
|
||||||
|
A framework feature is not automatically a pattern.
|
||||||
|
|
||||||
|
A pattern name should identify a reusable architectural idea rather than a product-specific API.
|
||||||
71
canon/Relations.md
Normal file
71
canon/Relations.md
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
# Pattern Relations
|
||||||
|
|
||||||
|
The language is primarily a graph.
|
||||||
|
|
||||||
|
## Core relations
|
||||||
|
|
||||||
|
### requires
|
||||||
|
|
||||||
|
Pattern A depends on the presence of Pattern B or on the context created by B.
|
||||||
|
|
||||||
|
### enables
|
||||||
|
|
||||||
|
Applying A makes B possible or substantially easier.
|
||||||
|
|
||||||
|
### creates-context-for
|
||||||
|
|
||||||
|
A changes the system such that B becomes a relevant subsequent decision.
|
||||||
|
|
||||||
|
This is especially important for generative sequences.
|
||||||
|
|
||||||
|
### refines
|
||||||
|
|
||||||
|
A is a more specific realization of B.
|
||||||
|
|
||||||
|
### generalizes
|
||||||
|
|
||||||
|
A captures the common structure of several more specific patterns.
|
||||||
|
|
||||||
|
### complements
|
||||||
|
|
||||||
|
A and B solve different parts of a larger problem and commonly reinforce each other.
|
||||||
|
|
||||||
|
### alternative-to
|
||||||
|
|
||||||
|
A and B address substantially the same problem using different trade-offs.
|
||||||
|
|
||||||
|
### conflicts-with
|
||||||
|
|
||||||
|
The assumptions or consequences of A and B are structurally incompatible or create severe tension.
|
||||||
|
|
||||||
|
### commonly-combined-with
|
||||||
|
|
||||||
|
Empirical relation based on frequent co-occurrence.
|
||||||
|
|
||||||
|
### implemented-by
|
||||||
|
|
||||||
|
Links a pattern to technologies or concrete mechanisms.
|
||||||
|
|
||||||
|
### observed-in
|
||||||
|
|
||||||
|
Links a pattern to known systems or architectures.
|
||||||
|
|
||||||
|
## Relation semantics
|
||||||
|
|
||||||
|
Relations should be directional where possible.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Server Authority
|
||||||
|
creates-context-for → Server Projection
|
||||||
|
```
|
||||||
|
|
||||||
|
is more informative than:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Server Authority
|
||||||
|
related-to ↔ Server Projection
|
||||||
|
```
|
||||||
|
|
||||||
|
Avoid a generic `related-to` relation unless no stronger relation can be justified.
|
||||||
49
canon/Responsibilities.md
Normal file
49
canon/Responsibilities.md
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
# Responsibilities
|
||||||
|
|
||||||
|
This document defines the current responsibility model used to analyze frontend architectures.
|
||||||
|
|
||||||
|
## Address
|
||||||
|
|
||||||
|
Names or locates application state, resources, views and intents.
|
||||||
|
|
||||||
|
## Authority
|
||||||
|
|
||||||
|
Determines which actor or replica may establish truth.
|
||||||
|
|
||||||
|
## Projection
|
||||||
|
|
||||||
|
Transforms selected state into perceivable representation.
|
||||||
|
|
||||||
|
## Affordance
|
||||||
|
|
||||||
|
Provides the local state and behavior necessary for immediate interaction.
|
||||||
|
|
||||||
|
## Mutation
|
||||||
|
|
||||||
|
Carries user intent toward state change.
|
||||||
|
|
||||||
|
## Synchronization
|
||||||
|
|
||||||
|
Propagates state or change between separated actors.
|
||||||
|
|
||||||
|
## Reconciliation
|
||||||
|
|
||||||
|
Resolves divergence, conflict, stale state or concurrency.
|
||||||
|
|
||||||
|
## Composition
|
||||||
|
|
||||||
|
Combines independently understandable frontend structures.
|
||||||
|
|
||||||
|
## Execution
|
||||||
|
|
||||||
|
Places computation in time and location.
|
||||||
|
|
||||||
|
## Important qualification
|
||||||
|
|
||||||
|
These responsibilities are analytical dimensions, not necessarily software components.
|
||||||
|
|
||||||
|
One module may implement several responsibilities.
|
||||||
|
|
||||||
|
One responsibility may be distributed across many modules.
|
||||||
|
|
||||||
|
The model should therefore not be turned into a mandatory component architecture.
|
||||||
89
canon/Scales.md
Normal file
89
canon/Scales.md
Normal file
|
|
@ -0,0 +1,89 @@
|
||||||
|
# Scales
|
||||||
|
|
||||||
|
Patterns operate at different architectural scales.
|
||||||
|
|
||||||
|
## L0 — Experience / Product
|
||||||
|
|
||||||
|
Concerns the overall interactive system experienced by a user.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- collaborative editor,
|
||||||
|
- transactional workflow,
|
||||||
|
- content publication,
|
||||||
|
- offline field application.
|
||||||
|
|
||||||
|
## L1 — Application Topology
|
||||||
|
|
||||||
|
Large-scale application organization.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- independently deployable frontend,
|
||||||
|
- application shell,
|
||||||
|
- frontend/backend partitioning.
|
||||||
|
|
||||||
|
## L2 — Authority & Distribution
|
||||||
|
|
||||||
|
Placement and replication of authoritative state.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- server authority,
|
||||||
|
- local authority,
|
||||||
|
- replicated authority.
|
||||||
|
|
||||||
|
## L3 — Navigation & Projection
|
||||||
|
|
||||||
|
Addressability, routing, rendering and delivery of perceivable state.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- URL as state,
|
||||||
|
- server projection,
|
||||||
|
- client projection,
|
||||||
|
- streaming projection.
|
||||||
|
|
||||||
|
## L4 — Feature / Domain Boundaries
|
||||||
|
|
||||||
|
Functional decomposition.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- vertical feature slice,
|
||||||
|
- bounded frontend feature,
|
||||||
|
- backend for frontend.
|
||||||
|
|
||||||
|
## L5 — Components
|
||||||
|
|
||||||
|
Reusable interaction and presentation structures.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- presentation model,
|
||||||
|
- compound component,
|
||||||
|
- controlled component.
|
||||||
|
|
||||||
|
## L6 — Interaction & State
|
||||||
|
|
||||||
|
Fine-grained interaction behavior.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- local interaction state,
|
||||||
|
- optimistic overlay,
|
||||||
|
- pending state.
|
||||||
|
|
||||||
|
## L7 — Elements / Implementation
|
||||||
|
|
||||||
|
Low-level implementation structures.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- lazy boundary,
|
||||||
|
- error boundary,
|
||||||
|
- focus restoration.
|
||||||
|
|
||||||
|
## Rule
|
||||||
|
|
||||||
|
Patterns from different scales may relate strongly, but should not be treated as equivalent alternatives merely because they are all called "frontend patterns".
|
||||||
104
patterns/README.md
Normal file
104
patterns/README.md
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
# Patterns
|
||||||
|
|
||||||
|
This directory contains canonical frontend patterns.
|
||||||
|
|
||||||
|
Each pattern should conform to `canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
## Initial families
|
||||||
|
|
||||||
|
- `authority/`
|
||||||
|
- `address/`
|
||||||
|
- `projection/`
|
||||||
|
- `affordance/`
|
||||||
|
- `mutation/`
|
||||||
|
- `synchronization/`
|
||||||
|
- `composition/`
|
||||||
|
- `execution/`
|
||||||
|
- `quality/`
|
||||||
|
|
||||||
|
## Candidate seed patterns
|
||||||
|
|
||||||
|
### Authority
|
||||||
|
|
||||||
|
- Server Authority
|
||||||
|
- Local Authority
|
||||||
|
- Replicated Authority
|
||||||
|
- Event-Log Authority
|
||||||
|
- Single Writer
|
||||||
|
- Derived State
|
||||||
|
|
||||||
|
### Address
|
||||||
|
|
||||||
|
- URL as Application State
|
||||||
|
- Resource Address
|
||||||
|
- Hierarchical Route
|
||||||
|
- Progressive Navigation
|
||||||
|
|
||||||
|
### Projection
|
||||||
|
|
||||||
|
- Static Projection
|
||||||
|
- Server Projection
|
||||||
|
- Client Projection
|
||||||
|
- Hybrid Projection
|
||||||
|
- Streaming Projection
|
||||||
|
- Islands of Interactivity
|
||||||
|
- Server Components
|
||||||
|
- Progressive Hydration
|
||||||
|
- Resumable UI
|
||||||
|
|
||||||
|
### Affordance
|
||||||
|
|
||||||
|
- Local Interaction State
|
||||||
|
- Immediate Feedback
|
||||||
|
- Pending State
|
||||||
|
- Optimistic Overlay
|
||||||
|
- Undoable Intent
|
||||||
|
- Speculative Interaction
|
||||||
|
|
||||||
|
### Mutation & Synchronization
|
||||||
|
|
||||||
|
- Command Mutation
|
||||||
|
- Form Mutation
|
||||||
|
- Idempotent Mutation
|
||||||
|
- Invalidate and Reproject
|
||||||
|
- Pull Synchronization
|
||||||
|
- Push Synchronization
|
||||||
|
- Persistent Subscription
|
||||||
|
- Conflict-Free Merge
|
||||||
|
- Explicit Conflict
|
||||||
|
|
||||||
|
### Composition
|
||||||
|
|
||||||
|
- Presentation / Domain Separation
|
||||||
|
- Presentation Model
|
||||||
|
- Vertical Feature Slice
|
||||||
|
- Public Module Surface
|
||||||
|
- Independent Feature Boundary
|
||||||
|
- Microfrontend
|
||||||
|
- Backend for Frontend
|
||||||
|
- Design System
|
||||||
|
|
||||||
|
### Execution
|
||||||
|
|
||||||
|
- Build-Time Execution
|
||||||
|
- Server Execution
|
||||||
|
- Edge Execution
|
||||||
|
- Client Execution
|
||||||
|
- Deferred Execution
|
||||||
|
- Code Split
|
||||||
|
- Lazy Load
|
||||||
|
- Independent Deployment
|
||||||
|
|
||||||
|
### Quality
|
||||||
|
|
||||||
|
- Progressive Enhancement
|
||||||
|
- Accessible by Construction
|
||||||
|
- Failure Boundary
|
||||||
|
- Async Boundary
|
||||||
|
- Security Boundary
|
||||||
|
- Privacy Boundary
|
||||||
|
- Performance Budget
|
||||||
|
- Observable Interaction
|
||||||
|
- Recoverable Interaction
|
||||||
|
|
||||||
|
These names are candidates. Research should consolidate, rename, split or reject them as needed.
|
||||||
7
patterns/address/README.md
Normal file
7
patterns/address/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Address Patterns
|
||||||
|
|
||||||
|
Candidate and canonical patterns concerning **address**.
|
||||||
|
|
||||||
|
Patterns in this directory should conform to `../../canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
This family is provisional: patterns may later move, participate in multiple families, or be represented primarily through graph metadata.
|
||||||
7
patterns/affordance/README.md
Normal file
7
patterns/affordance/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Affordance Patterns
|
||||||
|
|
||||||
|
Candidate and canonical patterns concerning **affordance**.
|
||||||
|
|
||||||
|
Patterns in this directory should conform to `../../canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
This family is provisional: patterns may later move, participate in multiple families, or be represented primarily through graph metadata.
|
||||||
7
patterns/authority/README.md
Normal file
7
patterns/authority/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Authority Patterns
|
||||||
|
|
||||||
|
Candidate and canonical patterns concerning **authority**.
|
||||||
|
|
||||||
|
Patterns in this directory should conform to `../../canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
This family is provisional: patterns may later move, participate in multiple families, or be represented primarily through graph metadata.
|
||||||
7
patterns/composition/README.md
Normal file
7
patterns/composition/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Composition Patterns
|
||||||
|
|
||||||
|
Candidate and canonical patterns concerning **composition**.
|
||||||
|
|
||||||
|
Patterns in this directory should conform to `../../canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
This family is provisional: patterns may later move, participate in multiple families, or be represented primarily through graph metadata.
|
||||||
7
patterns/execution/README.md
Normal file
7
patterns/execution/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Execution Patterns
|
||||||
|
|
||||||
|
Candidate and canonical patterns concerning **execution**.
|
||||||
|
|
||||||
|
Patterns in this directory should conform to `../../canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
This family is provisional: patterns may later move, participate in multiple families, or be represented primarily through graph metadata.
|
||||||
7
patterns/mutation/README.md
Normal file
7
patterns/mutation/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Mutation Patterns
|
||||||
|
|
||||||
|
Candidate and canonical patterns concerning **mutation**.
|
||||||
|
|
||||||
|
Patterns in this directory should conform to `../../canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
This family is provisional: patterns may later move, participate in multiple families, or be represented primarily through graph metadata.
|
||||||
7
patterns/projection/README.md
Normal file
7
patterns/projection/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Projection Patterns
|
||||||
|
|
||||||
|
Candidate and canonical patterns concerning **projection**.
|
||||||
|
|
||||||
|
Patterns in this directory should conform to `../../canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
This family is provisional: patterns may later move, participate in multiple families, or be represented primarily through graph metadata.
|
||||||
7
patterns/quality/README.md
Normal file
7
patterns/quality/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Quality Patterns
|
||||||
|
|
||||||
|
Candidate and canonical patterns concerning **quality**.
|
||||||
|
|
||||||
|
Patterns in this directory should conform to `../../canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
This family is provisional: patterns may later move, participate in multiple families, or be represented primarily through graph metadata.
|
||||||
7
patterns/synchronization/README.md
Normal file
7
patterns/synchronization/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Synchronization Patterns
|
||||||
|
|
||||||
|
Candidate and canonical patterns concerning **synchronization**.
|
||||||
|
|
||||||
|
Patterns in this directory should conform to `../../canon/PatternSchema.md`.
|
||||||
|
|
||||||
|
This family is provisional: patterns may later move, participate in multiple families, or be represented primarily through graph metadata.
|
||||||
18
research/README.md
Normal file
18
research/README.md
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Research
|
||||||
|
|
||||||
|
Research material supports the canon but is kept separate from canonical patterns.
|
||||||
|
|
||||||
|
The structure follows the C3 research deliverable model where useful:
|
||||||
|
|
||||||
|
- `catalog/` — normalized inventories and indices.
|
||||||
|
- `compendium/` — explanatory synthesis of established knowledge.
|
||||||
|
- `concepts/` — emerging models and hypotheses.
|
||||||
|
|
||||||
|
Additional directories:
|
||||||
|
|
||||||
|
- `cases/` — focused analysis of articles, systems or architectural schools.
|
||||||
|
- `plan/` — research program, methods and open questions.
|
||||||
|
|
||||||
|
Research material may be provisional.
|
||||||
|
|
||||||
|
Promotion into the canon should happen only after the concept has been reconciled with competing models and tested against multiple frontend architectures.
|
||||||
79
research/cases/CarniatoGrandUnifyingArchitecture.md
Normal file
79
research/cases/CarniatoGrandUnifyingArchitecture.md
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
# Case Study — The Grand Unifying Architecture of Frontend
|
||||||
|
|
||||||
|
Status: initial research stub
|
||||||
|
|
||||||
|
Source:
|
||||||
|
Ryan Carniato, "The Grand Unifying Architecture of Frontend".
|
||||||
|
|
||||||
|
## Why this source matters
|
||||||
|
|
||||||
|
The article attempts to unify several modern frontend architectures beneath framework-specific terminology.
|
||||||
|
|
||||||
|
Its most useful conceptual move is the decomposition:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Navigation → Content → Affordance
|
||||||
|
```
|
||||||
|
|
||||||
|
with a characteristic movement:
|
||||||
|
|
||||||
|
```text
|
||||||
|
client → server → client
|
||||||
|
```
|
||||||
|
|
||||||
|
for server-authoritative applications.
|
||||||
|
|
||||||
|
## Initial interpretation
|
||||||
|
|
||||||
|
### Navigation
|
||||||
|
|
||||||
|
Contains aspects of:
|
||||||
|
|
||||||
|
- addressability,
|
||||||
|
- routing,
|
||||||
|
- user intent,
|
||||||
|
- mutation initiation.
|
||||||
|
|
||||||
|
### Content
|
||||||
|
|
||||||
|
Contains aspects of:
|
||||||
|
|
||||||
|
- authority,
|
||||||
|
- server-side state,
|
||||||
|
- projection.
|
||||||
|
|
||||||
|
### Affordance
|
||||||
|
|
||||||
|
Contains aspects of:
|
||||||
|
|
||||||
|
- local interaction state,
|
||||||
|
- speculative state,
|
||||||
|
- immediate feedback.
|
||||||
|
|
||||||
|
## Main qualification
|
||||||
|
|
||||||
|
The model strongly fits server-authoritative web applications.
|
||||||
|
|
||||||
|
It should not be promoted unchanged into the general canon because:
|
||||||
|
|
||||||
|
- local-first systems may treat local data as primary,
|
||||||
|
- replicated systems may have multiple authorities,
|
||||||
|
- peer-to-peer systems may lack a distinguished server,
|
||||||
|
- microfrontend concerns cut across this axis,
|
||||||
|
- internal modularity is largely orthogonal to it.
|
||||||
|
|
||||||
|
## Research tasks
|
||||||
|
|
||||||
|
- extract concrete architecture examples from the article,
|
||||||
|
- identify all implicit assumptions,
|
||||||
|
- map each example to responsibility dimensions,
|
||||||
|
- identify candidate patterns,
|
||||||
|
- compare against:
|
||||||
|
- local-first,
|
||||||
|
- HTMX/hypermedia,
|
||||||
|
- SPA,
|
||||||
|
- server components,
|
||||||
|
- islands,
|
||||||
|
- LiveView-style persistent server interaction,
|
||||||
|
- identify where the model is descriptive versus normative,
|
||||||
|
- determine which concepts should enter the canon.
|
||||||
24
research/catalog/PatternCandidateCatalog.md
Normal file
24
research/catalog/PatternCandidateCatalog.md
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Pattern Candidate Catalog
|
||||||
|
|
||||||
|
This file tracks concepts before promotion into canonical pattern files.
|
||||||
|
|
||||||
|
| Candidate | Family | Scale | Status | Main force |
|
||||||
|
|---|---|---:|---|---|
|
||||||
|
| Server Authority | authority | L2 | seed | authoritative consistency |
|
||||||
|
| Local Authority | authority | L2 | seed | offline usability |
|
||||||
|
| Replicated Authority | authority | L2 | seed | collaborative concurrency |
|
||||||
|
| URL as Application State | address | L3 | seed | addressability |
|
||||||
|
| Server Projection | projection | L3 | seed | client compute / delivery |
|
||||||
|
| Client Projection | projection | L3 | seed | interaction locality |
|
||||||
|
| Streaming Projection | projection | L3 | seed | first-content latency |
|
||||||
|
| Islands of Interactivity | projection | L3 | seed | client execution cost |
|
||||||
|
| Local Interaction State | affordance | L6 | seed | responsiveness |
|
||||||
|
| Optimistic Overlay | affordance | L6 | seed | interaction latency |
|
||||||
|
| Invalidate and Reproject | synchronization | L3/L6 | seed | freshness |
|
||||||
|
| Persistent Subscription | synchronization | L3 | seed | update latency |
|
||||||
|
| Vertical Feature Slice | composition | L4 | seed | change locality |
|
||||||
|
| Independent Feature Boundary | composition | L4 | seed | team autonomy |
|
||||||
|
| Progressive Enhancement | quality | cross-scale | seed | resilience/accessibility |
|
||||||
|
| Failure Boundary | quality | L5/L6 | seed | fault containment |
|
||||||
|
|
||||||
|
`seed` means "worth researching", not "accepted into the canon".
|
||||||
31
research/catalog/SourceCatalog.md
Normal file
31
research/catalog/SourceCatalog.md
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Source Catalog
|
||||||
|
|
||||||
|
Initial source families to populate.
|
||||||
|
|
||||||
|
| Family | Representative sources | Research purpose |
|
||||||
|
|---|---|---|
|
||||||
|
| Pattern languages | Christopher Alexander, Hillside/PLoP literature | Pattern form, relations, generative sequences |
|
||||||
|
| GUI architecture | Martin Fowler, MVC/MVP/Presentation Model | Presentation/domain/state separation |
|
||||||
|
| Unidirectional state | Flux, Redux, Elm | State transition and dependency direction |
|
||||||
|
| Hypermedia | REST, HTML forms, HTMX | Navigation, mutation, server projection |
|
||||||
|
| Rendering | web.dev, framework docs, Patterns.dev | CSR/SSR/SSG/hydration/islands/streaming |
|
||||||
|
| Local-first | Ink & Switch and related work | Local authority, sync, conflict handling |
|
||||||
|
| Distributed state | CRDT/event sourcing/sync literature | Reconciliation and replication |
|
||||||
|
| Modularity | Feature-Sliced Design | Feature boundaries and dependency rules |
|
||||||
|
| Organizational architecture | Microfrontend literature | Independent ownership/deployment |
|
||||||
|
| Quality | WCAG, progressive enhancement, web performance | Cross-cutting architectural forces |
|
||||||
|
|
||||||
|
## Catalog policy
|
||||||
|
|
||||||
|
Each source should eventually capture:
|
||||||
|
|
||||||
|
- source identity,
|
||||||
|
- date/version,
|
||||||
|
- scope,
|
||||||
|
- vocabulary used,
|
||||||
|
- candidate patterns,
|
||||||
|
- dominant forces,
|
||||||
|
- assumptions,
|
||||||
|
- contradictions,
|
||||||
|
- known implementations,
|
||||||
|
- evidence quality.
|
||||||
31
research/compendium/FrontendArchitectureCompendium.md
Normal file
31
research/compendium/FrontendArchitectureCompendium.md
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Frontend Architecture Compendium
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Provide a continuously improving synthesis of the major ideas used to reason about frontend architecture.
|
||||||
|
|
||||||
|
The compendium explains schools of thought without treating any one of them as the canonical model.
|
||||||
|
|
||||||
|
## Initial chapters
|
||||||
|
|
||||||
|
1. From GUI architecture to web architecture
|
||||||
|
2. Navigation and the document web
|
||||||
|
3. Client/server authority
|
||||||
|
4. State management and unidirectional flow
|
||||||
|
5. Rendering and projection
|
||||||
|
6. Hydration, islands and resumability
|
||||||
|
7. Server components and streamed UI
|
||||||
|
8. Hypermedia-driven applications
|
||||||
|
9. Local-first and replicated frontends
|
||||||
|
10. Composition and feature slicing
|
||||||
|
11. Microfrontends and organizational boundaries
|
||||||
|
12. Accessibility, resilience and progressive enhancement
|
||||||
|
13. Performance as architecture
|
||||||
|
14. Frontend observability and recoverability
|
||||||
|
15. Pattern languages as a unifying representation
|
||||||
|
|
||||||
|
## Editorial rule
|
||||||
|
|
||||||
|
The compendium may explain technologies and historical movements in detail.
|
||||||
|
|
||||||
|
Canonical patterns should remain technology-independent whenever possible.
|
||||||
42
research/concepts/GenerativeSequence.md
Normal file
42
research/concepts/GenerativeSequence.md
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
# Concept — Generative Frontend Architecture Sequence
|
||||||
|
|
||||||
|
Status: hypothesis
|
||||||
|
|
||||||
|
## Candidate sequence
|
||||||
|
|
||||||
|
```text
|
||||||
|
Characterize Experience
|
||||||
|
→ Place Authority
|
||||||
|
→ Establish Addressability
|
||||||
|
→ Place Projection
|
||||||
|
→ Choose Communication Window
|
||||||
|
→ Add Local Affordances
|
||||||
|
→ Define Mutation & Reconciliation
|
||||||
|
→ Establish Feature Boundaries
|
||||||
|
→ Establish Deployment Boundaries
|
||||||
|
→ Strengthen Quality Boundaries
|
||||||
|
→ Measure & Adapt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Hypothesis
|
||||||
|
|
||||||
|
Ordering matters.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- authority influences synchronization,
|
||||||
|
- addressability influences navigation and projection,
|
||||||
|
- projection placement influences execution cost,
|
||||||
|
- local affordances influence mutation/reconciliation requirements,
|
||||||
|
- feature boundaries may later justify deployment boundaries.
|
||||||
|
|
||||||
|
The language should capture these causal dependencies rather than present all patterns as an unordered menu.
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
|
||||||
|
Test the sequence against contrasting frontend systems and record:
|
||||||
|
|
||||||
|
- decisions that occur too early,
|
||||||
|
- missing decisions,
|
||||||
|
- unavoidable feedback loops,
|
||||||
|
- architecture types that require alternate branches.
|
||||||
42
research/concepts/ResponsibilityModel.md
Normal file
42
research/concepts/ResponsibilityModel.md
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
# Concept — Frontend Responsibility Model
|
||||||
|
|
||||||
|
Status: hypothesis
|
||||||
|
|
||||||
|
## Proposition
|
||||||
|
|
||||||
|
Frontend architectures can be usefully analyzed through nine responsibilities:
|
||||||
|
|
||||||
|
1. Address
|
||||||
|
2. Authority
|
||||||
|
3. Projection
|
||||||
|
4. Affordance
|
||||||
|
5. Mutation
|
||||||
|
6. Synchronization
|
||||||
|
7. Reconciliation
|
||||||
|
8. Composition
|
||||||
|
9. Execution
|
||||||
|
|
||||||
|
These are dimensions of responsibility, not mandatory modules.
|
||||||
|
|
||||||
|
## Value
|
||||||
|
|
||||||
|
The model appears broad enough to describe:
|
||||||
|
|
||||||
|
- document-oriented web applications,
|
||||||
|
- SPAs,
|
||||||
|
- server-rendered systems,
|
||||||
|
- islands,
|
||||||
|
- server components,
|
||||||
|
- microfrontends,
|
||||||
|
- offline-first applications,
|
||||||
|
- local-first applications,
|
||||||
|
- collaborative replicated applications.
|
||||||
|
|
||||||
|
## Research burden
|
||||||
|
|
||||||
|
The model must be challenged for:
|
||||||
|
|
||||||
|
- redundancy,
|
||||||
|
- missing responsibilities,
|
||||||
|
- ambiguous boundaries,
|
||||||
|
- inability to distinguish materially different architectures.
|
||||||
28
research/plan/OpenQuestions.md
Normal file
28
research/plan/OpenQuestions.md
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Open Questions
|
||||||
|
|
||||||
|
## Core ontology
|
||||||
|
|
||||||
|
- Is `Authority → Projection → Affordance` a better primary axis than traditional "state management" terminology?
|
||||||
|
- Should `Mutation` represent intent, transport, state transition, or be split?
|
||||||
|
- Is `Reconciliation` independent enough to be a first-class responsibility?
|
||||||
|
- Should `Communication Window` become a canonical dimension?
|
||||||
|
|
||||||
|
## Pattern language
|
||||||
|
|
||||||
|
- What qualifies as a pattern rather than a technique?
|
||||||
|
- How much implementation detail belongs in canonical patterns?
|
||||||
|
- How do we represent patterns that only make sense at one scale?
|
||||||
|
- How should pattern relations be validated?
|
||||||
|
|
||||||
|
## Agentic use
|
||||||
|
|
||||||
|
- Which metadata is necessary for useful pattern retrieval?
|
||||||
|
- Should the pattern graph be exported as JSON/YAML/RDF?
|
||||||
|
- Can force matching be made quantitative without creating false precision?
|
||||||
|
- Can architecture review be expressed as unresolved-force detection?
|
||||||
|
|
||||||
|
## Evidence
|
||||||
|
|
||||||
|
- What makes a frontend pattern "established"?
|
||||||
|
- Should known uses be manually curated or automatically mined?
|
||||||
|
- How should contradictory source claims be represented?
|
||||||
395
research/plan/ResearchProgram.md
Normal file
395
research/plan/ResearchProgram.md
Normal file
|
|
@ -0,0 +1,395 @@
|
||||||
|
# Frontend Patterns Research Program
|
||||||
|
|
||||||
|
## 1. Objective
|
||||||
|
|
||||||
|
Develop a coherent Alexander-style pattern language for frontend architecture and design that is useful to both human practitioners and software agents.
|
||||||
|
|
||||||
|
The work should move from source collection toward:
|
||||||
|
|
||||||
|
1. common vocabulary,
|
||||||
|
2. recurring forces,
|
||||||
|
3. candidate patterns,
|
||||||
|
4. pattern relations,
|
||||||
|
5. generative sequences,
|
||||||
|
6. architecture decompositions,
|
||||||
|
7. technology mappings,
|
||||||
|
8. machine-readable retrieval and reasoning.
|
||||||
|
|
||||||
|
## 2. Research thesis
|
||||||
|
|
||||||
|
Frontend architecture is not fundamentally organized around frameworks.
|
||||||
|
|
||||||
|
It is organized around recurring decisions concerning:
|
||||||
|
|
||||||
|
- authority,
|
||||||
|
- addressability,
|
||||||
|
- projection,
|
||||||
|
- interaction,
|
||||||
|
- mutation,
|
||||||
|
- synchronization,
|
||||||
|
- reconciliation,
|
||||||
|
- composition,
|
||||||
|
- execution,
|
||||||
|
- quality boundaries.
|
||||||
|
|
||||||
|
Named architectures and frameworks are configurations or implementations of these decisions.
|
||||||
|
|
||||||
|
## 3. First research case
|
||||||
|
|
||||||
|
Use Ryan Carniato's "The Grand Unifying Architecture of Frontend" as the first extraction exercise.
|
||||||
|
|
||||||
|
Research tasks:
|
||||||
|
|
||||||
|
1. reconstruct its Navigation → Content → Affordance model,
|
||||||
|
2. identify implicit assumptions,
|
||||||
|
3. extract candidate patterns,
|
||||||
|
4. identify the forces each pattern resolves,
|
||||||
|
5. identify where server-authority assumptions cease to hold,
|
||||||
|
6. compare against local-first architectures,
|
||||||
|
7. compare against hypermedia architectures,
|
||||||
|
8. compare against SPA and server-component architectures,
|
||||||
|
9. map findings into the responsibility model,
|
||||||
|
10. retain useful concepts without treating the article as the canonical ontology.
|
||||||
|
|
||||||
|
## 4. Research streams
|
||||||
|
|
||||||
|
### Stream A — Historical GUI architecture
|
||||||
|
|
||||||
|
Study:
|
||||||
|
|
||||||
|
- MVC,
|
||||||
|
- MVP,
|
||||||
|
- Presentation Model,
|
||||||
|
- Presentation / Domain Separation,
|
||||||
|
- Flux / Redux,
|
||||||
|
- Elm architecture,
|
||||||
|
- event-driven UI.
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Identify durable state, dependency and interaction patterns that predate current web frameworks.
|
||||||
|
|
||||||
|
### Stream B — Web navigation and hypermedia
|
||||||
|
|
||||||
|
Study:
|
||||||
|
|
||||||
|
- document web,
|
||||||
|
- REST/hypermedia,
|
||||||
|
- progressive enhancement,
|
||||||
|
- HTML forms,
|
||||||
|
- HTMX-style server interaction,
|
||||||
|
- browser navigation semantics.
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Understand addressability, navigation, mutation and server projection.
|
||||||
|
|
||||||
|
### Stream C — Rendering and execution
|
||||||
|
|
||||||
|
Study:
|
||||||
|
|
||||||
|
- CSR,
|
||||||
|
- SSR,
|
||||||
|
- SSG,
|
||||||
|
- hydration,
|
||||||
|
- partial hydration,
|
||||||
|
- islands,
|
||||||
|
- server components,
|
||||||
|
- resumability,
|
||||||
|
- streaming,
|
||||||
|
- edge execution.
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Separate projection patterns from execution placement and delivery mechanisms.
|
||||||
|
|
||||||
|
### Stream D — State authority and synchronization
|
||||||
|
|
||||||
|
Study:
|
||||||
|
|
||||||
|
- client/server state,
|
||||||
|
- remote caches,
|
||||||
|
- optimistic UI,
|
||||||
|
- local-first,
|
||||||
|
- CRDTs,
|
||||||
|
- event sourcing,
|
||||||
|
- offline-first,
|
||||||
|
- subscriptions,
|
||||||
|
- push/pull synchronization.
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Establish a coherent authority/synchronization/reconciliation language.
|
||||||
|
|
||||||
|
### Stream E — Composition and organizational architecture
|
||||||
|
|
||||||
|
Study:
|
||||||
|
|
||||||
|
- component composition,
|
||||||
|
- feature slicing,
|
||||||
|
- microfrontends,
|
||||||
|
- design systems,
|
||||||
|
- frontend platform architecture,
|
||||||
|
- backend-for-frontend patterns,
|
||||||
|
- monorepos and deployment independence.
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Separate software composition from ownership and deployment boundaries.
|
||||||
|
|
||||||
|
### Stream F — Quality patterns
|
||||||
|
|
||||||
|
Study:
|
||||||
|
|
||||||
|
- accessibility,
|
||||||
|
- progressive enhancement,
|
||||||
|
- performance,
|
||||||
|
- fault containment,
|
||||||
|
- security,
|
||||||
|
- privacy,
|
||||||
|
- observability,
|
||||||
|
- recovery.
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Represent cross-cutting frontend qualities as architectural patterns and forces rather than afterthoughts.
|
||||||
|
|
||||||
|
## 5. Research method
|
||||||
|
|
||||||
|
For each source or architecture:
|
||||||
|
|
||||||
|
### Step 1 — Extract claims
|
||||||
|
|
||||||
|
Record what the source says without prematurely normalizing terminology.
|
||||||
|
|
||||||
|
### Step 2 — Identify forces
|
||||||
|
|
||||||
|
Ask what competing constraints make the proposed solution useful.
|
||||||
|
|
||||||
|
### Step 3 — Extract candidate patterns
|
||||||
|
|
||||||
|
Look for recurring configurations rather than named technologies.
|
||||||
|
|
||||||
|
### Step 4 — Normalize vocabulary
|
||||||
|
|
||||||
|
Map source-specific language into the current canon where possible.
|
||||||
|
|
||||||
|
### Step 5 — Find counterexamples
|
||||||
|
|
||||||
|
Test whether the pattern still holds under:
|
||||||
|
|
||||||
|
- offline operation,
|
||||||
|
- local authority,
|
||||||
|
- real-time collaboration,
|
||||||
|
- very low interaction density,
|
||||||
|
- high interaction density,
|
||||||
|
- independent deployment,
|
||||||
|
- unreliable networks,
|
||||||
|
- strong accessibility requirements.
|
||||||
|
|
||||||
|
### Step 6 — Establish relations
|
||||||
|
|
||||||
|
Record:
|
||||||
|
|
||||||
|
- requires,
|
||||||
|
- enables,
|
||||||
|
- refines,
|
||||||
|
- alternatives,
|
||||||
|
- conflicts,
|
||||||
|
- resulting contexts.
|
||||||
|
|
||||||
|
### Step 7 — Test generativity
|
||||||
|
|
||||||
|
Ask whether the pattern helps produce a next architectural decision.
|
||||||
|
|
||||||
|
### Step 8 — Promote cautiously
|
||||||
|
|
||||||
|
Move a concept into `patterns/` only when it is sufficiently stable and reusable.
|
||||||
|
|
||||||
|
## 6. Initial source families
|
||||||
|
|
||||||
|
Create a source catalog spanning:
|
||||||
|
|
||||||
|
- Christopher Alexander and pattern-language literature,
|
||||||
|
- Martin Fowler GUI architecture,
|
||||||
|
- REST and hypermedia literature,
|
||||||
|
- Redux / Elm / Flux,
|
||||||
|
- Feature-Sliced Design,
|
||||||
|
- microfrontends,
|
||||||
|
- local-first,
|
||||||
|
- web.dev rendering literature,
|
||||||
|
- Patterns.dev,
|
||||||
|
- framework architectural documentation,
|
||||||
|
- accessibility and progressive-enhancement literature,
|
||||||
|
- distributed-systems synchronization concepts.
|
||||||
|
|
||||||
|
## 7. Initial pattern extraction targets
|
||||||
|
|
||||||
|
Priority candidate patterns:
|
||||||
|
|
||||||
|
### Authority
|
||||||
|
|
||||||
|
- Server Authority
|
||||||
|
- Local Authority
|
||||||
|
- Replicated Authority
|
||||||
|
- Derived State
|
||||||
|
- Single Writer
|
||||||
|
|
||||||
|
### Address & navigation
|
||||||
|
|
||||||
|
- URL as Application State
|
||||||
|
- Resource Address
|
||||||
|
- Hierarchical Route
|
||||||
|
- Progressive Navigation
|
||||||
|
|
||||||
|
### Projection
|
||||||
|
|
||||||
|
- Static Projection
|
||||||
|
- Server Projection
|
||||||
|
- Client Projection
|
||||||
|
- Streaming Projection
|
||||||
|
- Islands of Interactivity
|
||||||
|
|
||||||
|
### Interaction
|
||||||
|
|
||||||
|
- Local Interaction State
|
||||||
|
- Immediate Feedback
|
||||||
|
- Pending State
|
||||||
|
- Optimistic Overlay
|
||||||
|
|
||||||
|
### Synchronization
|
||||||
|
|
||||||
|
- Invalidate and Reproject
|
||||||
|
- Pull Synchronization
|
||||||
|
- Push Synchronization
|
||||||
|
- Persistent Subscription
|
||||||
|
- Conflict-Free Merge
|
||||||
|
- Explicit Conflict
|
||||||
|
|
||||||
|
### Composition
|
||||||
|
|
||||||
|
- Presentation / Domain Separation
|
||||||
|
- Vertical Feature Slice
|
||||||
|
- Independent Feature Boundary
|
||||||
|
- Backend for Frontend
|
||||||
|
|
||||||
|
### Quality
|
||||||
|
|
||||||
|
- Progressive Enhancement
|
||||||
|
- Failure Boundary
|
||||||
|
- Accessible by Construction
|
||||||
|
- Performance Budget
|
||||||
|
- Observable Interaction
|
||||||
|
|
||||||
|
## 8. Validation architectures
|
||||||
|
|
||||||
|
The emerging language should be tested against at least these application types:
|
||||||
|
|
||||||
|
1. mostly-static publication,
|
||||||
|
2. e-commerce storefront,
|
||||||
|
3. administrative CRUD application,
|
||||||
|
4. high-interaction SaaS workspace,
|
||||||
|
5. real-time dashboard,
|
||||||
|
6. collaborative editor,
|
||||||
|
7. offline field application,
|
||||||
|
8. local-first personal tool,
|
||||||
|
9. large microfrontend estate,
|
||||||
|
10. mobile-web/PWA application.
|
||||||
|
|
||||||
|
A useful language should explain all ten without forcing them into one preferred architecture.
|
||||||
|
|
||||||
|
## 9. Agentic use cases
|
||||||
|
|
||||||
|
The infospace should eventually support prompts such as:
|
||||||
|
|
||||||
|
> Given this application description, identify the dominant forces and propose applicable patterns.
|
||||||
|
|
||||||
|
> Explain why the current architecture exhibits this failure mode.
|
||||||
|
|
||||||
|
> Which patterns are incompatible with our offline requirement?
|
||||||
|
|
||||||
|
> Decompose this framework architecture into technology-independent patterns.
|
||||||
|
|
||||||
|
> What pattern should be considered next after choosing server authority and streaming projection?
|
||||||
|
|
||||||
|
> Compare two architectures in terms of forces, not framework features.
|
||||||
|
|
||||||
|
This requires graph-friendly metadata and stable identifiers.
|
||||||
|
|
||||||
|
## 10. Initial milestones
|
||||||
|
|
||||||
|
### M0 — Scaffold
|
||||||
|
|
||||||
|
- repository structure,
|
||||||
|
- intent,
|
||||||
|
- responsibility model,
|
||||||
|
- force vocabulary,
|
||||||
|
- relation vocabulary,
|
||||||
|
- pattern schema,
|
||||||
|
- research method.
|
||||||
|
|
||||||
|
### M1 — Seed corpus
|
||||||
|
|
||||||
|
- source catalog,
|
||||||
|
- Carniato case analysis,
|
||||||
|
- historical GUI architecture review,
|
||||||
|
- local-first review,
|
||||||
|
- rendering architecture review.
|
||||||
|
|
||||||
|
### M2 — First canonical language
|
||||||
|
|
||||||
|
- 20–30 candidate patterns,
|
||||||
|
- reviewed force vocabulary,
|
||||||
|
- relation graph,
|
||||||
|
- first architecture decompositions.
|
||||||
|
|
||||||
|
### M3 — Generative sequences
|
||||||
|
|
||||||
|
- general web application,
|
||||||
|
- content site,
|
||||||
|
- transactional application,
|
||||||
|
- collaborative application,
|
||||||
|
- local-first application.
|
||||||
|
|
||||||
|
### M4 — Agentic reference surface
|
||||||
|
|
||||||
|
- normalized metadata,
|
||||||
|
- stable identifiers,
|
||||||
|
- pattern graph export,
|
||||||
|
- query examples,
|
||||||
|
- retrieval/evaluation fixtures.
|
||||||
|
|
||||||
|
### M5 — Empirical refinement
|
||||||
|
|
||||||
|
- test language against real repositories,
|
||||||
|
- collect pattern co-occurrence,
|
||||||
|
- identify missing forces,
|
||||||
|
- identify misleading or redundant patterns,
|
||||||
|
- revise maturity levels.
|
||||||
|
|
||||||
|
## 11. Open research questions
|
||||||
|
|
||||||
|
1. Is the current responsibility model minimal?
|
||||||
|
2. Should mutation be separate from intent?
|
||||||
|
3. Is reconciliation a responsibility or a synchronization subfamily?
|
||||||
|
4. Is addressability a frontend responsibility or a system-level concern?
|
||||||
|
5. Should rendering and projection remain distinct terms?
|
||||||
|
6. How should temporal behavior be represented?
|
||||||
|
7. How should pattern strength or evidence be measured?
|
||||||
|
8. Can pattern selection be meaningfully represented as constraint solving?
|
||||||
|
9. How should anti-patterns be modeled?
|
||||||
|
10. Can architecture health be described as unresolved or contradictory forces?
|
||||||
|
|
||||||
|
## 12. Definition of useful progress
|
||||||
|
|
||||||
|
The project is not advanced by adding pattern names alone.
|
||||||
|
|
||||||
|
Useful progress means improving one or more of:
|
||||||
|
|
||||||
|
- conceptual precision,
|
||||||
|
- pattern reuse,
|
||||||
|
- relation quality,
|
||||||
|
- generative power,
|
||||||
|
- evidence quality,
|
||||||
|
- applicability across architectures,
|
||||||
|
- retrieval quality for humans and agents.
|
||||||
15
sequences/CollaborativeApplication.md
Normal file
15
sequences/CollaborativeApplication.md
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# CollaborativeApplication
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
A generative sequence for multi-user concurrent interaction, presence, synchronization and conflict resolution.
|
||||||
|
|
||||||
|
## Research tasks
|
||||||
|
|
||||||
|
- identify dominant forces,
|
||||||
|
- establish authority assumptions,
|
||||||
|
- determine suitable projection patterns,
|
||||||
|
- determine synchronization model,
|
||||||
|
- identify failure modes,
|
||||||
|
- derive candidate sequence,
|
||||||
|
- test against known implementations.
|
||||||
15
sequences/ContentSite.md
Normal file
15
sequences/ContentSite.md
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# ContentSite
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
A generative sequence optimized for content-oriented sites with strong addressability, delivery and progressive-enhancement requirements.
|
||||||
|
|
||||||
|
## Research tasks
|
||||||
|
|
||||||
|
- identify dominant forces,
|
||||||
|
- establish authority assumptions,
|
||||||
|
- determine suitable projection patterns,
|
||||||
|
- determine synchronization model,
|
||||||
|
- identify failure modes,
|
||||||
|
- derive candidate sequence,
|
||||||
|
- test against known implementations.
|
||||||
112
sequences/GeneralWebApplication.md
Normal file
112
sequences/GeneralWebApplication.md
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
# General Web Application — Generative Sequence
|
||||||
|
|
||||||
|
Status: hypothesis
|
||||||
|
|
||||||
|
## Starting question
|
||||||
|
|
||||||
|
How should a web application progressively resolve its frontend architecture without starting from a framework choice?
|
||||||
|
|
||||||
|
## Sequence
|
||||||
|
|
||||||
|
### 1. Characterize the experience
|
||||||
|
|
||||||
|
Identify:
|
||||||
|
|
||||||
|
- dominant user activities,
|
||||||
|
- interaction intensity,
|
||||||
|
- continuity requirements,
|
||||||
|
- collaboration requirements,
|
||||||
|
- offline requirements,
|
||||||
|
- addressability requirements,
|
||||||
|
- latency sensitivity.
|
||||||
|
|
||||||
|
### 2. Place authority
|
||||||
|
|
||||||
|
Choose among patterns such as:
|
||||||
|
|
||||||
|
- Server Authority
|
||||||
|
- Local Authority
|
||||||
|
- Replicated Authority
|
||||||
|
- Event-Log Authority
|
||||||
|
|
||||||
|
### 3. Establish addressability
|
||||||
|
|
||||||
|
Determine what must be named, linked, revisited, bookmarked or shared.
|
||||||
|
|
||||||
|
Potential patterns:
|
||||||
|
|
||||||
|
- URL as Application State
|
||||||
|
- Resource Address
|
||||||
|
- Hierarchical Route
|
||||||
|
|
||||||
|
### 4. Place projection
|
||||||
|
|
||||||
|
Determine where perceivable state is derived.
|
||||||
|
|
||||||
|
Potential patterns:
|
||||||
|
|
||||||
|
- Static Projection
|
||||||
|
- Server Projection
|
||||||
|
- Client Projection
|
||||||
|
- Hybrid Projection
|
||||||
|
- Streaming Projection
|
||||||
|
|
||||||
|
### 5. Choose the communication window
|
||||||
|
|
||||||
|
Determine whether communication is:
|
||||||
|
|
||||||
|
- request/response,
|
||||||
|
- polling,
|
||||||
|
- long-lived,
|
||||||
|
- streamed,
|
||||||
|
- replicated,
|
||||||
|
- peer-to-peer.
|
||||||
|
|
||||||
|
### 6. Add local affordances
|
||||||
|
|
||||||
|
Identify state that should remain near the user interaction.
|
||||||
|
|
||||||
|
Potential patterns:
|
||||||
|
|
||||||
|
- Local Interaction State
|
||||||
|
- Pending State
|
||||||
|
- Immediate Feedback
|
||||||
|
- Optimistic Overlay
|
||||||
|
|
||||||
|
### 7. Define mutation and reconciliation
|
||||||
|
|
||||||
|
Decide:
|
||||||
|
|
||||||
|
- command shape,
|
||||||
|
- idempotency,
|
||||||
|
- conflict handling,
|
||||||
|
- invalidation,
|
||||||
|
- resynchronization.
|
||||||
|
|
||||||
|
### 8. Establish feature boundaries
|
||||||
|
|
||||||
|
Determine which domain and interaction capabilities can evolve independently.
|
||||||
|
|
||||||
|
### 9. Establish deployment boundaries
|
||||||
|
|
||||||
|
Only split independent deployment where the organizational and runtime forces justify it.
|
||||||
|
|
||||||
|
### 10. Strengthen quality boundaries
|
||||||
|
|
||||||
|
Apply accessibility, failure containment, security, privacy, observability and performance patterns.
|
||||||
|
|
||||||
|
### 11. Measure and adapt
|
||||||
|
|
||||||
|
Observe runtime behavior and revisit earlier choices when actual forces differ from assumed forces.
|
||||||
|
|
||||||
|
## Research status
|
||||||
|
|
||||||
|
This sequence must be tested against contrasting architectures:
|
||||||
|
|
||||||
|
- content site,
|
||||||
|
- CRUD SaaS,
|
||||||
|
- real-time dashboard,
|
||||||
|
- collaborative editor,
|
||||||
|
- e-commerce storefront,
|
||||||
|
- local-first application,
|
||||||
|
- microfrontend estate.
|
||||||
15
sequences/LocalFirstApplication.md
Normal file
15
sequences/LocalFirstApplication.md
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# LocalFirstApplication
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
A generative sequence for applications in which local state remains usable and authoritative interaction continues despite network loss.
|
||||||
|
|
||||||
|
## Research tasks
|
||||||
|
|
||||||
|
- identify dominant forces,
|
||||||
|
- establish authority assumptions,
|
||||||
|
- determine suitable projection patterns,
|
||||||
|
- determine synchronization model,
|
||||||
|
- identify failure modes,
|
||||||
|
- derive candidate sequence,
|
||||||
|
- test against known implementations.
|
||||||
23
sequences/README.md
Normal file
23
sequences/README.md
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generative Sequences
|
||||||
|
|
||||||
|
A sequence guides architecture construction through an ordered series of pattern decisions.
|
||||||
|
|
||||||
|
Sequences are not mandatory reference architectures.
|
||||||
|
|
||||||
|
They should explain:
|
||||||
|
|
||||||
|
- starting context,
|
||||||
|
- major forces,
|
||||||
|
- ordering rationale,
|
||||||
|
- decision points,
|
||||||
|
- applicable patterns,
|
||||||
|
- branches,
|
||||||
|
- resulting contexts.
|
||||||
|
|
||||||
|
Initial sequence candidates:
|
||||||
|
|
||||||
|
- `GeneralWebApplication.md`
|
||||||
|
- `ContentSite.md`
|
||||||
|
- `TransactionalApplication.md`
|
||||||
|
- `CollaborativeApplication.md`
|
||||||
|
- `LocalFirstApplication.md`
|
||||||
15
sequences/TransactionalApplication.md
Normal file
15
sequences/TransactionalApplication.md
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# TransactionalApplication
|
||||||
|
|
||||||
|
Status: research stub
|
||||||
|
|
||||||
|
A generative sequence for applications dominated by forms, workflows, commands, validation and authoritative transactions.
|
||||||
|
|
||||||
|
## Research tasks
|
||||||
|
|
||||||
|
- identify dominant forces,
|
||||||
|
- establish authority assumptions,
|
||||||
|
- determine suitable projection patterns,
|
||||||
|
- determine synchronization model,
|
||||||
|
- identify failure modes,
|
||||||
|
- derive candidate sequence,
|
||||||
|
- test against known implementations.
|
||||||
17
technologies/README.md
Normal file
17
technologies/README.md
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Technology Mappings
|
||||||
|
|
||||||
|
Technologies are mapped to the patterns they can implement.
|
||||||
|
|
||||||
|
Technology files are descriptive, not normative.
|
||||||
|
|
||||||
|
A mapping may contain:
|
||||||
|
|
||||||
|
- implemented patterns,
|
||||||
|
- optional patterns,
|
||||||
|
- constraints,
|
||||||
|
- characteristic defaults,
|
||||||
|
- architectural assumptions,
|
||||||
|
- counterexamples,
|
||||||
|
- source references.
|
||||||
|
|
||||||
|
A technology must not become part of the core ontology merely because it is popular.
|
||||||
56
templates/Pattern.md
Normal file
56
templates/Pattern.md
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
---
|
||||||
|
id: FEP-XXX-000
|
||||||
|
name: Pattern Name
|
||||||
|
family: []
|
||||||
|
scale: L0
|
||||||
|
status: hypothesis
|
||||||
|
|
||||||
|
context: []
|
||||||
|
|
||||||
|
forces:
|
||||||
|
improves: []
|
||||||
|
worsens: []
|
||||||
|
|
||||||
|
requires: []
|
||||||
|
|
||||||
|
relations:
|
||||||
|
enables: []
|
||||||
|
refines: []
|
||||||
|
generalizes: []
|
||||||
|
complements: []
|
||||||
|
alternative-to: []
|
||||||
|
conflicts-with: []
|
||||||
|
creates-context-for: []
|
||||||
|
|
||||||
|
known_uses: []
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
maturity: hypothesis
|
||||||
|
sources: []
|
||||||
|
---
|
||||||
|
|
||||||
|
# Pattern Name
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
## Forces
|
||||||
|
|
||||||
|
## Solution
|
||||||
|
|
||||||
|
## Dynamics
|
||||||
|
|
||||||
|
## Resulting Context
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
## Failure Modes
|
||||||
|
|
||||||
|
## Known Uses
|
||||||
|
|
||||||
|
## Related Patterns
|
||||||
|
|
||||||
|
## Evidence
|
||||||
|
|
||||||
|
## Implementation Notes
|
||||||
17
templates/TechnologyMapping.md
Normal file
17
templates/TechnologyMapping.md
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Technology Name
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
## Characteristic architectural assumptions
|
||||||
|
|
||||||
|
## Implemented patterns
|
||||||
|
|
||||||
|
## Optional patterns
|
||||||
|
|
||||||
|
## Constraints
|
||||||
|
|
||||||
|
## Known variants
|
||||||
|
|
||||||
|
## Counterexamples
|
||||||
|
|
||||||
|
## Sources
|
||||||
Loading…
Add table
Add a link
Reference in a new issue