OXYGENHUB

Diffusion: the name, and which bookmark a consumer is bumped on b20ddaf96167

Andy confirmed the name. A consumer is bumped on the bookmark its work
lands on, learned from where its proposals land, else its default; a
target key in .oxymodules overrides it.

refs #148
Author
Andy McCall @andymccall <[email protected]>
When
· 2026-10-12 19:58 UTC
Signature
✔ signed by Andy McCall
Hash
b20ddaf961670b0cddfbc107a9e99a68e251fb32439dfcd26ccfce625e15ba8e
Depends on
8620925e5c53
Depended on by
a2b29af1ce88
In bookmarks
api-unknown-fields cancel-landed-runs close-proposal-140 diffusion-pin-bookmark draft-ready main oh-comment-body-file proposal-list-fast
In tags
v0.5.0 v0.5.1 v0.5.2 v0.6.0 v0.6.1 v0.7.0 v0.8.0 v0.9.0 v0.9.1 v0.9.11 v0.9.15 v0.9.16 v0.9.19 v0.9.2 v0.9.20 v0.9.21 v0.9.22 v0.9.23 v0.9.24 v0.9.3 v0.9.4 v0.9.5 v0.9.6 v0.9.7 v0.9.8 v0.9.9
Edits
7 atoms, 0 tree operations, 1 file

Browse the tree at this change

modified docs/diffusion.md +16 −7
1 1
# Diffusion: upstream changes reach their consumers
2 2
3 3
Status: design, 2026-10-12. D1 is planned first; nothing is built yet.
4 -
"Diffusion" is a working name (changes diffuse from an upstream into the
5 -
repositories that pin it); Andy has not confirmed it.
4 +
The name **Diffusion** was confirmed by Andy on 2026-10-12: changes
5 +
diffuse from an upstream into the repositories that pin it.
6 6
7 7
## 1. The problem
8 8
…
55 unchanged lines
64 64
   bookmark = "main"
65 65
   follow = "green"   # off | green | any
66 66
   land = "propose"   # propose | auto
67 +
   target = "develop" # optional: the bookmark to bump (default: learned, §4.3)
67 68
   ```
68 69
69 70
2. else its repository setting (Settings › Subrepos), so an
…
6 unchanged lines
76 77
77 78
### 4.3 The bump
78 79
80 +
**Which bookmark of the consumer** (decided 2026-10-12): the bookmark its
81 +
work lands on. The hub learns it per consumer from where the
82 +
consumer's proposals land (the most common target of those landed in the
83 +
last 90 days), falling back to the default bookmark; a `target` key in
84 +
the consumer's `.oxymodules` entry overrides it. The pin index (§4.1)
85 +
records pins on that bookmark as well as the default. So a game whose
86 +
default is `main` but whose work lands on `develop` is bumped on
87 +
`develop`, with no setup, and follows if its workflow changes.
88 +
79 89
When an upstream's followed bookmark reaches a new state S (and, for
80 90
`green`, S's required checks pass), for each consumer that follows it:
81 91
82 92
- **Skip** when the consumer's pin already holds S, or when S does not
83 93
  hold everything the current pin does (upstream moved backwards or was
84 94
  rewritten). Consumers only move forward.
85 -
- **Build** one change on the consumer's default heads that replaces the
95 +
- **Build** one change on the target bookmark's heads that replaces the
86 96
  pin's blob with a pin of S. The hub signs it with its delegate key, as
87 97
  it signs wiki edits, authored by the hub's `diffusion` account.
88 -
- **Place** it on the bookmark `diffusion/<path>`: the consumer's default
89 -
  heads plus the change. One bookmark per consumer and subrepo, moved in
98 +
- **Place** it on the bookmark `diffusion/<path>`: the target's heads
99 +
  plus the change. One bookmark per consumer and subrepo, moved in
90 100
  place when upstream moves again, so there is never a pile of bumps.
91 -
- **Propose** it, once: a proposal from `diffusion/<path>` to the default
101 +
- **Propose** it, once: a proposal from `diffusion/<path>` to the target
92 102
  bookmark, labelled `dependencies`, kept up to date as the bookmark
93 103
  moves. Its CI runs on the projected state like any proposal's.
94 104
…
104 unchanged lines
199 209
200 210
## 11. Open questions
201 211
202 -
- **The name:** Diffusion, or plainer ("Follow")?
203 212
- **Who may turn it on** for a consumer: its owner and administrators, or
204 213
  also the upstream's maintainers (by offering, which the consumer
205 214
  accepts)?
…
4 unchanged lines