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 |