devlyn-cli 4.2.24 → 4.2.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -264,7 +264,12 @@ def allocate(args, *, exclude_receipts=()):
264
264
  receipt["worktree_identity"] = workspace_identity(target, Path(receipt["worktree_gitdir"]))
265
265
  receipt["allocation"] = "owned"
266
266
  atomic_json(path, receipt)
267
+ # Owned first: an interrupted warm-up leaves a usable allocation whose build starts cold.
268
+ with locked_receipt(path) as owned:
269
+ owned["build_dirs"] = shared("warm-build-dirs")["warm"](target, work, scratch)
270
+ atomic_json(path, owned)
267
271
  return {"status": "ALLOCATED", "receipt": str(path), "worktree": str(target), "scratch": str(scratch),
272
+ "build_dirs": owned["build_dirs"],
268
273
  "reconciled": [] if local else reconcile(common, path, work, exclude_receipts=exclude_receipts)}
269
274
 
270
275
 
@@ -106,10 +106,21 @@ require the affected checks again.
106
106
  Keep the original edits through pending or failed delivery; only reconciliation
107
107
  removes them. Preserve all other work and report anything left behind.
108
108
 
109
- Allocation also returns a receipt-owned `scratch` directory. Put disposable
110
- build intermediates there (for example, set
111
- `CARGO_TARGET_DIR` to `<scratch>/target`). Keep source checkouts, Git data,
112
- lockfiles, reports and restart evidence outside scratch. Do not create unowned
109
+ Build in the task worktree's own default build directory, never in one
110
+ another checkout builds in, even one build at a time: tools such as Cargo take
111
+ one checkout's outputs as fresh for the other. When a Cargo workspace's
112
+ Cargo.toml sets `[workspace.metadata.devlyn] warm-build-dirs = true`,
113
+ allocation seeds that directory from a built checkout of the repository, so
114
+ the first build does not rebuild every dependency; `build_dirs` in its result
115
+ and receipt says what it did, and a skip means an ordinary cold build. The
116
+ opt-in is the workspace's: seeding keeps dependency outputs that may hold the
117
+ other checkout's paths, and those follow that checkout's later rebuilds. `warm-build-dirs.py <worktree>` does the same for a
118
+ worktree made without allocation. A warmed directory leaves with the worktree
119
+ after merge, so a pending, failed or local-only task keeps it.
120
+
121
+ Allocation also returns a receipt-owned `scratch` directory for other
122
+ disposable build files, such as writable tool caches. Keep source checkouts,
123
+ Git data, lockfiles, reports and restart evidence outside scratch. Do not create unowned
113
124
  temporary build trees or preserve them by copying them into evidence custody.
114
125
  Prefer `TemporaryDirectory`/`finally` for short-lived test fixtures.
115
126