docs: cross-link design docs with README

Add a Design & docs section to the README linking CONTEXT, DESIGN, and the
three ADRs, plus a backlink to the README from each of those documents.
This commit is contained in:
Julien Calixte
2026-06-20 02:20:05 +02:00
parent 8b64e8f6b7
commit e76432d3ca
6 changed files with 25 additions and 0 deletions

View File

@@ -5,6 +5,9 @@ models (stock-and-flow diagrams with feedback loops) in the spirit of Donella
Meadows' *Thinking in Systems*. The diagram is the product now; numeric simulation Meadows' *Thinking in Systems*. The diagram is the product now; numeric simulation
is a planned later phase, so the language is chosen to be simulation-ready. is a planned later phase, so the language is chosen to be simulation-ready.
Part of [meadows](./README.md); see [DESIGN.md](./DESIGN.md) for how these terms
map to goals, functions, and components.
## Language ## Language
**System**: **System**:

View File

@@ -7,6 +7,7 @@ model, and persistence for building stock-and-flow **Models**. It relies on
[ADR-0001](./docs/adr/0001-detected-feedback-loops.md) (loops detected from a [ADR-0001](./docs/adr/0001-detected-feedback-loops.md) (loops detected from a
polarity-annotated graph, not stored). "Simulation-ready" is a constraint here, polarity-annotated graph, not stored). "Simulation-ready" is a constraint here,
not a goal: nothing in the data model should need a rewrite when simulation lands. not a goal: nothing in the data model should need a rewrite when simulation lands.
See [README.md](./README.md) for the project overview and how to run it.
Strength weights used in matrices: **9** strong, **3** medium, **1** weak, blank none. Strength weights used in matrices: **9** strong, **3** medium, **1** weak, blank none.

View File

@@ -5,6 +5,21 @@ Inspired by Donella Meadows' *Thinking in Systems*.
Deployed at https://meadows.apoena.dev Deployed at https://meadows.apoena.dev
## Design & docs
- [CONTEXT.md](./CONTEXT.md) — the ubiquitous language: Stock, Flow, Converter,
Information Link, Polarity, and the Feedback Loops (Reinforcing / Balancing) the
wiring forms.
- [DESIGN.md](./DESIGN.md) — goal-driven design (QFD): goals → functions →
components, the House of Quality, the performance budget, and recorded tradeoffs.
- Architecture decisions (`docs/adr/`):
- [ADR-0001](./docs/adr/0001-detected-feedback-loops.md) — feedback loops are
detected from structure, not stored.
- [ADR-0002](./docs/adr/0002-vue-flow-substrate.md) — Vue Flow is the editor
substrate; the domain Model is the source of truth.
- [ADR-0003](./docs/adr/0003-flow-as-node-materialised-clouds.md) — a Flow is a
node; Source/Sink clouds are materialised nodes.
## Stack ## Stack
Vite + Vue 3 + TypeScript, Tailwind v4, DaisyUI. Lint/format via [oxc](https://oxc.rs) Vite + Vue 3 + TypeScript, Tailwind v4, DaisyUI. Lint/format via [oxc](https://oxc.rs)

View File

@@ -1,5 +1,7 @@
# Feedback loops are detected from a polarity-annotated graph, not stored # Feedback loops are detected from a polarity-annotated graph, not stored
_Part of [meadows](../../README.md) · see [DESIGN.md](../../DESIGN.md)._
A **Feedback Loop** in a **Model** is a cycle in the wiring (Stock → Information A **Feedback Loop** in a **Model** is a cycle in the wiring (Stock → Information
Link(s)/Flow → same Stock). We chose to **derive** loops by detecting cycles and Link(s)/Flow → same Stock). We chose to **derive** loops by detecting cycles and
classifying each as **Reinforcing** (even number of `` polarities) or classifying each as **Reinforcing** (even number of `` polarities) or

View File

@@ -1,5 +1,7 @@
# Vue Flow is the editor substrate; the domain Model is the source of truth # Vue Flow is the editor substrate; the domain Model is the source of truth
_Part of [meadows](../../README.md) · see [DESIGN.md](../../DESIGN.md)._
The editor is built on **Vue Flow** (`@vue-flow/core`) for pan/zoom, node The editor is built on **Vue Flow** (`@vue-flow/core`) for pan/zoom, node
dragging, handles, edge-drawing, and selection, with Stocks/Flows/Converters/ dragging, handles, edge-drawing, and selection, with Stocks/Flows/Converters/
Clouds as custom Vue node components. We rejected hand-rolling an SVG editor (too Clouds as custom Vue node components. We rejected hand-rolling an SVG editor (too

View File

@@ -1,5 +1,7 @@
# A Flow is a node; Source/Sink clouds are materialised nodes # A Flow is a node; Source/Sink clouds are materialised nodes
_Part of [meadows](../../README.md) · see [DESIGN.md](../../DESIGN.md)._
In the domain `Model`, a **Flow** is a *node* carrying `source` and `target` In the domain `Model`, a **Flow** is a *node* carrying `source` and `target`
references (each to a Stock or Cloud), not an edge. The pipe you see is *rendered* references (each to a Stock or Cloud), not an edge. The pipe you see is *rendered*
from those references. The **Source/Sink** boundary is a **materialised Cloud from those references. The **Source/Sink** boundary is a **materialised Cloud