Why
Experiments test ideas that often contradict each other, and im-web, on purpose.
If one experiment used another's code, a change made for one idea would silently change the other. Sealing them keeps each test honest.
What this means
| You are | What it means for you |
|---|---|
| Designer, product owner | An experiment behaves only as decided for it. Changing Baseline never changes Receipt, even where they look the same. |
| Designer, product owner | Two experiments may disagree on a rule. That is allowed, and nothing forces them to match. |
| Developer | Import only from your own experiment folder and src/platform. Everything else, copy. |
| Developer | A forbidden import is caught after each edit Claude makes and before every commit. |
What lives where
| Folder | What's in it | Who may use it |
|---|---|---|
src/routes/prototypes/<id>/, src/routes/features/<id>/ | One experiment: its docs, app and code | Only itself |
src/platform/ | Neutral building blocks: UI components, formatters, media fixtures, the docs shell, the statechart engine, design tokens | Every experiment |
src/reference/ | im-web today, team proposals, and the working model | Only the docs pages |
src/routes/docs/, root routes | The docs and the lists of prototypes and features | Nobody |
Reuse means copying
Baseline shows receipts. It does not use the Receipt feature's code; it has its own copy.
The copy belongs to Baseline from then on. Receipt can change without Baseline noticing, and the other way round.
To bring an improvement across, someone copies it again on purpose.
More
- Reusing code by copying: the copy script and an example.
- When an import crosses a silo: how a forbidden import is caught.
- Routing: the silos section and the rest of the folder layout.