KCB1 commited on
Commit
f172ef7
·
verified ·
1 Parent(s): 3399723

Record verified human-authorized PartSeg source cleanup

Browse files
partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/cleanup_records/2026-10-02/README.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ # Authorized post-snapshot baseline cleanup
2
+
3
+ The 38-unit archive and its original root index were verified before deletion. The immutable root index and its initial cleanup status describe that capture time; this appended record describes the later human-authorized cleanup. They are not overwritten.
4
+
5
+ 1,121,552 archived files/symlinks were removed; original file data totaled 248,370,031,738 bytes. The complete per-unit record is [confirmed_baseline_cleanup.json](confirmed_baseline_cleanup.json).
6
+
7
+ Shared dependencies, upload/control support, excluded benchmark geometry, private VCS metadata and credential-bearing files were not removed. Original Windows numeric tables remain unchanged.
8
+
9
+ Restore removed material from each listed unit archive manifest and all of its tar shards, checking LFS SHA-256 and using the large-file reassembly helper where required. The updated cleanup implementation/tests accompany this post-snapshot record. No method or reported numeric value changed.
partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/cleanup_records/2026-10-02/cleanup_plan.json ADDED
@@ -0,0 +1,581 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cloud_objects_rechecked": 278,
3
+ "prepared_at": "2026-10-02T00:01:27+0800",
4
+ "repo_id": "KCB1/Lift",
5
+ "retained_units": [
6
+ {
7
+ "id": "external_root_files",
8
+ "reason": "shared_dependency_or_upload_control"
9
+ },
10
+ {
11
+ "id": "external_tools",
12
+ "reason": "shared_dependency_or_upload_control"
13
+ },
14
+ {
15
+ "id": "external_status",
16
+ "reason": "shared_dependency_or_upload_control"
17
+ },
18
+ {
19
+ "id": "external_logs",
20
+ "reason": "shared_dependency_or_upload_control"
21
+ },
22
+ {
23
+ "id": "shared_torch_dino",
24
+ "reason": "shared_dependency_or_upload_control"
25
+ },
26
+ {
27
+ "id": "shared_sam21",
28
+ "reason": "shared_dependency_or_upload_control"
29
+ },
30
+ {
31
+ "id": "shared_hf_dependencies",
32
+ "reason": "shared_dependency_or_upload_control"
33
+ },
34
+ {
35
+ "id": "external_remote_scripts",
36
+ "reason": "shared_dependency_or_upload_control"
37
+ }
38
+ ],
39
+ "revision_rechecked": "339972365699a2e2528aed5197b8404b430a6295",
40
+ "schema": "lift.partseg_frozen_cleanup_plan.v1",
41
+ "units": [
42
+ {
43
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/historical_trials/results/archive_manifest.json",
44
+ "archive_manifest_git_blob_sha1": "206443a8ea608c4628cd11df907ead2c9f248f95",
45
+ "cloud_object_count": 4,
46
+ "excluded_entries_preserved": 0,
47
+ "files_and_symlinks": 128,
48
+ "id": "legacy_results",
49
+ "inventory_sha256": "986210e38902640356fe73e28a5876e7d97328a4967d0b03853f7766d27d518b",
50
+ "logical_bytes": 143605658,
51
+ "root_device": 2304,
52
+ "root_inode": 25807230906,
53
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/results",
54
+ "source_tree_signature": "a22ed7ab455f88694b4f3786ce2a34d5891c83ae044994cd102538acd9170e73",
55
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/historical_trials/results",
56
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/legacy_results"
57
+ },
58
+ {
59
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/historical_trials/smoke/archive_manifest.json",
60
+ "archive_manifest_git_blob_sha1": "2a675130d95f77f7a9ec3aff1fb6cb9c4c25b80f",
61
+ "cloud_object_count": 4,
62
+ "excluded_entries_preserved": 2,
63
+ "files_and_symlinks": 250,
64
+ "id": "smoke_trials",
65
+ "inventory_sha256": "cab02df02d174964630b9afa2b29520cb22bb6dd927051c6533c644537003dd6",
66
+ "logical_bytes": 2353684396,
67
+ "root_device": 2304,
68
+ "root_inode": 21482182372,
69
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/smoke",
70
+ "source_tree_signature": "1afb2a256d4b127a5ebfc281d75f17761e2e88a27a95df574deeb2988a9180a2",
71
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/historical_trials/smoke",
72
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/smoke_trials"
73
+ },
74
+ {
75
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/supplemental_runs_20260926/archive_manifest.json",
76
+ "archive_manifest_git_blob_sha1": "0b3407323a522ce37118476d6dfa09433268b4e0",
77
+ "cloud_object_count": 6,
78
+ "excluded_entries_preserved": 0,
79
+ "files_and_symlinks": 7805,
80
+ "id": "supplemental_runs_20260926",
81
+ "inventory_sha256": "d32b9c744389440afcced62849cc08b2581b263a8dc8e4f9d389dd738dbc571b",
82
+ "logical_bytes": 3235595230,
83
+ "root_device": 2304,
84
+ "root_inode": 4374620285,
85
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/results_20260926",
86
+ "source_tree_signature": "6430970d4944c463d453238d48b0e6491a7f47fb77fd90e9e53b176661257869",
87
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/supplemental_runs_20260926",
88
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/supplemental_runs_20260926"
89
+ },
90
+ {
91
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/weights/archive_manifest.json",
92
+ "archive_manifest_git_blob_sha1": "01084ba3461658b35e78e47804048f87af5e17c9",
93
+ "cloud_object_count": 6,
94
+ "excluded_entries_preserved": 0,
95
+ "files_and_symlinks": 46,
96
+ "id": "external_weights",
97
+ "inventory_sha256": "a1dc7a7024f10d0b4d461fc18b62d3410187de4a814e7b646f532ed1c17bdb9e",
98
+ "logical_bytes": 4531634798,
99
+ "root_device": 2304,
100
+ "root_inode": 23647561567,
101
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/weights",
102
+ "source_tree_signature": "0a5b730677b1965d358a17ff7bbb02102662dc74673f4c4b25ee42eb0baeebf1",
103
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/weights",
104
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/external_weights"
105
+ },
106
+ {
107
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/sources/archive_manifest.json",
108
+ "archive_manifest_git_blob_sha1": "8a0f2c1792a5393031426146cc8cbb4fcfca1e5c",
109
+ "cloud_object_count": 26,
110
+ "exclude_relative": [
111
+ "Point-SAM_for_PartSAM/configs/dataset/fusion360.yaml"
112
+ ],
113
+ "excluded_entries_preserved": 236,
114
+ "files_and_symlinks": 25070,
115
+ "id": "external_sources",
116
+ "inventory_sha256": "1de1425414530bed3133968e707f7d00a730848b816883e1854a344e4615e9a3",
117
+ "logical_bytes": 32362501543,
118
+ "reviewed_marker_files": {},
119
+ "root_device": 2304,
120
+ "root_inode": 8615628085,
121
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/sources",
122
+ "source_tree_signature": "ec272f6ac4c0b36ed4bf1c1aaaf91f0f3b9ba87de177c0a5e98db810a3d55bdb",
123
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/sources",
124
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/external_sources"
125
+ },
126
+ {
127
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/downloads/archive_manifest.json",
128
+ "archive_manifest_git_blob_sha1": "42cc98f4d90ddc32d1934b901f046b81f15295ca",
129
+ "cloud_object_count": 4,
130
+ "excluded_entries_preserved": 0,
131
+ "files_and_symlinks": 3,
132
+ "id": "external_downloads",
133
+ "inventory_sha256": "a7b5fce3a3727cf9d6e2fe105eaa540cf0f69e65125c1757a68c906f7f8d7461",
134
+ "logical_bytes": 87854488,
135
+ "root_device": 2304,
136
+ "root_inode": 2183673487,
137
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/downloads",
138
+ "source_tree_signature": "0e1d7918fbc1b713b0b6b443f14084d7ff41a9f59a91e81b27289f554e8f0b08",
139
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/downloads",
140
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/external_downloads"
141
+ },
142
+ {
143
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/cache/archive_manifest.json",
144
+ "archive_manifest_git_blob_sha1": "c080cd6d0c5834503baf7db7d0225c67e9e0becc",
145
+ "cloud_object_count": 34,
146
+ "excluded_entries_preserved": 1,
147
+ "files_and_symlinks": 116752,
148
+ "id": "external_cache",
149
+ "inventory_sha256": "dd6d05b5ba21bcf572cead19777d0d0ee22f74cd07a5b35c83cbc99d50ddb920",
150
+ "logical_bytes": 40387439987,
151
+ "root_device": 2304,
152
+ "root_inode": 12960076552,
153
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/cache",
154
+ "source_tree_signature": "ea7d126c77949d40d64c9daa1038cf0bbbc83eab7ac97b0f07a445726ecfb75f",
155
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/cache",
156
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/external_cache"
157
+ },
158
+ {
159
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/source_fetch_20260915/archive_manifest.json",
160
+ "archive_manifest_git_blob_sha1": "14232a3a37ca5ffd76a52db543c1ed5316dfbbb2",
161
+ "cloud_object_count": 4,
162
+ "excluded_entries_preserved": 0,
163
+ "files_and_symlinks": 2310,
164
+ "id": "env_source_fetch_20260915",
165
+ "inventory_sha256": "8443bd9f580a3a415b8fb685abeba6e28fdf5000208f9a797addc5e6c440815b",
166
+ "logical_bytes": 24530938,
167
+ "root_device": 2304,
168
+ "root_inode": 14766393059,
169
+ "source_root": "/root/autodl-tmp/envs/source_fetch_20260915",
170
+ "source_tree_signature": "eb11c6b803a143a03965267934ff27b3f11782e23cc6f7347460f8c08b57175b",
171
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/source_fetch_20260915",
172
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_source_fetch_20260915"
173
+ },
174
+ {
175
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/particulate_overlay_20260917/archive_manifest.json",
176
+ "archive_manifest_git_blob_sha1": "6c45a41dda47b889a525ae3e5feba7d41b3681f6",
177
+ "cloud_object_count": 4,
178
+ "excluded_entries_preserved": 0,
179
+ "files_and_symlinks": 3735,
180
+ "id": "env_particulate_overlay_20260917",
181
+ "inventory_sha256": "726653a283f7c93d361e2162115d11dccc5231713f3e8744527bd3fa3689a441",
182
+ "logical_bytes": 137411017,
183
+ "root_device": 2304,
184
+ "root_inode": 8775540562,
185
+ "source_root": "/root/autodl-tmp/envs/particulate_overlay_20260917",
186
+ "source_tree_signature": "6628fc6314355ff4ca0a1339faff9aa22a3612e29cf48a8be6c5d5450ce6ab9f",
187
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/particulate_overlay_20260917",
188
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_particulate_overlay_20260917"
189
+ },
190
+ {
191
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/meshfm_20260915/archive_manifest.json",
192
+ "archive_manifest_git_blob_sha1": "0ad5c95694f986c63955e9a31ff106b241a3c114",
193
+ "cloud_object_count": 6,
194
+ "excluded_entries_preserved": 0,
195
+ "files_and_symlinks": 43303,
196
+ "id": "env_meshfm_20260915",
197
+ "inventory_sha256": "7e89b6cb6a4a9e942e00f84a4e337fbf1530549f3b50a4da30b43c995bc6262a",
198
+ "logical_bytes": 5654363104,
199
+ "root_device": 2304,
200
+ "root_inode": 21558522842,
201
+ "source_root": "/root/autodl-tmp/envs/meshfm_20260915",
202
+ "source_tree_signature": "f80b0dd5797e47b79fc605b7c497ae86f54ec4d98a83014c36db99e0850f8d1b",
203
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/meshfm_20260915",
204
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_meshfm_20260915"
205
+ },
206
+ {
207
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/p3sam_20260915/archive_manifest.json",
208
+ "archive_manifest_git_blob_sha1": "0a347992e1d4d88676b0c760ee24d0fa9ee632a9",
209
+ "cloud_object_count": 8,
210
+ "excluded_entries_preserved": 1,
211
+ "files_and_symlinks": 64210,
212
+ "id": "env_p3sam_20260915",
213
+ "inventory_sha256": "9a94bde6f1ba73b33dc31026c8ac41bcada096b1e9ea7b6e4fae936d6638db5a",
214
+ "logical_bytes": 8116481350,
215
+ "root_device": 2304,
216
+ "root_inode": 23725638631,
217
+ "source_root": "/root/autodl-tmp/envs/p3sam_20260915",
218
+ "source_tree_signature": "0d68e9931b6995403dbfafad8ae05638752e9ad48c818ec86467889f8aee4c9a",
219
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/p3sam_20260915",
220
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_p3sam_20260915"
221
+ },
222
+ {
223
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/find3d_20260915/archive_manifest.json",
224
+ "archive_manifest_git_blob_sha1": "f4298670009a6d6db34890b82499aab79d24c5ae",
225
+ "cloud_object_count": 8,
226
+ "exclude_relative": [
227
+ "lib/python3.8/site-packages/transformers/testing_utils.py"
228
+ ],
229
+ "excluded_entries_preserved": 2,
230
+ "files_and_symlinks": 54504,
231
+ "id": "env_find3d_20260915",
232
+ "inventory_sha256": "91462e0a53bb57f45dde3b7425f5114cd94e449e4fc2e307ea1fe1db1bd60447",
233
+ "logical_bytes": 7662265538,
234
+ "reviewed_marker_files": {
235
+ "lib/python3.8/site-packages/cryptography/hazmat/primitives/serialization/ssh.py": "1d5e99a888ea34d68d50be8ce2043234926d67be44b22499b3acb175da81ad62",
236
+ "lib/python3.8/site-packages/google/auth/crypt/_python_rsa.py": "131ab3f4e8039bedc91c777adfa82701d5dd707ea98c3581349cf6d6e0d19d41",
237
+ "lib/python3.8/site-packages/google/auth/transport/_mtls_helper.py": "3dc605eec88c3621cc71efed5d96bfa0080c68e377981909aaa1794aa557866d",
238
+ "lib/python3.8/site-packages/google/oauth2/gdch_credentials.py": "098ea23e73ee73638221ed59ba3c20d4cbbd41297588626a18ecba4e4525787c"
239
+ },
240
+ "root_device": 2304,
241
+ "root_inode": 28311342716,
242
+ "source_root": "/root/autodl-tmp/envs/find3d_20260915",
243
+ "source_tree_signature": "5a34636a0abc6e9449c0daebbed378c5e7f4620661124ece21a0ce2b6df98633",
244
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/find3d_20260915",
245
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_find3d_20260915"
246
+ },
247
+ {
248
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/diff3f_20260915/archive_manifest.json",
249
+ "archive_manifest_git_blob_sha1": "d059487323e9106b57ef8ac0873595270f00654f",
250
+ "cloud_object_count": 8,
251
+ "exclude_relative": [
252
+ "lib/python3.10/site-packages/transformers/testing_utils.py"
253
+ ],
254
+ "excluded_entries_preserved": 1,
255
+ "files_and_symlinks": 47828,
256
+ "id": "env_diff3f_20260915",
257
+ "inventory_sha256": "90236fa5a8b431ed069f141518d80946fac386a431f7a6cff04ad7511fdff0dc",
258
+ "logical_bytes": 6202925916,
259
+ "reviewed_marker_files": {},
260
+ "root_device": 2304,
261
+ "root_inode": 8979303724,
262
+ "source_root": "/root/autodl-tmp/envs/diff3f_20260915",
263
+ "source_tree_signature": "e0911c169e36757104f30c589e1b43d5dd5f179d08302f075b97924f67a1d211",
264
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/diff3f_20260915",
265
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_diff3f_20260915"
266
+ },
267
+ {
268
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/segvigen_20260915/archive_manifest.json",
269
+ "archive_manifest_git_blob_sha1": "675c9f073542120298f7b4bef9c61f35c0d638e3",
270
+ "cloud_object_count": 14,
271
+ "exclude_relative": [
272
+ "lib/python3.10/site-packages/transformers/testing_utils.py"
273
+ ],
274
+ "excluded_entries_preserved": 1,
275
+ "files_and_symlinks": 61534,
276
+ "id": "env_segvigen_20260915",
277
+ "inventory_sha256": "64edae7536f4a196948cb63fe410729f248684d8d3b4e45bd98c72a4759e2efb",
278
+ "logical_bytes": 15689890942,
279
+ "reviewed_marker_files": {},
280
+ "root_device": 2304,
281
+ "root_inode": 26993248770,
282
+ "source_root": "/root/autodl-tmp/envs/segvigen_20260915",
283
+ "source_tree_signature": "1b28561a4e2d804ee3e5c13de6ea1b502a264ab9da0d5c2a228baa27e6866b35",
284
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/segvigen_20260915",
285
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_segvigen_20260915"
286
+ },
287
+ {
288
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/patchalign3d_20260916/archive_manifest.json",
289
+ "archive_manifest_git_blob_sha1": "82e536da865ceee2c11046dfb8f332c5932fcc50",
290
+ "cloud_object_count": 8,
291
+ "excluded_entries_preserved": 1,
292
+ "files_and_symlinks": 64000,
293
+ "id": "env_patchalign3d_20260916",
294
+ "inventory_sha256": "6cd88c0a9798898557b14b220a85a9ec2c977839696b70eda5011b1648151a4e",
295
+ "logical_bytes": 7057081316,
296
+ "root_device": 2304,
297
+ "root_inode": 17371228099,
298
+ "source_root": "/root/autodl-tmp/envs/patchalign3d_20260916",
299
+ "source_tree_signature": "d8823489414e46831c56165cbd01640ff22d61ae399bcb4ff01295880f83d61c",
300
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/patchalign3d_20260916",
301
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_patchalign3d_20260916"
302
+ },
303
+ {
304
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/sam2/archive_manifest.json",
305
+ "archive_manifest_git_blob_sha1": "8d97d321ae99b3ccafd78b09a5b510a59452dab2",
306
+ "cloud_object_count": 8,
307
+ "excluded_entries_preserved": 1,
308
+ "files_and_symlinks": 62056,
309
+ "id": "env_sam2",
310
+ "inventory_sha256": "a3b236898920bb5c7cb0667ec2d735c249f848165cbeb5a0d1e796baa3680011",
311
+ "logical_bytes": 6987268021,
312
+ "root_device": 2304,
313
+ "root_inode": 3006463647,
314
+ "source_root": "/root/autodl-tmp/envs/sam2",
315
+ "source_tree_signature": "248c6c89d04e50a2df0eb10bfc2420b22d44b6f3c622925859d55b423831ea34",
316
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/sam2",
317
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_sam2"
318
+ },
319
+ {
320
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/cops_20260915/archive_manifest.json",
321
+ "archive_manifest_git_blob_sha1": "39d4a4b7d8dccf6a174e0116dc71814c72f20120",
322
+ "cloud_object_count": 8,
323
+ "exclude_relative": [
324
+ "lib/python3.10/site-packages/transformers/testing_utils.py"
325
+ ],
326
+ "excluded_entries_preserved": 2,
327
+ "files_and_symlinks": 73105,
328
+ "id": "env_cops_20260915",
329
+ "inventory_sha256": "603b31256fe16522a670138bd697a5fbbdfdf26bdbefe19ee9ec4c59bb3e2b24",
330
+ "logical_bytes": 7544349943,
331
+ "reviewed_marker_files": {},
332
+ "root_device": 2304,
333
+ "root_inode": 11199824708,
334
+ "source_root": "/root/autodl-tmp/envs/cops_20260915",
335
+ "source_tree_signature": "79c013d2084a94756d7648f18270ff70001b7b3e2bae1144c05f06164e4a5f5e",
336
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/cops_20260915",
337
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_cops_20260915"
338
+ },
339
+ {
340
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/partslip_20260915/archive_manifest.json",
341
+ "archive_manifest_git_blob_sha1": "86f0cddfd6b9223eb3d3d4b41c95239f68945c36",
342
+ "cloud_object_count": 10,
343
+ "exclude_relative": [
344
+ "lib/python3.9/site-packages/future/backports/test/badcert.pem",
345
+ "lib/python3.9/site-packages/future/backports/test/badkey.pem",
346
+ "lib/python3.9/site-packages/future/backports/test/keycert.passwd.pem",
347
+ "lib/python3.9/site-packages/future/backports/test/keycert.pem",
348
+ "lib/python3.9/site-packages/future/backports/test/keycert2.pem",
349
+ "lib/python3.9/site-packages/future/backports/test/ssl_key.passwd.pem",
350
+ "lib/python3.9/site-packages/future/backports/test/ssl_key.pem",
351
+ "lib/python3.9/site-packages/transformers/testing_utils.py"
352
+ ],
353
+ "excluded_entries_preserved": 10,
354
+ "files_and_symlinks": 83994,
355
+ "id": "env_partslip_20260915",
356
+ "inventory_sha256": "aac3288a92ddbcd92e4326cd22c61a84f845e0259897ebc241837bc900e15219",
357
+ "logical_bytes": 8063188589,
358
+ "reviewed_marker_files": {
359
+ "lib/python3.9/site-packages/cryptography/hazmat/primitives/serialization/ssh.py": "162b177bf9d429d3c67ea10d5612a99a86b399a23ca87f067be5466dcd1dca4c"
360
+ },
361
+ "root_device": 2304,
362
+ "root_inode": 21532341987,
363
+ "source_root": "/root/autodl-tmp/envs/partslip_20260915",
364
+ "source_tree_signature": "43a99ec8618853dcf0d134534f83876b7e002577f345a8d536ad238875a6ca18",
365
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/partslip_20260915",
366
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_partslip_20260915"
367
+ },
368
+ {
369
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/partsam_20260915/archive_manifest.json",
370
+ "archive_manifest_git_blob_sha1": "7e2efc9f43d3c551c02bdf6df54371fe7f2ae49e",
371
+ "cloud_object_count": 10,
372
+ "excluded_entries_preserved": 1,
373
+ "files_and_symlinks": 74059,
374
+ "id": "env_partsam_20260915",
375
+ "inventory_sha256": "63ca5dda9f3f119f4157019dfd43b9a464a0e5b400691a4deb05105feee20807",
376
+ "logical_bytes": 9375660356,
377
+ "root_device": 2304,
378
+ "root_inode": 19463516005,
379
+ "source_root": "/root/autodl-tmp/envs/partsam_20260915",
380
+ "source_tree_signature": "5bd5135d977a2374157225ecae45a31ff41180df86d83a22f8360da0c48ad41e",
381
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/partsam_20260915",
382
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_partsam_20260915"
383
+ },
384
+ {
385
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/partfield_20260915/archive_manifest.json",
386
+ "archive_manifest_git_blob_sha1": "7efbc9bf15c0898ffb0aada4f1f7f4b7e6709240",
387
+ "cloud_object_count": 8,
388
+ "excluded_entries_preserved": 1,
389
+ "files_and_symlinks": 55383,
390
+ "id": "env_partfield_20260915",
391
+ "inventory_sha256": "75b8ea8eeb89c60a002f366b7732eaa783f6f3ac14a2cd020dd5b02b5ea7f896",
392
+ "logical_bytes": 8053689576,
393
+ "root_device": 2304,
394
+ "root_inode": 21515846732,
395
+ "source_root": "/root/autodl-tmp/envs/partfield_20260915",
396
+ "source_tree_signature": "914875850ffc62b5e38dcfdca327bc28cd6826f6d032e53f0f95a2606d1bec38",
397
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/partfield_20260915",
398
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_partfield_20260915"
399
+ },
400
+ {
401
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/sampart3d_20260915/archive_manifest.json",
402
+ "archive_manifest_git_blob_sha1": "bb413befa5344c13ae17fe59f30b65322e8639ac",
403
+ "cloud_object_count": 14,
404
+ "exclude_relative": [
405
+ "lib/python3.10/site-packages/transformers/testing_utils.py"
406
+ ],
407
+ "excluded_entries_preserved": 2,
408
+ "files_and_symlinks": 75081,
409
+ "id": "env_sampart3d_20260915",
410
+ "inventory_sha256": "867719cf83e79db78b6d728eabf8af8f4a4760f7ae45d22fe33558749a843d4f",
411
+ "logical_bytes": 13548455209,
412
+ "reviewed_marker_files": {},
413
+ "root_device": 2304,
414
+ "root_inode": 13569733181,
415
+ "source_root": "/root/autodl-tmp/envs/sampart3d_20260915",
416
+ "source_tree_signature": "9f12afee6e3dd723661780952199704a25d914cd5c2efb476ccf4032b8d57d44",
417
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/sampart3d_20260915",
418
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_sampart3d_20260915"
419
+ },
420
+ {
421
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/samesh_20260915/archive_manifest.json",
422
+ "archive_manifest_git_blob_sha1": "36e9fc8bd95831f7ceee61d12f3048b452647543",
423
+ "cloud_object_count": 8,
424
+ "exclude_relative": [
425
+ "lib/python3.12/site-packages/transformers/testing_utils.py"
426
+ ],
427
+ "excluded_entries_preserved": 1,
428
+ "files_and_symlinks": 54464,
429
+ "id": "env_samesh_20260915",
430
+ "inventory_sha256": "ebd43dccfd8d1c4fe0e2eed439445f09a37e059e0fd2de12bd763598437aa3fc",
431
+ "logical_bytes": 6582841439,
432
+ "reviewed_marker_files": {},
433
+ "root_device": 2304,
434
+ "root_inode": 26886886505,
435
+ "source_root": "/root/autodl-tmp/envs/samesh_20260915",
436
+ "source_tree_signature": "b9dccc0b2618aff7ebb302b5b62a9131c7fe80e6eecae5f35f3ac9a746c59432",
437
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/samesh_20260915",
438
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_samesh_20260915"
439
+ },
440
+ {
441
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/zerops_20260915/archive_manifest.json",
442
+ "archive_manifest_git_blob_sha1": "50005338c12d722f9821c4ef01dd0e3e908ee054",
443
+ "cloud_object_count": 10,
444
+ "exclude_relative": [
445
+ "lib/python3.9/site-packages/future/backports/test/badcert.pem",
446
+ "lib/python3.9/site-packages/future/backports/test/badkey.pem",
447
+ "lib/python3.9/site-packages/future/backports/test/keycert.passwd.pem",
448
+ "lib/python3.9/site-packages/future/backports/test/keycert.pem",
449
+ "lib/python3.9/site-packages/future/backports/test/keycert2.pem",
450
+ "lib/python3.9/site-packages/future/backports/test/ssl_key.passwd.pem",
451
+ "lib/python3.9/site-packages/future/backports/test/ssl_key.pem",
452
+ "lib/python3.9/site-packages/transformers/testing_utils.py"
453
+ ],
454
+ "excluded_entries_preserved": 9,
455
+ "files_and_symlinks": 60177,
456
+ "id": "env_zerops_20260915",
457
+ "inventory_sha256": "5cbea300772bb1e905004734118ac2fc130cead21af4f818ae560d238b0fa00e",
458
+ "logical_bytes": 7673197944,
459
+ "reviewed_marker_files": {},
460
+ "root_device": 2304,
461
+ "root_inode": 22399522667,
462
+ "source_root": "/root/autodl-tmp/envs/zerops_20260915",
463
+ "source_tree_signature": "fc842e45b0e6fba2cb6319f4b03f5613e1d600931c0e63e2b8683157f45e9dca",
464
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/zerops_20260915",
465
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_zerops_20260915"
466
+ },
467
+ {
468
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/directpart_20260915/archive_manifest.json",
469
+ "archive_manifest_git_blob_sha1": "ee74d610ec3ac83ffc06875e074ec755afc5b836",
470
+ "cloud_object_count": 10,
471
+ "excluded_entries_preserved": 0,
472
+ "files_and_symlinks": 41940,
473
+ "id": "env_directpart_20260915",
474
+ "inventory_sha256": "cd61834b1847aa2c264c95dbf91d2f1a8cfb89d1921d98faae991655e292a3fa",
475
+ "logical_bytes": 8817029296,
476
+ "root_device": 2304,
477
+ "root_inode": 23868832709,
478
+ "source_root": "/root/autodl-tmp/envs/directpart_20260915",
479
+ "source_tree_signature": "67b3a102272c1dc3397984595227e2fd16257ea5b1106eab30658dee737d4d79",
480
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/directpart_20260915",
481
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/env_directpart_20260915"
482
+ },
483
+ {
484
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/support/local_workspace/archive_manifest.json",
485
+ "archive_manifest_git_blob_sha1": "f0a556deee670e6cc6a2e4499384dd3118bfa5ac",
486
+ "cloud_object_count": 4,
487
+ "excluded_entries_preserved": 0,
488
+ "files_and_symlinks": 769,
489
+ "id": "local_support",
490
+ "inventory_sha256": "d06e1b760fcc34e9442e997fd92f5dadd2b81f0ca0c605106d003520eddebfd2",
491
+ "logical_bytes": 363853311,
492
+ "root_device": 2304,
493
+ "root_inode": 12939558138,
494
+ "source_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/local_support_source/partseg_external_methods_20260915",
495
+ "source_tree_signature": "30f2f7f868e2094eeda983ef8de77425cf399f42c605363c7c27aec85ff9fe55",
496
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/support/local_workspace",
497
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/full_scope/local_support"
498
+ },
499
+ {
500
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/results_20260916/archive_manifest.json",
501
+ "archive_manifest_git_blob_sha1": "6f476143ab7429ea8b38a0419c90773f129aa63b",
502
+ "cloud_object_count": 24,
503
+ "excluded_entries_preserved": 0,
504
+ "files_and_symlinks": 39302,
505
+ "id": "results_20260916",
506
+ "inventory_sha256": "e524205d44fddd528f38d5eb78f62871349fec40e55e7e6c70a22c1b5b1c8b5e",
507
+ "logical_bytes": 30653649840,
508
+ "root_device": 2304,
509
+ "root_inode": 4307947090,
510
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/results_20260916",
511
+ "source_tree_signature": "d1a01b1d51e6d958dc16a8f81c56f54a8b4b2717d2fe3d5c6a356b14e1ebb4a7",
512
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/results_20260916",
513
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/results_20260916"
514
+ },
515
+ {
516
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/results_20260917/archive_manifest.json",
517
+ "archive_manifest_git_blob_sha1": "71d38fc34131c19ec3b81de79c8ae2705e39e44a",
518
+ "cloud_object_count": 8,
519
+ "excluded_entries_preserved": 0,
520
+ "files_and_symlinks": 8208,
521
+ "id": "results_20260917",
522
+ "inventory_sha256": "0b23f9e0b50efb40a511da47e996a0781c3096e5e1f5a31d6f666a7b304c41cb",
523
+ "logical_bytes": 6787647314,
524
+ "root_device": 2304,
525
+ "root_inode": 12984079307,
526
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/results_20260917",
527
+ "source_tree_signature": "0625325cc46bc203b3eee88fb91b4443bbf3139325d9708155ae73e9f01ba5ac",
528
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/results_20260917",
529
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/results_20260917"
530
+ },
531
+ {
532
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/lift_partseg_runs/archive_manifest.json",
533
+ "archive_manifest_git_blob_sha1": "919df39e528ca9c01486eaaaef16bbd3ad5c244f",
534
+ "cloud_object_count": 4,
535
+ "excluded_entries_preserved": 0,
536
+ "files_and_symlinks": 1516,
537
+ "id": "lift_partseg_runs",
538
+ "inventory_sha256": "f184a785e0074461e5bc422ca55d9a4ba87ecae080edbf6836d323fe9ef198f0",
539
+ "logical_bytes": 271574632,
540
+ "root_device": 2304,
541
+ "root_inode": 19954368,
542
+ "source_root": "/root/autodl-tmp/Lift/partseg_runs",
543
+ "source_tree_signature": "9c52e4e97f328e4840d3490c4a603d61443243a824da3e94fd846743bee1dcba",
544
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/lift_partseg_runs",
545
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/partseg_runs"
546
+ },
547
+ {
548
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/lift_partseg_code/archive_manifest.json",
549
+ "archive_manifest_git_blob_sha1": "ff04b02441d83f918adf1a47a6c036b3f9376d41",
550
+ "cloud_object_count": 4,
551
+ "excluded_entries_preserved": 0,
552
+ "files_and_symlinks": 19,
553
+ "id": "lift_partseg_code",
554
+ "inventory_sha256": "9d3b26354fedac8f0425d14b6b404ae5c2b9cd752087437ded26b45ebf902025",
555
+ "logical_bytes": 272902,
556
+ "root_device": 2304,
557
+ "root_inode": 27927176915,
558
+ "source_root": "/root/autodl-tmp/Lift/partseg",
559
+ "source_tree_signature": "ffb0632df73dcd9086614e517b60a98402eb07b6726c24e584eb015f23a2b763",
560
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/lift_partseg_code",
561
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/partseg_code"
562
+ },
563
+ {
564
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/numeric_tables/archive_manifest.json",
565
+ "archive_manifest_git_blob_sha1": "8fcf07499313ba935bc7f4d85b8ca73ecd011714",
566
+ "cloud_object_count": 4,
567
+ "excluded_entries_preserved": 0,
568
+ "files_and_symlinks": 1,
569
+ "id": "numeric_tables",
570
+ "inventory_sha256": "266faa68ac093d59f9155d4b38c4f3944f4179893af2c339144f6ea291abbdf8",
571
+ "logical_bytes": 87145,
572
+ "root_device": 2304,
573
+ "root_inode": 12939596984,
574
+ "source_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/numeric_table_source",
575
+ "source_tree_signature": "6baac6e20d6ca37db49dd1eada95ac02836d68ba1ebdda4d5a47097260989976",
576
+ "target_root": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/numeric_tables",
577
+ "work_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/numeric_table_upload"
578
+ }
579
+ ],
580
+ "user_deletion_authorized": true
581
+ }
partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/cleanup_records/2026-10-02/cleanup_verified_sources.py ADDED
@@ -0,0 +1,430 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Delete only exact inventory members of cloud-reverified, idle baseline units.
3
+
4
+ Authorization: human request to remove the already-confirmed uploaded material.
5
+ No recursive deletion, no symlink traversal, no shared-cache or dataset cleanup.
6
+ """
7
+ import argparse
8
+ import errno
9
+ import fcntl
10
+ import hashlib
11
+ import json
12
+ import os
13
+ import shutil
14
+ import stat
15
+ import sys
16
+ import time
17
+ from pathlib import Path, PurePosixPath
18
+
19
+ import finalize_partseg_archive as finalizer
20
+ import run_full_partseg_archive as driver
21
+ import upload_baseline_tree_archive as uploader
22
+
23
+ BASE = driver.BASE
24
+ WORK = BASE / 'cleanup_verified_20261001'
25
+ PLAN = WORK / 'cleanup_plan.json'
26
+ SUMMARY = WORK / 'source_cleanup_summary.json'
27
+ EVENTS = WORK / 'cleanup_events.jsonl'
28
+ EXTERNAL = Path('/root/autodl-tmp/Lift/partseg_external_20260915')
29
+ ALLOWED = {
30
+ 'legacy_results': str(EXTERNAL / 'results'),
31
+ 'smoke_trials': str(EXTERNAL / 'smoke'),
32
+ 'supplemental_runs_20260926': str(EXTERNAL / 'results_20260926'),
33
+ 'external_weights': str(EXTERNAL / 'weights'),
34
+ 'external_sources': str(EXTERNAL / 'sources'),
35
+ 'external_downloads': str(EXTERNAL / 'downloads'),
36
+ 'external_cache': str(EXTERNAL / 'cache'),
37
+ 'local_support': str(BASE / 'local_support_source/partseg_external_methods_20260915'),
38
+ 'results_20260916': str(EXTERNAL / 'results_20260916'),
39
+ 'results_20260917': str(EXTERNAL / 'results_20260917'),
40
+ 'lift_partseg_runs': '/root/autodl-tmp/Lift/partseg_runs',
41
+ 'lift_partseg_code': '/root/autodl-tmp/Lift/partseg',
42
+ 'numeric_tables': str(BASE / 'numeric_table_source'),
43
+ }
44
+ for name in ('source_fetch_20260915', 'particulate_overlay_20260917', 'meshfm_20260915',
45
+ 'p3sam_20260915', 'find3d_20260915', 'diff3f_20260915', 'segvigen_20260915',
46
+ 'patchalign3d_20260916', 'sam2', 'cops_20260915', 'partslip_20260915',
47
+ 'partsam_20260915', 'partfield_20260915', 'directpart_20260915',
48
+ 'sampart3d_20260915', 'samesh_20260915', 'zerops_20260915'):
49
+ ALLOWED['env_' + name] = '/root/autodl-tmp/envs/' + name
50
+
51
+
52
+ def event(stage, **extra):
53
+ item = {'time': uploader.now(), 'stage': stage, **extra}
54
+ WORK.mkdir(exist_ok=True)
55
+ with EVENTS.open('a') as handle:
56
+ handle.write(json.dumps(item, sort_keys=True) + '\n')
57
+ handle.flush()
58
+ os.fsync(handle.fileno())
59
+ print(json.dumps(item), flush=True)
60
+
61
+
62
+ def write_summary(payload):
63
+ uploader.atomic_json(SUMMARY, payload)
64
+
65
+
66
+ def safe_parts(relative):
67
+ path = PurePosixPath(relative)
68
+ if not relative or path.is_absolute() or str(path) != relative or any(x in ('', '.', '..') for x in path.parts):
69
+ raise RuntimeError('Unsafe inventory member path')
70
+ if '.git' in path.parts or '.ssh' in path.parts:
71
+ raise RuntimeError('Private metadata is never a cleanup target')
72
+ return path.parts
73
+
74
+
75
+ def checked_root(unit_id, source, require_exists=True):
76
+ root = Path(source)
77
+ if ALLOWED.get(unit_id) != str(root):
78
+ raise RuntimeError('Source root does not match exact allowlist')
79
+ if root.is_symlink() or root.resolve(strict=require_exists) != root:
80
+ raise RuntimeError('Source root or ancestor is a symlink')
81
+ if require_exists and not root.is_dir():
82
+ raise RuntimeError('Source root is missing')
83
+ return root
84
+
85
+
86
+ def open_parent(root_fd, relative):
87
+ parts = safe_parts(relative)
88
+ descriptor = os.dup(root_fd)
89
+ try:
90
+ for part in parts[:-1]:
91
+ child = os.open(part, os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW | os.O_CLOEXEC, dir_fd=descriptor)
92
+ os.close(descriptor)
93
+ descriptor = child
94
+ return descriptor, parts[-1]
95
+ except BaseException:
96
+ os.close(descriptor)
97
+ raise
98
+
99
+
100
+ def metadata_matches(item, actual, link_target=''):
101
+ if item['kind'] in ('file', 'file_chunk'):
102
+ return (stat.S_ISREG(actual.st_mode) and actual.st_size == item.get('source_size', item['size'])
103
+ and actual.st_mtime_ns == item['mtime_ns'])
104
+ if item['kind'] == 'symlink':
105
+ return (stat.S_ISLNK(actual.st_mode) and link_target == item['link_target']
106
+ and actual.st_mtime_ns == item['mtime_ns'])
107
+ return item['kind'] == 'dir' and stat.S_ISDIR(actual.st_mode)
108
+
109
+
110
+ def unlink_member(root_fd, item):
111
+ parent, name = open_parent(root_fd, item['path'])
112
+ try:
113
+ actual = os.stat(name, dir_fd=parent, follow_symlinks=False)
114
+ target = os.readlink(name, dir_fd=parent) if stat.S_ISLNK(actual.st_mode) else ''
115
+ if not metadata_matches(item, actual, target):
116
+ raise RuntimeError('Source member changed; refusing deletion')
117
+ if item['kind'] not in ('file', 'file_chunk', 'symlink'):
118
+ raise RuntimeError('Only files and symlinks may be unlinked')
119
+ os.unlink(name, dir_fd=parent)
120
+ return actual.st_size if stat.S_ISREG(actual.st_mode) else 0
121
+ finally:
122
+ os.close(parent)
123
+
124
+
125
+ def in_use(unit_ids):
126
+ roots = {key: ALLOWED[key] for key in unit_ids}
127
+ used = set()
128
+ inaccessible = False
129
+ for process in Path('/proc').iterdir():
130
+ if not process.name.isdigit() or int(process.name) == os.getpid():
131
+ continue
132
+ values = []
133
+ try:
134
+ values.extend((process / 'cmdline').read_bytes().decode(errors='replace').split('\0'))
135
+ environment = (process / 'environ').read_bytes().decode(errors='replace').split('\0')
136
+ values.extend(value for value in environment if value.startswith((
137
+ 'PYTHONPATH=', 'CONDA_PREFIX=', 'VIRTUAL_ENV=', 'HF_HOME=', 'HF_HUB_CACHE=',
138
+ 'TRANSFORMERS_CACHE=', 'TORCH_HOME=', 'XDG_CACHE_HOME=', 'LD_LIBRARY_PATH=')))
139
+ values.append((process / 'maps').read_text(errors='replace'))
140
+ for name in ('cwd', 'exe'):
141
+ try:
142
+ values.append(os.readlink(process / name))
143
+ except FileNotFoundError:
144
+ pass
145
+ for descriptor in (process / 'fd').iterdir():
146
+ try:
147
+ values.append(os.readlink(descriptor))
148
+ except FileNotFoundError:
149
+ pass
150
+ except (FileNotFoundError, ProcessLookupError):
151
+ continue
152
+ except PermissionError:
153
+ inaccessible = True
154
+ continue
155
+ for key, root in roots.items():
156
+ if any(root + '/' in value or value == root or value.endswith('=' + root) for value in values):
157
+ used.add(key)
158
+ return used, inaccessible
159
+
160
+
161
+ class PinnedCloud:
162
+ def __init__(self, api, revision):
163
+ self.api, self.revision = api, revision
164
+
165
+ def get_paths_info(self, *args, **kwargs):
166
+ kwargs['revision'] = self.revision
167
+ return self.api.get_paths_info(*args, **kwargs)
168
+
169
+
170
+ def cloud_recheck(expected):
171
+ api = uploader.api()
172
+ last = None
173
+ for attempt in range(3):
174
+ if attempt:
175
+ time.sleep(15 * attempt)
176
+ try:
177
+ # The unqualified model-info URL was observed returning a cached old
178
+ # commit. Explicit main resolves the current branch before pinning.
179
+ revision = api.repo_info(uploader.REPO_ID, repo_type='model', revision='main').sha
180
+ original = uploader.api
181
+ try:
182
+ uploader.api = lambda: PinnedCloud(api, revision)
183
+ finalizer.verify_objects(expected)
184
+ finally:
185
+ uploader.api = original
186
+ return revision
187
+ except Exception as exc:
188
+ last = type(exc).__name__
189
+ fixed_reasons = {
190
+ 'Remote archive object is missing': 'object_missing',
191
+ 'Remote archive object size differs; no overwrite allowed': 'size_mismatch',
192
+ 'Archive tar is not LFS-backed': 'tar_not_lfs',
193
+ 'Remote LFS SHA256 differs; no overwrite allowed': 'lfs_hash_mismatch',
194
+ 'Remote metadata Git blob SHA1 differs; no overwrite allowed': 'metadata_hash_mismatch',
195
+ }
196
+ event('CLOUD_RECHECK_RETRY', attempt=attempt + 1, error_type=last,
197
+ reason=fixed_reasons.get(str(exc)), diagnostics=uploader.safe_exception_chain(exc))
198
+ raise RuntimeError('Cloud recheck failed; no deletion authorized by this plan')
199
+
200
+
201
+ def read_inventory(work):
202
+ path = Path(work) / 'source_inventory.jsonl'
203
+ inventory = [json.loads(line) for line in path.read_text().splitlines() if line]
204
+ for item in inventory:
205
+ safe_parts(item['path'])
206
+ return inventory, uploader.sha256(path)
207
+
208
+
209
+ def candidate_units():
210
+ queue = json.loads(driver.QUEUE.read_text())
211
+ candidates = {}
212
+ retained = []
213
+ for unit in queue['units']:
214
+ if not driver.unit_state(unit)['complete']:
215
+ retained.append({'id': unit['id'], 'reason': 'not_complete_at_authorization_snapshot'})
216
+ elif unit['id'] not in ALLOWED:
217
+ retained.append({'id': unit['id'], 'reason': 'shared_dependency_or_upload_control'})
218
+ else:
219
+ candidates[unit['id']] = unit
220
+ for unit_id, directory, relative in finalizer.INITIAL:
221
+ work = BASE / directory
222
+ plan = json.loads((work / 'archive_plan.json').read_text())
223
+ candidates[unit_id] = {'id': unit_id, 'source_root': plan['source_root'],
224
+ 'work_root': str(work), 'target_root': finalizer.ROOT + '/' + relative}
225
+ return candidates, retained
226
+
227
+
228
+ def make_plan():
229
+ if PLAN.exists():
230
+ raise RuntimeError('Frozen cleanup plan already exists; do not expand it')
231
+ candidates, retained = candidate_units()
232
+ summary = {'schema': 'lift.partseg_authorized_source_cleanup.v1', 'state': 'AUDITING',
233
+ 'user_deletion_authorized': True, 'authorization_scope': 'already_complete_partseg_baseline_units_only',
234
+ 'source_recovery': 'verified HF unit archive manifests and tar shards',
235
+ 'dataset_deleted': False, 'shared_dependencies_deleted': False, 'units': {}, 'retained_units': retained}
236
+ write_summary(summary)
237
+ busy, inaccessible = in_use(candidates)
238
+ ready = []
239
+ expected = {}
240
+ for unit_id, unit in candidates.items():
241
+ if inaccessible or unit_id in busy:
242
+ retained.append({'id': unit_id, 'reason': 'activity_scan_incomplete' if inaccessible else 'currently_in_use'})
243
+ continue
244
+ event('SOURCE_PREFLIGHT', unit=unit_id)
245
+ try:
246
+ root = checked_root(unit_id, unit['source_root'])
247
+ work = Path(unit['work_root'])
248
+ if not work.is_relative_to(BASE) or not unit['target_root'].startswith(finalizer.ROOT + '/'):
249
+ raise RuntimeError('Archive work or target is outside this baseline snapshot')
250
+ plan = json.loads((work / 'archive_plan.json').read_text())
251
+ if plan['source_root'] != str(root):
252
+ raise RuntimeError('Frozen archive source differs')
253
+ row, objects, _ = finalizer.unit_expectations(unit_id, work, unit['target_root'])
254
+ inventory, digest = read_inventory(work)
255
+ uploader.SOURCE_ROOT = root
256
+ uploader.validate_entries(inventory)
257
+ for chunk in plan.get('chunked_sources', []):
258
+ if uploader.sha256(root / chunk['path']) != chunk['source_sha256']:
259
+ raise RuntimeError('Oversized source content hash differs')
260
+ root_stat = root.stat()
261
+ unique_files = {item['path']: item for item in inventory if item['kind'] != 'dir'}
262
+ ready.append({**unit, 'inventory_sha256': digest, 'root_device': root_stat.st_dev,
263
+ 'root_inode': root_stat.st_ino, 'cloud_object_count': len(objects),
264
+ 'archive_manifest': row['archive_manifest'], 'archive_manifest_git_blob_sha1': row['manifest_git_blob_sha1'],
265
+ 'source_tree_signature': plan['source_tree_signature'],
266
+ 'files_and_symlinks': len(unique_files), 'excluded_entries_preserved': len(plan.get('excluded_entries', [])),
267
+ 'logical_bytes': sum(item.get('source_size', item['size']) for item in unique_files.values())})
268
+ expected.update(objects)
269
+ event('SOURCE_PREFLIGHT_PASSED', unit=unit_id, files=len(unique_files))
270
+ except Exception as exc:
271
+ retained.append({'id': unit_id, 'reason': 'source_or_archive_preflight_failed', 'error_type': type(exc).__name__})
272
+ event('SOURCE_RETAINED', unit=unit_id, error_type=type(exc).__name__)
273
+ event('CLOUD_RECHECK_STARTED', units=len(ready), objects=len(expected))
274
+ revision = cloud_recheck(expected) if expected else None
275
+ payload = {'schema': 'lift.partseg_frozen_cleanup_plan.v1', 'prepared_at': uploader.now(),
276
+ 'repo_id': uploader.REPO_ID, 'revision_rechecked': revision, 'user_deletion_authorized': True,
277
+ 'units': ready, 'retained_units': retained, 'cloud_objects_rechecked': len(expected)}
278
+ uploader.atomic_json(PLAN, payload)
279
+ summary.update(state='PLAN_READY', revision_rechecked=revision, units_selected=len(ready),
280
+ cloud_objects_rechecked=len(expected), plan_sha256=uploader.sha256(PLAN), retained_units=retained)
281
+ write_summary(summary)
282
+ event('PLAN_READY', units=len(ready), cloud_objects=len(expected), plan_sha256=summary['plan_sha256'],
283
+ logical_bytes=sum(row['logical_bytes'] for row in ready), retained_units=retained)
284
+
285
+
286
+ def remove_empty_directories(root_fd, inventory):
287
+ directories = {item['path'] for item in inventory if item['kind'] == 'dir'}
288
+ removed = 0
289
+ for relative in sorted(directories, key=lambda value: len(PurePosixPath(value).parts), reverse=True):
290
+ try:
291
+ parent, name = open_parent(root_fd, relative)
292
+ try:
293
+ os.rmdir(name, dir_fd=parent)
294
+ removed += 1
295
+ finally:
296
+ os.close(parent)
297
+ except OSError as exc:
298
+ if exc.errno not in (errno.ENOENT, errno.ENOTEMPTY, errno.EEXIST):
299
+ raise
300
+ return removed
301
+
302
+
303
+ def checked_activity(unit_id):
304
+ for attempt in range(10):
305
+ busy, inaccessible = in_use([unit_id])
306
+ if busy or not inaccessible:
307
+ return busy, inaccessible
308
+ # A short-lived privileged SSH/auth process can be opaque during a
309
+ # concurrent status connection. Retry visibility, never ignore opacity.
310
+ if attempt < 9:
311
+ time.sleep(1)
312
+ return busy, inaccessible
313
+
314
+
315
+ def execute(plan_sha256, retry_retained=False):
316
+ if uploader.sha256(PLAN) != plan_sha256:
317
+ raise RuntimeError('Frozen deletion plan hash does not match')
318
+ plan = json.loads(PLAN.read_text())
319
+ summary = json.loads(SUMMARY.read_text())
320
+ if summary.get('state') == 'COMPLETE' and not retry_retained:
321
+ event('ALREADY_COMPLETE')
322
+ return
323
+ if retry_retained:
324
+ for row in summary['units'].values():
325
+ if row.get('status') == 'RETAINED' and row.get('deleted_files', 0) == 0:
326
+ row['status'] = 'RETRY_PENDING'
327
+ # Recheck every cloud object again immediately before this destructive phase.
328
+ expected = {}
329
+ for unit in plan['units']:
330
+ _, objects, _ = finalizer.unit_expectations(unit['id'], Path(unit['work_root']), unit['target_root'])
331
+ expected.update(objects)
332
+ summary['execution_revision_rechecked'] = cloud_recheck(expected) if expected else None
333
+ summary.setdefault('started_at', uploader.now())
334
+ summary.setdefault('disk_free_before_bytes', shutil.disk_usage(BASE).free)
335
+ summary.setdefault('execution_attempts', []).append({'time': uploader.now(), 'retry_retained': retry_retained,
336
+ 'disk_free_before_attempt_bytes': shutil.disk_usage(BASE).free})
337
+ summary.update(state='EXECUTING')
338
+ write_summary(summary)
339
+ for unit in plan['units']:
340
+ unit_id = unit['id']
341
+ if summary['units'].get(unit_id, {}).get('status') in ('SOURCE_REMOVED', 'ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED', 'RETAINED'):
342
+ continue
343
+ busy, inaccessible = checked_activity(unit_id)
344
+ if busy or inaccessible:
345
+ summary['units'][unit_id] = {'status': 'RETAINED',
346
+ 'reason': 'currently_in_use' if busy else 'activity_scan_incomplete', 'deleted_files': 0}
347
+ write_summary(summary)
348
+ continue
349
+ root = checked_root(unit_id, unit['source_root'])
350
+ actual = root.stat()
351
+ if (actual.st_dev, actual.st_ino) != (unit['root_device'], unit['root_inode']):
352
+ raise RuntimeError('Source root identity changed')
353
+ inventory, digest = read_inventory(unit['work_root'])
354
+ if digest != unit['inventory_sha256']:
355
+ raise RuntimeError('Frozen inventory hash changed')
356
+ uploader.SOURCE_ROOT = root
357
+ uploader.validate_entries(inventory)
358
+ root_fd = os.open(root, os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW | os.O_CLOEXEC)
359
+ progress = {'status': 'DELETING_ARCHIVED_MEMBERS', 'source_root': str(root),
360
+ 'archive_manifest': unit['archive_manifest'], 'deleted_files': 0, 'deleted_logical_bytes': 0,
361
+ 'excluded_entries_preserved': unit['excluded_entries_preserved']}
362
+ summary['units'][unit_id] = progress
363
+ write_summary(summary)
364
+ event('DELETE_STARTED', unit=unit_id, files=unit['files_and_symlinks'])
365
+ try:
366
+ unique_files = {item['path']: item for item in inventory if item['kind'] != 'dir'}
367
+ for number, item in enumerate(unique_files.values(), 1):
368
+ progress['deleted_logical_bytes'] += unlink_member(root_fd, item)
369
+ progress['deleted_files'] += 1
370
+ if number % 1000 == 0:
371
+ now_stat = root.stat()
372
+ if (now_stat.st_dev, now_stat.st_ino) != (unit['root_device'], unit['root_inode']):
373
+ raise RuntimeError('Source root moved during cleanup')
374
+ write_summary(summary)
375
+ progress['empty_directories_removed'] = remove_empty_directories(root_fd, inventory)
376
+ finally:
377
+ os.close(root_fd)
378
+ write_summary(summary)
379
+ # rmdir, not rmtree: all omitted/new entries remain, so a nonempty root
380
+ # cannot be removed. A dataset or secret omitted from the archive survives.
381
+ try:
382
+ checked_root(unit_id, str(root))
383
+ current_root = root.stat()
384
+ if (current_root.st_dev, current_root.st_ino) != (unit['root_device'], unit['root_inode']):
385
+ raise RuntimeError('Source root identity changed before final rmdir')
386
+ root.rmdir()
387
+ progress['status'] = 'SOURCE_REMOVED'
388
+ except OSError as exc:
389
+ if exc.errno not in (errno.ENOTEMPTY, errno.EEXIST):
390
+ raise
391
+ progress['status'] = 'ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED'
392
+ progress['finished_at'] = uploader.now()
393
+ write_summary(summary)
394
+ event('UNIT_CLEANED', unit=unit_id, status=progress['status'],
395
+ deleted_files=progress['deleted_files'], deleted_logical_bytes=progress['deleted_logical_bytes'])
396
+ summary.update(state='COMPLETE', finished_at=uploader.now(), disk_free_after_bytes=shutil.disk_usage(BASE).free)
397
+ summary['deleted_files'] = sum(row.get('deleted_files', 0) for row in summary['units'].values())
398
+ summary['deleted_logical_bytes'] = sum(row.get('deleted_logical_bytes', 0) for row in summary['units'].values())
399
+ summary['disk_free_change_bytes'] = summary['disk_free_after_bytes'] - summary['disk_free_before_bytes']
400
+ summary['disk_free_change_note'] = 'Concurrent server work can change the free-space delta; not an exact allocation count.'
401
+ write_summary(summary)
402
+ event('CLEANUP_COMPLETE', deleted_files=summary['deleted_files'], deleted_logical_bytes=summary['deleted_logical_bytes'],
403
+ disk_free_after_bytes=summary['disk_free_after_bytes'])
404
+
405
+
406
+ if __name__ == '__main__':
407
+ parser = argparse.ArgumentParser()
408
+ parser.add_argument('--plan', action='store_true')
409
+ parser.add_argument('--execute', metavar='PLAN_SHA256')
410
+ parser.add_argument('--retry-retained', action='store_true')
411
+ args = parser.parse_args()
412
+ if bool(args.plan) == bool(args.execute):
413
+ parser.error('Choose exactly one phase')
414
+ if args.retry_retained and not args.execute:
415
+ parser.error('Retry is only valid with an exact frozen execution plan')
416
+ WORK.mkdir(exist_ok=True)
417
+ with (BASE / 'source_cleanup.lock').open('a') as lock:
418
+ try:
419
+ fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
420
+ if args.plan:
421
+ make_plan()
422
+ else:
423
+ execute(args.execute, args.retry_retained)
424
+ except Exception as exc:
425
+ event('CLEANUP_FAILED', error_type=type(exc).__name__)
426
+ if SUMMARY.exists():
427
+ summary = json.loads(SUMMARY.read_text())
428
+ summary.update(state='FAILED', error_type=type(exc).__name__)
429
+ write_summary(summary)
430
+ raise SystemExit(1)
partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/cleanup_records/2026-10-02/confirmed_baseline_cleanup.json ADDED
@@ -0,0 +1,365 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "authorization_scope": "already_complete_partseg_baseline_units_only",
3
+ "cloud_objects_rechecked": 278,
4
+ "dataset_deleted": false,
5
+ "deleted_files": 1121552,
6
+ "deleted_logical_bytes": 248370031738,
7
+ "disk_free_after_bytes": 304355336192,
8
+ "disk_free_before_bytes": 61295591424,
9
+ "disk_free_change_bytes": 243059744768,
10
+ "disk_free_change_note": "Concurrent server work can change the free-space delta; not an exact allocation count.",
11
+ "execution_attempts": [
12
+ {
13
+ "disk_free_before_attempt_bytes": 150951247872,
14
+ "retry_retained": true,
15
+ "time": "2026-10-02T00:16:46+0800"
16
+ }
17
+ ],
18
+ "execution_revision_rechecked": "339972365699a2e2528aed5197b8404b430a6295",
19
+ "finished_at": "2026-10-02T00:17:59+0800",
20
+ "plan_sha256": "cead79bc6c112246b86b9a99ae83e7b24984f1d69a14a17b26dbf3d4fcb53865",
21
+ "retained_units": [
22
+ {
23
+ "id": "external_root_files",
24
+ "reason": "shared_dependency_or_upload_control"
25
+ },
26
+ {
27
+ "id": "external_tools",
28
+ "reason": "shared_dependency_or_upload_control"
29
+ },
30
+ {
31
+ "id": "external_status",
32
+ "reason": "shared_dependency_or_upload_control"
33
+ },
34
+ {
35
+ "id": "external_logs",
36
+ "reason": "shared_dependency_or_upload_control"
37
+ },
38
+ {
39
+ "id": "shared_torch_dino",
40
+ "reason": "shared_dependency_or_upload_control"
41
+ },
42
+ {
43
+ "id": "shared_sam21",
44
+ "reason": "shared_dependency_or_upload_control"
45
+ },
46
+ {
47
+ "id": "shared_hf_dependencies",
48
+ "reason": "shared_dependency_or_upload_control"
49
+ },
50
+ {
51
+ "id": "external_remote_scripts",
52
+ "reason": "shared_dependency_or_upload_control"
53
+ }
54
+ ],
55
+ "revision_rechecked": "339972365699a2e2528aed5197b8404b430a6295",
56
+ "schema": "lift.partseg_authorized_source_cleanup.v1",
57
+ "shared_dependencies_deleted": false,
58
+ "source_recovery": "verified HF unit archive manifests and tar shards",
59
+ "started_at": "2026-10-02T00:09:36+0800",
60
+ "state": "COMPLETE",
61
+ "units": {
62
+ "env_cops_20260915": {
63
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/cops_20260915/archive_manifest.json",
64
+ "deleted_files": 73105,
65
+ "deleted_logical_bytes": 7544349943,
66
+ "empty_directories_removed": 7998,
67
+ "excluded_entries_preserved": 2,
68
+ "finished_at": "2026-10-02T00:17:17+0800",
69
+ "source_root": "/root/autodl-tmp/envs/cops_20260915",
70
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
71
+ },
72
+ "env_diff3f_20260915": {
73
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/diff3f_20260915/archive_manifest.json",
74
+ "deleted_files": 47828,
75
+ "deleted_logical_bytes": 6202925916,
76
+ "empty_directories_removed": 4481,
77
+ "excluded_entries_preserved": 1,
78
+ "finished_at": "2026-10-02T00:16:54+0800",
79
+ "source_root": "/root/autodl-tmp/envs/diff3f_20260915",
80
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
81
+ },
82
+ "env_directpart_20260915": {
83
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/directpart_20260915/archive_manifest.json",
84
+ "deleted_files": 41940,
85
+ "deleted_logical_bytes": 8817029296,
86
+ "empty_directories_removed": 3478,
87
+ "excluded_entries_preserved": 0,
88
+ "finished_at": "2026-10-02T00:17:56+0800",
89
+ "source_root": "/root/autodl-tmp/envs/directpart_20260915",
90
+ "status": "SOURCE_REMOVED"
91
+ },
92
+ "env_find3d_20260915": {
93
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/find3d_20260915/archive_manifest.json",
94
+ "deleted_files": 54504,
95
+ "deleted_logical_bytes": 7662265538,
96
+ "empty_directories_removed": 5804,
97
+ "excluded_entries_preserved": 2,
98
+ "finished_at": "2026-10-02T00:16:50+0800",
99
+ "source_root": "/root/autodl-tmp/envs/find3d_20260915",
100
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
101
+ },
102
+ "env_meshfm_20260915": {
103
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/meshfm_20260915/archive_manifest.json",
104
+ "deleted_files": 43303,
105
+ "deleted_logical_bytes": 5654363104,
106
+ "empty_directories_removed": 3775,
107
+ "excluded_entries_preserved": 0,
108
+ "finished_at": "2026-10-02T00:09:53+0800",
109
+ "source_root": "/root/autodl-tmp/envs/meshfm_20260915",
110
+ "status": "SOURCE_REMOVED"
111
+ },
112
+ "env_p3sam_20260915": {
113
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/p3sam_20260915/archive_manifest.json",
114
+ "deleted_files": 64210,
115
+ "deleted_logical_bytes": 8116481350,
116
+ "empty_directories_removed": 6737,
117
+ "excluded_entries_preserved": 1,
118
+ "finished_at": "2026-10-02T00:09:59+0800",
119
+ "source_root": "/root/autodl-tmp/envs/p3sam_20260915",
120
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
121
+ },
122
+ "env_partfield_20260915": {
123
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/partfield_20260915/archive_manifest.json",
124
+ "deleted_files": 55383,
125
+ "deleted_logical_bytes": 8053689576,
126
+ "empty_directories_removed": 7015,
127
+ "excluded_entries_preserved": 1,
128
+ "finished_at": "2026-10-02T00:17:35+0800",
129
+ "source_root": "/root/autodl-tmp/envs/partfield_20260915",
130
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
131
+ },
132
+ "env_particulate_overlay_20260917": {
133
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/particulate_overlay_20260917/archive_manifest.json",
134
+ "deleted_files": 3735,
135
+ "deleted_logical_bytes": 137411017,
136
+ "empty_directories_removed": 582,
137
+ "excluded_entries_preserved": 0,
138
+ "finished_at": "2026-10-02T00:09:49+0800",
139
+ "source_root": "/root/autodl-tmp/envs/particulate_overlay_20260917",
140
+ "status": "SOURCE_REMOVED"
141
+ },
142
+ "env_partsam_20260915": {
143
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/partsam_20260915/archive_manifest.json",
144
+ "deleted_files": 74059,
145
+ "deleted_logical_bytes": 9375660356,
146
+ "empty_directories_removed": 8191,
147
+ "excluded_entries_preserved": 1,
148
+ "finished_at": "2026-10-02T00:17:30+0800",
149
+ "source_root": "/root/autodl-tmp/envs/partsam_20260915",
150
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
151
+ },
152
+ "env_partslip_20260915": {
153
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/partslip_20260915/archive_manifest.json",
154
+ "deleted_files": 83994,
155
+ "deleted_logical_bytes": 8063188589,
156
+ "empty_directories_removed": 8422,
157
+ "excluded_entries_preserved": 10,
158
+ "finished_at": "2026-10-02T00:17:24+0800",
159
+ "source_root": "/root/autodl-tmp/envs/partslip_20260915",
160
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
161
+ },
162
+ "env_patchalign3d_20260916": {
163
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/patchalign3d_20260916/archive_manifest.json",
164
+ "deleted_files": 64000,
165
+ "deleted_logical_bytes": 7057081316,
166
+ "empty_directories_removed": 6261,
167
+ "excluded_entries_preserved": 1,
168
+ "finished_at": "2026-10-02T00:17:05+0800",
169
+ "source_root": "/root/autodl-tmp/envs/patchalign3d_20260916",
170
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
171
+ },
172
+ "env_sam2": {
173
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/sam2/archive_manifest.json",
174
+ "deleted_files": 62056,
175
+ "deleted_logical_bytes": 6987268021,
176
+ "empty_directories_removed": 6099,
177
+ "excluded_entries_preserved": 1,
178
+ "finished_at": "2026-10-02T00:17:10+0800",
179
+ "source_root": "/root/autodl-tmp/envs/sam2",
180
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
181
+ },
182
+ "env_samesh_20260915": {
183
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/samesh_20260915/archive_manifest.json",
184
+ "deleted_files": 54464,
185
+ "deleted_logical_bytes": 6582841439,
186
+ "empty_directories_removed": 5321,
187
+ "excluded_entries_preserved": 1,
188
+ "finished_at": "2026-10-02T00:17:47+0800",
189
+ "source_root": "/root/autodl-tmp/envs/samesh_20260915",
190
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
191
+ },
192
+ "env_sampart3d_20260915": {
193
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/sampart3d_20260915/archive_manifest.json",
194
+ "deleted_files": 75081,
195
+ "deleted_logical_bytes": 13548455209,
196
+ "empty_directories_removed": 8627,
197
+ "excluded_entries_preserved": 2,
198
+ "finished_at": "2026-10-02T00:17:43+0800",
199
+ "source_root": "/root/autodl-tmp/envs/sampart3d_20260915",
200
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
201
+ },
202
+ "env_segvigen_20260915": {
203
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/segvigen_20260915/archive_manifest.json",
204
+ "deleted_files": 61534,
205
+ "deleted_logical_bytes": 15689890942,
206
+ "empty_directories_removed": 5618,
207
+ "excluded_entries_preserved": 1,
208
+ "finished_at": "2026-10-02T00:17:00+0800",
209
+ "source_root": "/root/autodl-tmp/envs/segvigen_20260915",
210
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
211
+ },
212
+ "env_source_fetch_20260915": {
213
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/source_fetch_20260915/archive_manifest.json",
214
+ "deleted_files": 2310,
215
+ "deleted_logical_bytes": 24530938,
216
+ "empty_directories_removed": 306,
217
+ "excluded_entries_preserved": 0,
218
+ "finished_at": "2026-10-02T00:09:49+0800",
219
+ "source_root": "/root/autodl-tmp/envs/source_fetch_20260915",
220
+ "status": "SOURCE_REMOVED"
221
+ },
222
+ "env_zerops_20260915": {
223
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/environments/zerops_20260915/archive_manifest.json",
224
+ "deleted_files": 60177,
225
+ "deleted_logical_bytes": 7673197944,
226
+ "empty_directories_removed": 6553,
227
+ "excluded_entries_preserved": 9,
228
+ "finished_at": "2026-10-02T00:17:52+0800",
229
+ "source_root": "/root/autodl-tmp/envs/zerops_20260915",
230
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
231
+ },
232
+ "external_cache": {
233
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/cache/archive_manifest.json",
234
+ "deleted_files": 116752,
235
+ "deleted_logical_bytes": 40387439987,
236
+ "empty_directories_removed": 18326,
237
+ "excluded_entries_preserved": 1,
238
+ "finished_at": "2026-10-02T00:09:49+0800",
239
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/cache",
240
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
241
+ },
242
+ "external_downloads": {
243
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/downloads/archive_manifest.json",
244
+ "deleted_files": 3,
245
+ "deleted_logical_bytes": 87854488,
246
+ "empty_directories_removed": 2,
247
+ "excluded_entries_preserved": 0,
248
+ "finished_at": "2026-10-02T00:09:39+0800",
249
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/downloads",
250
+ "status": "SOURCE_REMOVED"
251
+ },
252
+ "external_sources": {
253
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/sources/archive_manifest.json",
254
+ "deleted_files": 25070,
255
+ "deleted_logical_bytes": 32362501543,
256
+ "empty_directories_removed": 3062,
257
+ "excluded_entries_preserved": 236,
258
+ "finished_at": "2026-10-02T00:09:39+0800",
259
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/sources",
260
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
261
+ },
262
+ "external_weights": {
263
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/dependencies/weights/archive_manifest.json",
264
+ "deleted_files": 46,
265
+ "deleted_logical_bytes": 4531634798,
266
+ "empty_directories_removed": 13,
267
+ "excluded_entries_preserved": 0,
268
+ "finished_at": "2026-10-02T00:09:36+0800",
269
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/weights",
270
+ "status": "SOURCE_REMOVED"
271
+ },
272
+ "legacy_results": {
273
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/historical_trials/results/archive_manifest.json",
274
+ "deleted_files": 128,
275
+ "deleted_logical_bytes": 143605658,
276
+ "empty_directories_removed": 10,
277
+ "excluded_entries_preserved": 0,
278
+ "finished_at": "2026-10-02T00:09:36+0800",
279
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/results",
280
+ "status": "SOURCE_REMOVED"
281
+ },
282
+ "lift_partseg_code": {
283
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/lift_partseg_code/archive_manifest.json",
284
+ "deleted_files": 19,
285
+ "deleted_logical_bytes": 272902,
286
+ "empty_directories_removed": 1,
287
+ "excluded_entries_preserved": 0,
288
+ "finished_at": "2026-10-02T00:17:59+0800",
289
+ "source_root": "/root/autodl-tmp/Lift/partseg",
290
+ "status": "SOURCE_REMOVED"
291
+ },
292
+ "lift_partseg_runs": {
293
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/lift_partseg_runs/archive_manifest.json",
294
+ "deleted_files": 1516,
295
+ "deleted_logical_bytes": 271574632,
296
+ "empty_directories_removed": 104,
297
+ "excluded_entries_preserved": 0,
298
+ "finished_at": "2026-10-02T00:17:59+0800",
299
+ "source_root": "/root/autodl-tmp/Lift/partseg_runs",
300
+ "status": "SOURCE_REMOVED"
301
+ },
302
+ "local_support": {
303
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/support/local_workspace/archive_manifest.json",
304
+ "deleted_files": 769,
305
+ "deleted_logical_bytes": 363853311,
306
+ "empty_directories_removed": 130,
307
+ "excluded_entries_preserved": 0,
308
+ "finished_at": "2026-10-02T00:17:56+0800",
309
+ "source_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/local_support_source/partseg_external_methods_20260915",
310
+ "status": "SOURCE_REMOVED"
311
+ },
312
+ "numeric_tables": {
313
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/numeric_tables/archive_manifest.json",
314
+ "deleted_files": 1,
315
+ "deleted_logical_bytes": 87145,
316
+ "empty_directories_removed": 0,
317
+ "excluded_entries_preserved": 0,
318
+ "finished_at": "2026-10-02T00:17:59+0800",
319
+ "source_root": "/root/autodl-tmp/Lift/partseg_hf_archive_20260930/numeric_table_source",
320
+ "status": "SOURCE_REMOVED"
321
+ },
322
+ "results_20260916": {
323
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/results_20260916/archive_manifest.json",
324
+ "deleted_files": 39302,
325
+ "deleted_logical_bytes": 30653649840,
326
+ "empty_directories_removed": 36,
327
+ "excluded_entries_preserved": 0,
328
+ "finished_at": "2026-10-02T00:17:59+0800",
329
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/results_20260916",
330
+ "status": "SOURCE_REMOVED"
331
+ },
332
+ "results_20260917": {
333
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/results_20260917/archive_manifest.json",
334
+ "deleted_files": 8208,
335
+ "deleted_logical_bytes": 6787647314,
336
+ "empty_directories_removed": 8,
337
+ "excluded_entries_preserved": 0,
338
+ "finished_at": "2026-10-02T00:17:59+0800",
339
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/results_20260917",
340
+ "status": "SOURCE_REMOVED"
341
+ },
342
+ "smoke_trials": {
343
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/historical_trials/smoke/archive_manifest.json",
344
+ "deleted_files": 250,
345
+ "deleted_logical_bytes": 2353684396,
346
+ "empty_directories_removed": 49,
347
+ "excluded_entries_preserved": 2,
348
+ "finished_at": "2026-10-02T00:09:36+0800",
349
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/smoke",
350
+ "status": "ARCHIVED_MEMBERS_REMOVED_EXCLUSIONS_RETAINED"
351
+ },
352
+ "supplemental_runs_20260926": {
353
+ "archive_manifest": "partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/supplemental_runs_20260926/archive_manifest.json",
354
+ "deleted_files": 7805,
355
+ "deleted_logical_bytes": 3235595230,
356
+ "empty_directories_removed": 5,
357
+ "excluded_entries_preserved": 0,
358
+ "finished_at": "2026-10-02T00:09:36+0800",
359
+ "source_root": "/root/autodl-tmp/Lift/partseg_external_20260915/results_20260926",
360
+ "status": "SOURCE_REMOVED"
361
+ }
362
+ },
363
+ "units_selected": 30,
364
+ "user_deletion_authorized": true
365
+ }
partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/cleanup_records/2026-10-02/post_cleanup_checks.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "archive_members_checked": 1121552,
3
+ "archived_members_still_present": 0,
4
+ "cloud_objects_reverified": 278,
5
+ "excluded_entries_missing": 0,
6
+ "excluded_entries_preserved": 272,
7
+ "revision_reverified": "339972365699a2e2528aed5197b8404b430a6295",
8
+ "status": "POST_CLEANUP_VERIFIED",
9
+ "units": 30
10
+ }
partseg_baseline/partobjaverse_tiny/snapshots/2026-09-30/cleanup_records/2026-10-02/test_cleanup.py ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Offline safeguards: no traversal, no changed files, preserve unarchived data."""
2
+ import os
3
+ import sys
4
+ import tempfile
5
+ import types
6
+ import unittest
7
+ from unittest import mock
8
+ from pathlib import Path
9
+
10
+ if os.name != 'posix':
11
+ sys.modules.setdefault('fcntl', types.ModuleType('fcntl'))
12
+ try:
13
+ import huggingface_hub
14
+ except ImportError:
15
+ hub = types.ModuleType('huggingface_hub')
16
+ hub.CommitOperationAdd = object
17
+ hub.HfApi = object
18
+ utils = types.ModuleType('huggingface_hub.utils')
19
+ utils.EntryNotFoundError = type('EntryNotFoundError', (Exception,), {})
20
+ utils.HfHubHTTPError = type('HfHubHTTPError', (Exception,), {})
21
+ sys.modules['huggingface_hub'] = hub
22
+ sys.modules['huggingface_hub.utils'] = utils
23
+
24
+ import cleanup_verified_sources as cleanup
25
+
26
+
27
+ class CleanupTests(unittest.TestCase):
28
+ def test_transient_activity_opacity_is_rechecked_not_ignored(self):
29
+ with mock.patch.object(cleanup, 'in_use', side_effect=[(set(), True), (set(), False)]) as scan:
30
+ with mock.patch.object(cleanup.time, 'sleep'):
31
+ self.assertEqual(cleanup.checked_activity('env_sam2'), (set(), False))
32
+ self.assertEqual(scan.call_count, 2)
33
+ with mock.patch.object(cleanup, 'in_use', return_value=({'env_sam2'}, False)) as scan:
34
+ self.assertEqual(cleanup.checked_activity('env_sam2'), ({'env_sam2'}, False))
35
+ self.assertEqual(scan.call_count, 1)
36
+ with mock.patch.object(cleanup, 'in_use', return_value=(set(), True)) as scan:
37
+ with mock.patch.object(cleanup.time, 'sleep'):
38
+ self.assertEqual(cleanup.checked_activity('env_sam2'), (set(), True))
39
+ self.assertEqual(scan.call_count, 10)
40
+
41
+ def test_cloud_revision_is_explicit_main_not_cached_default(self):
42
+ api = mock.Mock()
43
+ api.repo_info.return_value = types.SimpleNamespace(sha='current-main-commit')
44
+ with mock.patch.object(cleanup.uploader, 'api', return_value=api):
45
+ with mock.patch.object(cleanup.finalizer, 'verify_objects') as verify:
46
+ self.assertEqual(cleanup.cloud_recheck({}), 'current-main-commit')
47
+ verify.assert_called_once_with({})
48
+ api.repo_info.assert_called_once_with(cleanup.uploader.REPO_ID, repo_type='model', revision='main')
49
+
50
+ def test_paths_refuse_traversal_or_private_metadata(self):
51
+ for relative in ('', '/tmp/x', '../x', 'a/../../x', 'a/./x', '.git/config', 'a/.ssh/key'):
52
+ with self.assertRaises(RuntimeError):
53
+ cleanup.safe_parts(relative)
54
+ self.assertEqual(cleanup.safe_parts('parts/mesh.npz'), ('parts', 'mesh.npz'))
55
+
56
+ def test_root_requires_exact_allowed_baseline_path(self):
57
+ for value in ('/root/autodl-tmp', '/root/autodl-tmp/Lift', '/root/autodl-tmp/dataset', '/root/autodl-tmp/envs'):
58
+ with self.assertRaises(RuntimeError):
59
+ cleanup.checked_root('env_sam2', value)
60
+
61
+ @unittest.skipUnless(os.name == 'posix', 'descriptor-relative deletion needs POSIX')
62
+ def test_unlink_symlink_never_removes_target(self):
63
+ with tempfile.TemporaryDirectory(prefix='partseg_cleanup_test_', dir='/root/autodl-tmp/tmp') as directory:
64
+ top = Path(directory)
65
+ root = top / 'root'
66
+ root.mkdir()
67
+ victim = top / 'victim.txt'
68
+ victim.write_text('must remain')
69
+ link = root / 'link'
70
+ link.symlink_to(victim)
71
+ actual = link.lstat()
72
+ item = {'path': 'link', 'kind': 'symlink', 'size': 0, 'mtime_ns': actual.st_mtime_ns, 'link_target': str(victim)}
73
+ descriptor = os.open(root, os.O_RDONLY | os.O_DIRECTORY)
74
+ try:
75
+ cleanup.unlink_member(descriptor, item)
76
+ finally:
77
+ os.close(descriptor)
78
+ self.assertTrue(victim.exists())
79
+ self.assertFalse(link.is_symlink())
80
+
81
+ @unittest.skipUnless(os.name == 'posix', 'descriptor-relative deletion needs POSIX')
82
+ def test_symlink_parent_is_not_followed(self):
83
+ with tempfile.TemporaryDirectory(prefix='partseg_cleanup_test_', dir='/root/autodl-tmp/tmp') as directory:
84
+ top = Path(directory)
85
+ root, outside = top / 'root', top / 'outside'
86
+ root.mkdir()
87
+ outside.mkdir()
88
+ victim = outside / 'victim.txt'
89
+ victim.write_text('must remain')
90
+ (root / 'linked').symlink_to(outside, target_is_directory=True)
91
+ descriptor = os.open(root, os.O_RDONLY | os.O_DIRECTORY)
92
+ try:
93
+ with self.assertRaises(OSError):
94
+ cleanup.open_parent(descriptor, 'linked/victim.txt')
95
+ finally:
96
+ os.close(descriptor)
97
+ self.assertTrue(victim.exists())
98
+
99
+ @unittest.skipUnless(os.name == 'posix', 'descriptor-relative deletion needs POSIX')
100
+ def test_changed_file_is_retained(self):
101
+ with tempfile.TemporaryDirectory(prefix='partseg_cleanup_test_', dir='/root/autodl-tmp/tmp') as directory:
102
+ root = Path(directory)
103
+ source = root / 'result.bin'
104
+ source.write_bytes(b'old')
105
+ actual = source.stat()
106
+ item = {'path': source.name, 'kind': 'file', 'size': actual.st_size, 'mtime_ns': actual.st_mtime_ns}
107
+ source.write_bytes(b'new unarchived material')
108
+ descriptor = os.open(root, os.O_RDONLY | os.O_DIRECTORY)
109
+ try:
110
+ with self.assertRaises(RuntimeError):
111
+ cleanup.unlink_member(descriptor, item)
112
+ finally:
113
+ os.close(descriptor)
114
+ self.assertTrue(source.exists())
115
+
116
+ @unittest.skipUnless(os.name == 'posix', 'descriptor-relative deletion needs POSIX')
117
+ def test_nonempty_unarchived_directory_is_retained(self):
118
+ with tempfile.TemporaryDirectory(prefix='partseg_cleanup_test_', dir='/root/autodl-tmp/tmp') as directory:
119
+ root = Path(directory)
120
+ child = root / 'omitted'
121
+ child.mkdir()
122
+ victim = child / 'dataset.obj'
123
+ victim.write_text('must remain')
124
+ descriptor = os.open(root, os.O_RDONLY | os.O_DIRECTORY)
125
+ try:
126
+ removed = cleanup.remove_empty_directories(descriptor, [{'path': 'omitted', 'kind': 'dir'}])
127
+ finally:
128
+ os.close(descriptor)
129
+ self.assertEqual(removed, 0)
130
+ self.assertTrue(victim.exists())
131
+
132
+
133
+ if __name__ == '__main__':
134
+ unittest.main()