Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
c50cde3
fix(safety): bind the leaf where expecting: is nil — contents mode an…
acebytes Aug 27, 2026
28eb583
fix(safety): a drain that died on a hard read error no longer ends li…
acebytes Aug 27, 2026
7f2ac6e
fix(safety): the gate answers before realpath — pointer chase and pre…
acebytes Aug 27, 2026
820a0a7
fix(docs): repoint the mount-arm anchor the fn-4.26 insertion shifted…
acebytes Aug 27, 2026
6bb24c0
fix(docs): repoint the two CacheCleaner anchors fn-4.21's growth shif…
acebytes Aug 27, 2026
a8de2a2
test(safety): evidence the non-ENOENT bind-failure branch of the pipe…
acebytes Aug 27, 2026
3c98463
fix(safety): bound the container-identity capture off the calling thr…
acebytes Aug 27, 2026
2e21091
fix(safety): bound dockerPrune's whole child interaction; retire the …
acebytes Aug 27, 2026
80e5d61
fix(docs): repoint the 11 anchors fn-4.19's growth shifted (fn-4.19)
acebytes Aug 27, 2026
9ce6b1d
fix(safety): the sizing walk answers cancellation and bounds its entr…
acebytes Aug 27, 2026
a4670b0
fix(safety): sweep sync fs-tree recursion on actor-reached paths; cla…
acebytes Aug 27, 2026
a4cd9ce
fix(docs): repoint the walker anchor fn-4.13's ceiling shifted (fn-4.13)
acebytes Aug 27, 2026
fbb1840
fix(safety): no realpath of a symlink root's destination at construct…
acebytes Aug 27, 2026
5c36346
fix(docs): the rotting CacheCleaner anchors were invisible to the gat…
acebytes Aug 27, 2026
2335a54
fix(tests): frame the socket reply read; fence as!/fatalError/precond…
acebytes Aug 27, 2026
62336c1
fix(tests): the climb census cell measured a process-wide count and a…
acebytes Aug 27, 2026
e7560fd
test(safety): pin every performer refusal tag to its arm — full per-t…
acebytes Aug 27, 2026
f8aa99f
fix(safety): every issue-kind label states its producer's true condit…
acebytes Aug 27, 2026
5a497ea
test(safety): evidence the sweep root's non-directory arm at scan lev…
acebytes Aug 27, 2026
8f02d35
test(safety): evidence the walker's open-failure EPERM arm — it had n…
acebytes Aug 27, 2026
d6a5bd7
fix(safety): the git child's process group is established AT SPAWN, n…
acebytes Aug 27, 2026
66c8e71
fix(safety): the containment descent's own raw-errno classifier joins…
acebytes Aug 27, 2026
3d64136
fix(scanner): discover the bare repository whose checkouts are all go…
acebytes Aug 27, 2026
c8efba0
test(scanner): fn-4.18 measured — the dev-root double walk is 2% dupl…
acebytes Aug 27, 2026
f00229c
fix(safety): pin the message vocabulary byte-exact — Remedy loses its…
acebytes Aug 27, 2026
efc2760
test(safety): fn-4.22 attack round recorded — 0 of 11 fresh false wor…
acebytes Aug 27, 2026
83e2fd7
fix(safety): a losing task must never launch the prune it was already…
acebytes Aug 28, 2026
150fe01
fix(safety): MOUNT FIRST, and now actually first (PR #461 codex r1, P2)
acebytes Aug 28, 2026
2bb2596
fix(safety): an unchecked spawn setup does not lose an error, it spaw…
acebytes Aug 28, 2026
36dff04
fix(safety): the claim now PERFORMS the launch — 83e2fd7 moved the wi…
acebytes Aug 28, 2026
f4575bf
fix(safety): MOUNT FIRST means before the TCC gate too — and the cell…
acebytes Aug 28, 2026
28a8f15
test(safety): the spawn fence was a blocklist in both directions — re…
acebytes Aug 28, 2026
71133b2
fix(test): the LaunchClaim cells proved less than their names (gate r…
acebytes Aug 28, 2026
7d7cb60
fix(test): the spawn fence guarded calls, so an alias walked past it …
acebytes Aug 28, 2026
d0a0b66
docs(residual): disclose the three the gate found undisclosed (r2 P5,…
acebytes Aug 28, 2026
1913dbc
fix(scanner): bareness is core.bare's EFFECTIVE value, not any `bare`…
acebytes Aug 28, 2026
1a3bb64
fix(docs): retire a false disclosure, qualify an invariant at its own…
acebytes Aug 28, 2026
228ce49
fix(docs): "the hang is impossible" was false for the ordinary root (…
acebytes Aug 28, 2026
2d5b351
fix(spawn): check every strdup, and evidence the spawn's own guard (c…
acebytes Aug 28, 2026
0392a6c
fix(test): the fence guarded one function's body, so both aliases hoi…
acebytes Aug 28, 2026
7261d72
fix(prune): the launch claim was closed in the type and unlatched at …
acebytes Aug 28, 2026
432441b
fix(read): one no-follow bounded descriptor for every git metadata re…
acebytes Aug 28, 2026
70f4376
fix(cleaner): item mode measured, then bound — contents mode has alwa…
acebytes Aug 28, 2026
c57a0d7
fix(cleaner): a stranger arriving at a GHOST target was deleted and r…
acebytes Aug 28, 2026
9c06109
fix(spawn): the strdup defect was still live one file out, and the fe…
acebytes Aug 29, 2026
4ececeb
fix(docs): a rotted anchor, a false limit disclosure, and two evidenc…
acebytes Aug 29, 2026
89ec164
test(read): the eight converted read sites had no cell at all (gate r…
acebytes Aug 29, 2026
21c48b5
fix(test): the fence's new lexer tripped the strand fence, so it no l…
acebytes Aug 29, 2026
e80694e
fix(git): a transient launch failure was reported as a missing tool (…
acebytes Sep 5, 2026
15c1520
fix(scanner): an include can override core.bare, so bareness now fail…
acebytes Sep 5, 2026
08d7129
fix(scanner): the walked directory itself was never checked before it…
acebytes Sep 5, 2026
34f3d4a
docs(residual): the deferred descriptor-relative validation now names…
acebytes Sep 5, 2026
b1e8188
fix(scanner): the bare arm carried no witness, so grouping canonicali…
acebytes Sep 5, 2026
1bf97cd
fix(release): the checked-in Xcode project had gone stale, and the re…
acebytes Sep 5, 2026
205b187
fix(release): the Xcode release build could not plan at all — two com…
acebytes Sep 5, 2026
76ba737
fix(scanner): the bare witness was captured AFTER the proof, so it co…
acebytes Sep 5, 2026
eb0e97b
fix(scanner): the git -C target was never proven, and one arm carried…
acebytes Sep 5, 2026
c633610
fix(test): the Xcode fence was a basename substring test, and its mut…
acebytes Sep 5, 2026
bda99d7
fix(evidence): two unpinned guards, a control that did not exist, and…
acebytes Sep 5, 2026
50a690f
fix(scanner): extensions.worktreeConfig lets config.worktree override…
acebytes Sep 6, 2026
6dc0942
docs(bundle): the tiff note said 'no menubar icon'; the app falls bac…
acebytes Sep 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,43 @@ below are both part of that coordination, and the latter BLOCKS this release.

### Fixed

- **Every scan-issue row now states a condition that is true for the
producer that emitted it** (fn-4.12 — the PR #459 codex r13 sweep, run
over every OTHER scanner's producers; the app's visible row label is
derived from `scanner_errors[].kind` alone, so a kind shared with a
different condition prints a false diagnosis). All ADDITIONS to the same
extensible enumeration (`schema_version` stays 4); no wire STRING is
renamed, but the kind a given condition reports under moves, so consumers
keying kinds to conditions must re-key: **(1)** a configured dev root
refused by the search-root safety policy — persisted, or via `--dev-root`
— is now `"policy_refused_root"` ("refused by the search-root safety
policy"); it was `"container_refused"`, whose label "not a configured
search root" contradicted the row's own detail ("configured dev root
refused: …"). **(2)** a configured dev root with a volume mounted exactly
at it is now `"mounted_volume_root"`, whose label names the one remedy a
re-scan honors (the walk re-reads the kernel mount table every scan).
**(3)** a dev root or `~/Library/Caches` sweep root standing as a regular
file, FIFO, socket or device is now `"non_directory_root"`; it was
`"symlink_root"`, which sent the user hunting for a link that was not
there — `"symlink_root"` now means a symlink and nothing else, in every
scanner. **(4)** a git worktree or repository admin directory withheld
because git's cleanup would modify paths not all inside ONE configured
dev root is the NEW `"mutation_scope_refused"` ("git cleanup is not
contained in one dev root — not offered"); it was `"container_refused"`
while the worktree in question IS inside a configured root. A worktree
outside EVERY configured root keeps `"container_refused"` — there the
label is exactly the condition. **(5)** a BARE-errno EPERM (raw
`lstat`/`open` probes) is now neutral `"unreadable"` everywhere, with the
detail saying the cause could not be established; it was `"tcc_denied"`
in the dev-root walk and the orphaned-caches sweep — printing the "Grant
access…" (Full Disk Access) remedy on a guess — while the temp scanner
already classified the same errno as unknowable (a bare errno carries no
provenance; TCC, SIP and other filesystem refusals are indistinguishable
in it). A chain-proven EPERM — recovered from a Cocoa error's
`NSUnderlyingErrorKey` chain — still reports `"tcc_denied"` with the
grant hint, which is the one place the claim is establishable. The two
scanners that disagreed on bare EPERM now share one recorded rule
(`DirectorySizer.denial(forFailedProbe:)`).
- **A scan could hang before it started, with the spinner up and no way to
stop it.** The first thing a scan does after marking itself in progress is
refresh the free-space figures in the header. That refresh was unbounded:
Expand Down
9 changes: 9 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,15 @@ CacheCategory(
`--confirm` — preview safely with `--cli clean <slug> --dry-run`)
5. Submit a PR with a clear description

> **A green tally is not a green run.** A trapping construct (`as!`, `try!`,
> a force-unwrap, an out-of-range subscript) kills the whole test process,
> and every `Executed N tests … 0 failures` line printed BEFORE the kill
> stays in the log — one truncated run showed a passing tally while ~26
> later suites never executed (fn-4.14). When reading a `swift test` log,
> trust only the process EXIT CODE and the final executed COUNT compared
> against the expected baseline, never a greppable `0 failures` line.
> `StrandFenceTests` fences the trapping shapes out of test sources.

## Documentation

Full technical documentation is in [docs/v1/](docs/v1/):
Expand Down
20 changes: 12 additions & 8 deletions Cacheout.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
5134AD93B1D55612B74BDFD1 /* Categories.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E4F0D56D0D9FFBD5157574E /* Categories.swift */; };
5194782EBC470C5E5765E5FC /* DaemonSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C8538BE4D7AD7ACDECC254 /* DaemonSnapshot.swift */; };
527DC90002648CDE1543783F /* WorktreeStalenessAssessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BAD54210BDEE35F2FB38595 /* WorktreeStalenessAssessor.swift */; };
53E3B1C34CEDF9D83BFA27F3 /* DepthSafeRemoval.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1B76AB2C9E48955C8C0478 /* DepthSafeRemoval.swift */; };
53FDF117C05781F8D27938BA /* AutopilotPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82ABA28C5E88782DD93E42A1 /* AutopilotPolicy.swift */; };
5416ABC78819DF413373498E /* StatusSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BD6365309839A8FF2A6A271 /* StatusSocket.swift */; };
572BD228B36DEA32CEBB9585 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = F14689CFA3D53EC0E6D1A853 /* Sparkle */; };
Expand All @@ -54,20 +55,20 @@
727ABDA98B04DB2BDBF95A7E /* ProjectTreeWalker.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0D6F28962ECA37ED73C427 /* ProjectTreeWalker.swift */; };
73556E20E1B969F7691B4E5F /* CompressorTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5542F20E653D5B668DD6D7B5 /* CompressorTracker.swift */; };
7531D4525815B4CBE5DE47A5 /* Tier2Interventions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFF2C42D456B268FFEB2B2A2 /* Tier2Interventions.swift */; };
799ABF8B31749CDAC143F3A3 /* MenuBarIconTemplate.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F534DE2DBFFD04550F22DC8D /* MenuBarIconTemplate.tiff */; };
7AC6F10091DC9AE8B85F8978 /* RecommendationEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7004867F08F19EC37A2D7D1B /* RecommendationEngine.swift */; };
7E2D87C22D7802A0920CE4A5 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F3EBD840FD250F9ECDF9CD3 /* ContentView.swift */; };
831914EDB297F234B74D1F31 /* DaemonConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 288A2658F275BE37E0BFC89F /* DaemonConfig.swift */; };
83FBFF8827BA3B6392B2F7BD /* CleanConfirmation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FA8C68855965DF996EE732 /* CleanConfirmation.swift */; };
851B3BADDDAD69082F653698 /* Tier1Interventions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8067629D06F1595B2EE0D303 /* Tier1Interventions.swift */; };
891B86013ED51C1A0D0DC224 /* CLIHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F41F0CC63176858101D3C2A /* CLIHandler.swift */; };
8A841F032EAFF999B9A27E03 /* BuildArtifactRules.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3D52BB647F9033DA027C575 /* BuildArtifactRules.swift */; };
8B83E8AF403D1750AE891FDF /* FirstWinsRendezvous.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A64C83C9152A0ED36C6C4C6 /* FirstWinsRendezvous.swift */; };
8C9412CAD5C695C33BD45D30 /* FileSystemIdentityProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00ED87E5A2D4D49E6C748016 /* FileSystemIdentityProvider.swift */; };
8E20D5C7DA9239C12CAC2763 /* InterventionRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = BACE6F298FE6C8E7A2F71EE5 /* InterventionRegistry.swift */; };
92A6F1116614F5CA0D52D274 /* SettingsContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17099F0406144C6E7D4167F6 /* SettingsContentView.swift */; };
92C323EAE2B2AB8160F35390 /* ProcessMemoryScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F589EF6B33B9A8AFF13CC1D /* ProcessMemoryScanner.swift */; };
94AC3E7501D21B51BD1E1544 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ABC54EFDB276894C2D33CC7 /* SettingsView.swift */; };
95FAC42382B2F7BBA2089744 /* MenuBarIcon.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 36C9423892BDE0AC771BD2FB /* MenuBarIcon.tiff */; };
9855CAAA9DD59948D9C7A6BB /* TrashDisposal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FC1792C9B3F7FB3C935C003 /* TrashDisposal.swift */; };
987BF1F1F29312B8F2CA516C /* EphemeralTempScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89FA2F192993DAFC4F865A81 /* EphemeralTempScanner.swift */; };
9891100B0B90E4B88DBE923E /* CacheCleaner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1230916736A41CCED07F35CA /* CacheCleaner.swift */; };
99FDCC1360ACB7298594FFB1 /* EphemeralTempRoots.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528D3A07085FFADB1D465CF5 /* EphemeralTempRoots.swift */; };
Expand Down Expand Up @@ -204,6 +205,8 @@
018266894D1ABCCD444E8F2F /* InterventionExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterventionExecutor.swift; sourceTree = "<group>"; };
04E251ACDD348227547A0EEB /* MemoryHelperProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemoryHelperProtocol.swift; sourceTree = "<group>"; };
08069DE63A5D0EDBBD1E9C4F /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = "<group>"; };
0A64C83C9152A0ED36C6C4C6 /* FirstWinsRendezvous.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstWinsRendezvous.swift; sourceTree = "<group>"; };
0FC1792C9B3F7FB3C935C003 /* TrashDisposal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrashDisposal.swift; sourceTree = "<group>"; };
10C54ACA50BA3F2B5FB5F2B7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
1230916736A41CCED07F35CA /* CacheCleaner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheCleaner.swift; sourceTree = "<group>"; };
14FAD15AA744620E0BEFE581 /* GitCommandRunner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitCommandRunner.swift; sourceTree = "<group>"; };
Expand All @@ -219,7 +222,6 @@
31021E29ABA33ED7576488CC /* com.cacheout.memhelper.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = com.cacheout.memhelper.plist; sourceTree = "<group>"; };
3453E554A2EF5BB26F884A37 /* CacheCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheCategory.swift; sourceTree = "<group>"; };
3484E5F5A3B45839B0F1C493 /* MemlimitWorkaround.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemlimitWorkaround.swift; sourceTree = "<group>"; };
36C9423892BDE0AC771BD2FB /* MenuBarIcon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = MenuBarIcon.tiff; sourceTree = "<group>"; };
379987CF5B79ABDF997B7DC1 /* WorktreeReclaimPerformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorktreeReclaimPerformer.swift; sourceTree = "<group>"; };
3D8D2747B5292A1718AEAA39 /* memorystatus_private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = memorystatus_private.h; sourceTree = "<group>"; };
406A840A809552F909991D62 /* OrphanedCachesScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrphanedCachesScanner.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -277,6 +279,7 @@
B878A98009FCF82EC164CFFD /* MenuBarIconTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MenuBarIconTemplate.png; sourceTree = "<group>"; };
BACE6F298FE6C8E7A2F71EE5 /* InterventionRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterventionRegistry.swift; sourceTree = "<group>"; };
BC4E35BBC87E2364C890D8EB /* ScanResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanResult.swift; sourceTree = "<group>"; };
BF1B76AB2C9E48955C8C0478 /* DepthSafeRemoval.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DepthSafeRemoval.swift; sourceTree = "<group>"; };
BF1FDC6594E076F20AACD291 /* DiskInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiskInfo.swift; sourceTree = "<group>"; };
C2777F1CA3C53361B0F68626 /* CategoryRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategoryRow.swift; sourceTree = "<group>"; };
C2F1CB3E9DBF1A54A53FF14E /* MenuBarIconTemplate@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MenuBarIconTemplate@2x.png"; sourceTree = "<group>"; };
Expand All @@ -299,7 +302,6 @@
F3746399EBD05A9B8148C269 /* CacheoutHelper */ = {isa = PBXFileReference; includeInIndex = 0; path = CacheoutHelper; sourceTree = BUILT_PRODUCTS_DIR; };
F3D52BB647F9033DA027C575 /* BuildArtifactRules.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildArtifactRules.swift; sourceTree = "<group>"; };
F4FE1C5ACE094C9E0D28D952 /* ProcessesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProcessesView.swift; sourceTree = "<group>"; };
F534DE2DBFFD04550F22DC8D /* MenuBarIconTemplate.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = MenuBarIconTemplate.tiff; sourceTree = "<group>"; };
F688400B8AEE0FDF8B652DC5 /* libCacheoutHelperLib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCacheoutHelperLib.a; sourceTree = BUILT_PRODUCTS_DIR; };
FA7E1439306A3E5BC7C6B605 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = "<group>"; };
FED4BAA64240E602A3BE1582 /* MemoryMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemoryMonitor.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -401,6 +403,7 @@
children = (
3453E554A2EF5BB26F884A37 /* CacheCategory.swift */,
BF1FDC6594E076F20AACD291 /* DiskInfo.swift */,
0A64C83C9152A0ED36C6C4C6 /* FirstWinsRendezvous.swift */,
2A736F34AD05200EDE9972AA /* SaturatingArithmetic.swift */,
BC4E35BBC87E2364C890D8EB /* ScanResult.swift */,
);
Expand All @@ -411,8 +414,10 @@
isa = PBXGroup;
children = (
1230916736A41CCED07F35CA /* CacheCleaner.swift */,
BF1B76AB2C9E48955C8C0478 /* DepthSafeRemoval.swift */,
00ED87E5A2D4D49E6C748016 /* FileSystemIdentityProvider.swift */,
B415391F406F0415AE007308 /* PathGuard.swift */,
0FC1792C9B3F7FB3C935C003 /* TrashDisposal.swift */,
379987CF5B79ABDF997B7DC1 /* WorktreeReclaimPerformer.swift */,
);
path = Cleaner;
Expand Down Expand Up @@ -465,10 +470,8 @@
80855509D976D7EF366BE2D3 /* Cacheout.icns */,
31021E29ABA33ED7576488CC /* com.cacheout.memhelper.plist */,
81CBB3E0AA0BE770CB32CB41 /* MenuBarIcon.png */,
36C9423892BDE0AC771BD2FB /* MenuBarIcon.tiff */,
CF6AD4F1A744AED70CBEEA1E /* MenuBarIcon@2x.png */,
B878A98009FCF82EC164CFFD /* MenuBarIconTemplate.png */,
F534DE2DBFFD04550F22DC8D /* MenuBarIconTemplate.tiff */,
C2F1CB3E9DBF1A54A53FF14E /* MenuBarIconTemplate@2x.png */,
);
name = Resources;
Expand Down Expand Up @@ -727,10 +730,8 @@
files = (
660C0769D0EA95681A0C0ACC /* Cacheout.icns in Resources */,
BFC4EC7202CD43FF5889034D /* MenuBarIcon.png in Resources */,
95FAC42382B2F7BBA2089744 /* MenuBarIcon.tiff in Resources */,
FF1746761E4FB32AD9F2AF2A /* MenuBarIcon@2x.png in Resources */,
A43CF960F06EEC4A6F9C4C1D /* MenuBarIconTemplate.png in Resources */,
799ABF8B31749CDAC143F3A3 /* MenuBarIconTemplate.tiff in Resources */,
5FA0E107B7F164B17063917B /* MenuBarIconTemplate@2x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -808,13 +809,15 @@
831914EDB297F234B74D1F31 /* DaemonConfig.swift in Sources */,
21B8805BBCDC4176650C2E6B /* DaemonMode.swift in Sources */,
5194782EBC470C5E5765E5FC /* DaemonSnapshot.swift in Sources */,
53E3B1C34CEDF9D83BFA27F3 /* DepthSafeRemoval.swift in Sources */,
360994D378D4BD1EB7ADC15C /* DevRootsStore.swift in Sources */,
439C12251FD58C4CEA9A1BB2 /* DirectorySizer.swift in Sources */,
D6A6853C267993B9FB084206 /* DiskInfo.swift in Sources */,
CEB8F5AC8D009EF0B0900530 /* DiskUsageBar.swift in Sources */,
99FDCC1360ACB7298594FFB1 /* EphemeralTempRoots.swift in Sources */,
987BF1F1F29312B8F2CA516C /* EphemeralTempScanner.swift in Sources */,
8C9412CAD5C695C33BD45D30 /* FileSystemIdentityProvider.swift in Sources */,
8B83E8AF403D1750AE891FDF /* FirstWinsRendezvous.swift in Sources */,
249C9634CFBAD37F324B7B43 /* Formatters.swift in Sources */,
DB3D6FA8B8C895D201EAA115 /* GitCommandRunner.swift in Sources */,
07C439BB8299EED3B6E1782F /* GitWorktreeInventory.swift in Sources */,
Expand Down Expand Up @@ -855,6 +858,7 @@
851B3BADDDAD69082F653698 /* Tier1Interventions.swift in Sources */,
7531D4525815B4CBE5DE47A5 /* Tier2Interventions.swift in Sources */,
AF9392A8DFC710E864BE6466 /* Tier3Interventions.swift in Sources */,
9855CAAA9DD59948D9C7A6BB /* TrashDisposal.swift in Sources */,
C277F5DC011FC0CC51B6B6E3 /* ValuablesDetector.swift in Sources */,
F7C935653D7E8085572FF2E2 /* WebhookAlerter.swift in Sources */,
A0358BB924BC7F234052EC60 /* WorktreeReclaimPerformer.swift in Sources */,
Expand Down
Loading
Loading