You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit cf6fc63
Browse filesBrowse the repository at this point in the historyBrowse files
David Noble
committed
An occupant is writ's own when it matches what the record wrote: a dangling link is re-pointed under stop
readback.Entry.AsRecorded is the one predicate. A link is as recorded when its literal endpoint,
absolutized against the link's own directory, is the recorded source, resolved or dangling; a
copy when its content digest is the recorded as-deployed digest. The source is never resolved.
Deploy's pre-flight under stop and reconcile's changed decide by it, so a link left dangling by a
file that moved between layers is writ's own and a plain deploy re-points it; occupantIsOurs,
which resolved both sides and read a dangling link as foreign, is gone.
The layer-journey scenario's step 3.3 redeploys the moved links under the default policy. The
guide and the reconciliation page say what an occupant of writ's own is.
Part of #883; lane 3 of #916, PR A.
Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW
// Config carries the resolved settings for one deploy operation.
@@ -263,9 +261,10 @@ func runGraph(
263
261
// layered-enforcement ruling).
264
262
//
265
263
// Under the default `stop`, every planned target that is occupied on disk is classified through the readback:
266
-
// writ's own unmodified outputs — a symlink resolving to its recorded source, or a file whose digest equals the
267
-
// run's recorded as-deployed identity — are cleared for replacement (redeploys flow); anything foreign or
268
-
// locally modified is a violation, and the deploy refuses listing them and naming the flag. A cleared run (or an
264
+
// writ's own unmodified outputs — an occupant that is what the record wrote, [readback.Entry.AsRecorded]: a
265
+
// symlink whose literal endpoint is the recorded source, resolved or dangling, or a file whose digest is the
266
+
// recorded as-deployed identity — are cleared for replacement (redeploys flow, and a file that moved between
267
+
// layers is re-pointed, #883); anything foreign or locally modified is a violation, and the deploy refuses listing them and naming the flag. A cleared run (or an
269
268
// explicit `skip` / `replace`) hands the resolved policy to the file provider's write seam, which enforces it
270
269
// per target. A missing run index reads as zero knowledge (every occupant is foreign) — first deploys onto a
271
270
// clean machine have no occupants, so nothing refuses.
Copy file name to clipboardExpand all lines: docs/architecture/5.1-reconciliation.md
+6-1Lines changed: 6 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -157,7 +157,12 @@ entry:
157
157
|`dangling`| the source the record names does not resolve -- a link whose referent is gone, or a copy (a decrypted file, say) whose source is gone: a reference that outlives its referent |`deploy`: only deploy makes a new record; reconcile reports it and leaves it |
158
158
|`stale`| as recorded, and the source resolves and its content no longer matches the recorded source digest: a derivative behind an origin that still exists |`upgrade`|
159
159
160
-
No system-side word reads the layer checkout beyond the source the record names. A link's source is a path the
160
+
"What the record wrote" is one predicate, `readback.Entry.AsRecorded` ([#883](https://github.com/NobleFactor/devlore-cli/issues/883)):
161
+
a symlink whose literal endpoint, absolutized against the link's own directory, is the recorded source -- resolved
162
+
or dangling -- or a file whose content digest is the recorded as-deployed digest. Deploy's pre-flight under `stop`
163
+
and `reconcile`'s `changed` decide by it, so a link left dangling by a file that moved between layers is writ's
164
+
own and a plain deploy re-points it. No system-side word reads the layer checkout beyond the source the record
165
+
names. A link's source is a path the
161
166
record holds without a digest, so an edit under a link is in the checkout and is git's business; `stale` is a
162
167
copy's word until the record carries a link's source digest. `orphan`, `missing`, `conflict`, `modified` and
163
168
`modified-or-stale` are gone: the first two described a record that held every lifetime, and the last had one case,
0 commit comments