Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-982GitHub issuePublicDecided· Out of scope

T2 Macs: battery charge limiting is unreachable — applesmc binds no device, and the t2bce stack has no SMC transport

Reported by ratandeepbansal · filed Sep 4, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 days ago.

At a glance

1 · What is claimed?
Only the report text below — no validator has restated it as checkable claims yet.
2 · What does it affect?
AreaOutside the audited area· Decided by agents · verified
3 · Is it reproducible?
No validation has been run yet.
4 · What remains unclear?
  • Not validated yet: no claims, no reproducer.
5 · What happens next?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

T2 Macs: battery charge limiting is unreachable — applesmc binds no device, and the t2bce stack has no SMC transportrevision 1 · captured 2026-09-28 21:24 UTC via poll

What happened

On Apple T2 Macs (MacBookPro16,1, 2019 16"), no battery charge-limit feature can work,
because Linux has no SMC access at all on this hardware — and nothing in Omarchy
currently surfaces that, so the machine looks like an ordinary laptop that just
happens to be missing the sysfs knob.

Charge limiting is a firmware function: software cannot refuse power arriving from
the charger, only the SMC can hold the pack at a target level. On pre-T2 Intel Macs the
SMC was reachable on the legacy 0x300 I/O port and applesmc could write the BCLM
key. On T2 Macs the SMC moved behind the T2 coprocessor, and no in-tree or
out-of-tree driver implements that transport. applesmc therefore probes, finds no
legacy device, and binds nothing.

This is a hardware-support gap rather than an Omarchy bug, but it has two concrete
consequences for Omarchy that are worth tracking:

  1. Charge-limit support (previously requested in #3036 / #1289) can never apply to this

class of machine, and any future implementation will need to degrade cleanly rather
than assume charge_control_end_threshold exists.
2. There's currently no way for a T2 user to discover why it doesn't work. A
hardware-capability note (or a line in the power panel / omarchy-battery-* output)
would save people a long dig through sysfs.

Evidence

$ cat /sys/class/dmi/id/product_name
MacBookPro16,1

$ uname -r
7.1.8-arch1-Watanare-T2-3-t2

$ ls /sys/class/power_supply/BAT0/
alarm  capacity  charge_full  charge_full_design  charge_now  current_avg
current_now  cycle_count  device  extensions  hwmon4  manufacturer  model_name
power  present  status  subsystem  technology  temp  type  uevent
voltage_min_design  voltage_now  wakeup68
# no charge_control_start_threshold / charge_control_end_threshold / charge_behaviour

$ find /sys -maxdepth 5 -iname '*charge_control*'
# (no output)

$ readlink -f /sys/class/power_supply/BAT0/device
/sys/devices/LNXSYSTM:00/.../ACPI0001:00/ACPI0002:00
# plain ACPI battery — read-only, no control method in Apple's DSDT

$ lsmod | grep applesmc
applesmc               45056  0          # refcount 0

$ ls /sys/bus/platform/drivers/applesmc
ls: cannot access '/sys/bus/platform/drivers/applesmc': No such file or directory
# module loaded, zero devices bound: the legacy SMC I/O port is absent on T2

$ lsmod | grep t2bce
t2bce_audio  t2bce_vhci  t2bce_core  t2bce_dma
# the T2 stack implements audio + VHCI only; no SMC key transport, no chardev

Why the usual workaround doesn't apply

The standard advice for Intel Macs is to boot macOS once, write BCLM=80 with a tool
like zackelia/bclm, and let the SMC enforce it
persistently under any OS. That only helps dual-boot users — on a
wiped, Linux-only T2 Mac there is no macOS partition left to boot, and no way back
in short of reinstalling macOS.

What would help

Broadly, better T2 MacBook support. Specifically for this area:

  • Treat charge limiting as an explicitly hardware-gated feature: detect the absence of

charge_control_end_threshold and say why on Apple T2 hardware, rather than
silently offering nothing.
- If a battery-high / unplug-reminder hook ever lands alongside the existing
battery-low.d hooks, it would be the only usable substitute on this hardware.

System

  • Omarchy 4.0.0.alpha
  • MacBookPro16,1 (Apple T2)
  • Kernel 7.1.8-arch1-Watanare-T2-3-t2
  • Battery bq40z651 (SMP), 112 cycles, charge_full 7079000 / charge_full_design 8790000
View raw text
### What happened

On Apple T2 Macs (`MacBookPro16,1`, 2019 16"), no battery charge-limit feature can work,
because Linux has **no SMC access at all** on this hardware — and nothing in Omarchy
currently surfaces that, so the machine looks like an ordinary laptop that just
happens to be missing the sysfs knob.

Charge limiting is a firmware function: software cannot refuse power arriving from
the charger, only the SMC can hold the pack at a target level. On pre-T2 Intel Macs the
SMC was reachable on the legacy `0x300` I/O port and `applesmc` could write the `BCLM`
key. On T2 Macs the SMC moved behind the T2 coprocessor, and no in-tree or
out-of-tree driver implements that transport. `applesmc` therefore probes, finds no
legacy device, and binds nothing.

This is a hardware-support gap rather than an Omarchy bug, but it has two concrete
consequences for Omarchy that are worth tracking:

1. Charge-limit support (previously requested in #3036 / #1289) can never apply to this
   class of machine, and any future implementation will need to degrade cleanly rather
   than assume `charge_control_end_threshold` exists.
2. There's currently no way for a T2 user to discover *why* it doesn't work. A
   hardware-capability note (or a line in the power panel / `omarchy-battery-*` output)
   would save people a long dig through sysfs.

### Evidence

```console
$ cat /sys/class/dmi/id/product_name
MacBookPro16,1

$ uname -r
7.1.8-arch1-Watanare-T2-3-t2

$ ls /sys/class/power_supply/BAT0/
alarm  capacity  charge_full  charge_full_design  charge_now  current_avg
current_now  cycle_count  device  extensions  hwmon4  manufacturer  model_name
power  present  status  subsystem  technology  temp  type  uevent
voltage_min_design  voltage_now  wakeup68
# no charge_control_start_threshold / charge_control_end_threshold / charge_behaviour

$ find /sys -maxdepth 5 -iname '*charge_control*'
# (no output)

$ readlink -f /sys/class/power_supply/BAT0/device
/sys/devices/LNXSYSTM:00/.../ACPI0001:00/ACPI0002:00
# plain ACPI battery — read-only, no control method in Apple's DSDT

$ lsmod | grep applesmc
applesmc               45056  0          # refcount 0

$ ls /sys/bus/platform/drivers/applesmc
ls: cannot access '/sys/bus/platform/drivers/applesmc': No such file or directory
# module loaded, zero devices bound: the legacy SMC I/O port is absent on T2

$ lsmod | grep t2bce
t2bce_audio  t2bce_vhci  t2bce_core  t2bce_dma
# the T2 stack implements audio + VHCI only; no SMC key transport, no chardev
```

### Why the usual workaround doesn't apply

The standard advice for Intel Macs is to boot macOS once, write `BCLM=80` with a tool
like [zackelia/bclm](https://github.com/zackelia/bclm), and let the SMC enforce it
persistently under any OS. That only helps dual-boot users — on a
wiped, Linux-only T2 Mac there is no macOS partition left to boot, and no way back
in short of reinstalling macOS.

### What would help

Broadly, better T2 MacBook support. Specifically for this area:

- Treat charge limiting as an explicitly hardware-gated feature: detect the absence of
  `charge_control_end_threshold` and say *why* on Apple T2 hardware, rather than
  silently offering nothing.
- If a `battery-high` / unplug-reminder hook ever lands alongside the existing
  `battery-low.d` hooks, it would be the only usable substitute on this hardware.

### System

- Omarchy `4.0.0.alpha`
- `MacBookPro16,1` (Apple T2)
- Kernel `7.1.8-arch1-Watanare-T2-3-t2`
- Battery `bq40z651` (SMP), 112 cycles, `charge_full` 7079000 / `charge_full_design` 8790000

Validation

Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.

Linked

Not linked to any known issue, other report or change yet.

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

  • Out of scopeDecided by agents · verified · 2026-10-09 10:45 UTC