OXYGENHUB

Spec 0.6b: rewrite refusal for orphaned references, removal semantics, signature consequence f77698833f9f

Author
Andy McCall @andymccall <[email protected]>
When
· 2026-09-26 19:37 UTC
Signature
✔ signed by Andy McCall
Hash
f77698833f9f7577ebc61cfb1f3c4da3a8ff11056f161db0eddfaa1c6de0dee0
Depends on
d02e545dc265 ff0af1ee299d
Depended on by
23b217d75848 315167f3e208
In bookmarks
agents-in-readme bare-hashes carried-not-removed carry-identical doctor-trust identical-sides keyless-tags main merge-remote-bookmark only-help-103 paths-for-resolutions-and-amend push-notes show-stat subrepo-pin-state switch-says
In tags
v0.1.0 v0.10.0 v0.11.0 v0.2.0 v0.3.0 v0.3.1 v0.4.0 v0.4.1 v0.4.2 v0.4.3 v0.4.4 v0.4.5 v0.4.6 v0.5.0 v0.5.1 v0.6.0 v0.7.0 v0.8.0 v0.9.0
Edits
4 atoms, 0 tree operations, 1 file

Browse the tree at this change

modified docs/spec.md +5 −3
…
1 unchanged lines
2 2
3 3
| | |
4 4
|---|---|
5 -
| **Status** | Draft 0.6a |
5 +
| **Status** | Draft 0.6b |
6 6
| **Format version** | 1 |
7 7
| **Date** | 2026-09-26 |
8 8
| **Audience** | Implementers, security reviewers, and contributors |
…
308 unchanged lines
317 317
318 318
### 8.4 Rewriting
319 319
320 -
Rewriting a change `C` to `C'` (amend, rebase, split, squash) produces a new object with the same ChangeId. Any change `D` with `hash(C) ∈ deps(D)` is orphaned relative to `C'`. `oxy` MUST automatically rewrite orphaned descendants by translating their AtomRefs and PlacementRefs from `C` to `C'` where a correspondence exists, and MUST record a conflict (§9) where it does not. Changes that do not depend on `C` are untouched. Rewriting is recorded in the operation log (§12) and is undoable.
320 +
Rewriting a change `C` to `C'` (amend, rebase, split, squash) produces a new object with the same ChangeId. Any change `D` with `hash(C) ∈ deps(D)` is orphaned relative to `C'`. `oxy` MUST automatically rewrite orphaned descendants by translating their AtomRefs and PlacementRefs from `C` to `C'` where a correspondence exists, and MUST record a conflict (§9) where it does not. Until the shape of that conflict is specified, an implementation MAY instead refuse the rewrite, naming the orphaned reference. Removing `C` altogether rewires each dependent to depend on `deps(C)`, and is refused where a dependent references `C`'s atoms or placements. Changes that do not depend on `C` are untouched, and a rewritten change by another author is stored without that author's signature, which only they can renew. Rewriting is recorded in the operation log (§12) and is undoable.
321 321
322 322
## 9. Conflicts
323 323
…
510 unchanged lines
834 834
835 835
---
836 836
837 -
*Changelog.* Draft 0.6a (2026-09-26): §13.4 fixes the pack and index file formats.
837 +
*Changelog.* Draft 0.6b (2026-09-26): §8.4 allows refusing a rewrite whose orphaned references have no specified conflict shape, defines removal, and notes the signature consequence.
838 +
839 +
Draft 0.6a (2026-09-26): §13.4 fixes the pack and index file formats.
838 840
839 841
Draft 0.6 (2026-09-26): trust policy propagation over the wire, the `policy` signing domain, per-remote downgrade protection, the bootstrap rule for unverified remotes, and the rule that policies govern only changes added after them.
840 842
…
15 unchanged lines