Commit 618f2b5
fix(reactive): close the three doc-vs-code holes the pins exposed
Each fix is code-side, landing the behavior the docs already promise.
1. Explicit husk root is dropped from the cone (#154 extension).
`_live_cone` exempted explicitly-named roots from the husk gate, so
`recalc(project, [husk])` replayed a superseded version and, under
source drift, minted a junk sibling of the live head. Drop the
exemption: a husk (`live=False`) is dropped whether dragged in by the
cone expansion or named explicitly, per mcp-server.md ("roots naming
no live entry are silently dropped"). The scan's own `live=False`
verdict is the authority.
2. Scratch followers rebuild again. `scan` gated `live` on "is a current
alias head", which also excluded never-aliased `catalog_run` scratch
followers, so an advanced parent never made them actionably stale.
Redefine the gate as "is a superseded husk" (appears in some alias
history but is no longer its head); a scratch entry appears in no
history, so it stays live and rebuilds like any follower — minus the
alias bookkeeping — matching reactive-recalc.md's scratch semantics.
3. Alias pins survive a replay. `pinned_expr_from_alias("p")` stores the
alias name, so a replay forced by a *tracked* parent advancing
re-resolved the name to p's new head and silently advanced the pin.
Freeze alias-pinned parents to the revision recorded in
`manifest.parents` for the duration of the replay (new `io.pin_freeze`
context, set by `_replay_cone` from `_pinned_alias_freeze`), so the
pin stays on its exact revision as the docs promise. Hash pins were
already durable and are untouched.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 87cb3be commit 618f2b5
3 files changed
Lines changed: 110 additions & 36 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
| 13 | + | |
12 | 14 | | |
13 | 15 | | |
14 | 16 | | |
| |||
18 | 20 | | |
19 | 21 | | |
20 | 22 | | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
21 | 47 | | |
22 | 48 | | |
23 | 49 | | |
| |||
99 | 125 | | |
100 | 126 | | |
101 | 127 | | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
106 | 141 | | |
107 | 142 | | |
108 | 143 | | |
| |||
273 | 308 | | |
274 | 309 | | |
275 | 310 | | |
276 | | - | |
| 311 | + | |
277 | 312 | | |
278 | 313 | | |
279 | 314 | | |
| |||
289 | 324 | | |
290 | 325 | | |
291 | 326 | | |
292 | | - | |
| 327 | + | |
293 | 328 | | |
294 | 329 | | |
295 | 330 | | |
| |||
717 | 752 | | |
718 | 753 | | |
719 | 754 | | |
720 | | - | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
721 | 765 | | |
722 | 766 | | |
723 | 767 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
49 | | - | |
| 49 | + | |
| 50 | + | |
50 | 51 | | |
51 | 52 | | |
52 | 53 | | |
| |||
102 | 103 | | |
103 | 104 | | |
104 | 105 | | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
105 | 118 | | |
106 | 119 | | |
107 | 120 | | |
| |||
118 | 131 | | |
119 | 132 | | |
120 | 133 | | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
130 | 146 | | |
131 | 147 | | |
132 | 148 | | |
133 | 149 | | |
134 | 150 | | |
135 | 151 | | |
136 | | - | |
137 | | - | |
| 152 | + | |
138 | 153 | | |
139 | 154 | | |
140 | 155 | | |
| |||
165 | 180 | | |
166 | 181 | | |
167 | 182 | | |
168 | | - | |
| 183 | + | |
169 | 184 | | |
170 | 185 | | |
171 | 186 | | |
| |||
222 | 237 | | |
223 | 238 | | |
224 | 239 | | |
225 | | - | |
| 240 | + | |
226 | 241 | | |
227 | 242 | | |
228 | 243 | | |
| |||
246 | 261 | | |
247 | 262 | | |
248 | 263 | | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
249 | 268 | | |
250 | | - | |
| 269 | + | |
| 270 | + | |
251 | 271 | | |
252 | 272 | | |
253 | 273 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
118 | 118 | | |
119 | 119 | | |
120 | 120 | | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
129 | 136 | | |
130 | 137 | | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
135 | 142 | | |
136 | 143 | | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
137 | 147 | | |
138 | 148 | | |
139 | 149 | | |
140 | 150 | | |
141 | | - | |
| 151 | + | |
142 | 152 | | |
143 | | - | |
| 153 | + | |
144 | 154 | | |
145 | 155 | | |
146 | 156 | | |
| |||
0 commit comments