Limits
What Starf does not do. Some of these are the reference implementation's deliberate refusals, kept; the rest is work not yet done.
Refused on purpose
Apple's per-process Energy Impact. A private metric computed from counters no unprivileged process can read. Not implemented, and nothing is dressed up as it.
Total system power draw. The battery reports its own charge and discharge power. On
mains that falls to zero while the machine keeps drawing from the adapter. Measuring the
real figure needs SMC keys or powermetrics, neither available without elevated
privileges. Starf reports the battery's flow and says what it is.
Apple's Battery Health percentage. Starf shows the controller's own maximum charge against design capacity. Apple computes its figure differently; showing ours under their name would be wrong.
Temperatures and fan speeds. Apple silicon's sensors are behind SMC keys and private HID services that need elevated privileges or undocumented interfaces. Starf shows macOS's thermal pressure level instead — the state the system itself acts on — and does not estimate a temperature from it.
Calling growth a leak. Nothing the kernel reports tells a leak from a cache that is still filling. The growing tag gives the measurements and leaves the verdict to you.
App Nap state, 12-hour power, per-process packet counts. No generally available equivalent.
Emptying the Trash, or deleting anything. Sweep moves what you choose to the Trash and stops there. The Trash holds whatever else you put in it, and emptying it would destroy that too; the space comes back when you empty it yourself.
Matching an app's leftovers by vendor or by a similar name. Arc and Dia share the
prefix company.thebrowser; Conductor and Elyra Conductor share a word. Only an exact
identifier, the app's own extensions, or its whole name counts. A folder in the home
folder named like the app is shown as likely and never selected, and one without a dot —
~/Code for an app called Code — is never offered at all.
Looking in Documents, Desktop or Downloads by default. Walking them makes macOS ask for permission. Sweep looks in the project folders that exist, and in any folder added through the open panel.
Guessing what the driver did not say. A processor slot claimed by two device-tree nodes keeps a neutral label instead of a guessed one. A bundle whose Dock presence is set at runtime rather than declared is classified by what it declared.
Not built
Nothing from the original plan. What follows is what a future version could reasonably add.
Another process's environment. KERN_PROCARGS2 returns it only to the calling
process. This was checked rather than assumed: a probe reading its own buffer got 3,495
bytes of variables, and the same probe reading a child it owned got none. The Environment
report says this instead of showing an empty list.
Keys in starf top. It redraws and stops with Ctrl-C; sorting and filtering are
options on the command line, not keys pressed while it runs. Reading keys would mean
putting the terminal in raw mode and restoring it on every way out.
History beyond fifteen minutes. Charts, moments, growth and the diagnostic bundle all cover the retained fifteen minutes. Nothing is written to disk between runs.
More kinds of build output in Sweep. PHP's vendor, Python virtual environments and
Gradle's per-project build are not recognised. A vendor folder is committed in some
projects, and a virtual environment can hold what was installed by hand, so each needs a
test as certain as Cargo's tag before it is offered.
Sweeping on a schedule. Sweep runs when asked. Moving files while nobody is looking would need rules for what is selected that are safer than the ones a person reviews.
Not yet observed
Raised thermal pressure. Only the nominal level has been seen on the machine this
was built on; it agreed with pmset -g therm and ProcessInfo.thermalState. The higher
levels, and the alert for them, follow the public header and have not been seen to
fire.
Sweep in the signed app. The whole path — find, measure, move to the Trash, take it
back out — has been run from a terminal: the tests, and starf sweep --apply on a
scratch project whose size matched du and which went to the Trash and came back. The
bundled .app has its own privacy permissions, and whether macOS lets it take an item
back out of the Trash for Undo has not been checked there. Put Back in Finder works either
way.
A protected container refusing to move. macOS refused to move a sandboxed app's container by hand. Sweep reports that per item and moves the rest; the wording for that refusal has been tested for the error codes, not seen on that folder.
Notification delivery. The alert rules are tested as logic — a snapshot in, alerts
out. That macOS shows the notification has not been checked yet, and a development build
run from a terminal may not be allowed to post at all. Check with the bundled .app.
Known inaccuracies
Application classification. Read from LSUIElement and LSBackgroundOnly in the
bundle's Info.plist. A bundle that sets its activation policy at runtime cannot be seen
this way. On the machine this was built on, AppSSOAgent, UserNotificationCenter and
privatecloudcomputed declare neither key and so appear under Applications. Excluding
them by path would be a guess, and guessing is what the rest of this code refuses to do.
Region counts against vmmap. PROC_PIDREGIONPATHINFO coalesces adjacent mappings
with identical attributes; vmmap runs with access Starf does not have and splits
differently. The counts differ. See Verification for the comparison
that shows the totals agreeing with the kernel's own figure.
Platform
Apple silicon is what this was built and checked on. The x86_64 paths exist — the Rosetta timebase correction, the Intel SMT note, the alternate GPU utilisation key — but have not run on Intel hardware. Nothing has been checked against an external GPU.