Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
34 changes: 24 additions & 10 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,34 @@ The project follows Semantic Versioning. Release candidates are pre-release buil

## [Unreleased]

### Development
## [0.5.0-rc.2] - 2026-09-08

- Removed the legacy per-model validation classification and confirmation UI. Apple hardware with an Intel CPU now determines `SupportedIntelMac` directly; exact model identity remains reporting/persistence context and fan writes remain gated by the live capability family. The global `95%` / Boost Disabled CPU policy is unchanged.
- Advanced the `main` development identity to `0.5.0-rc.2` after publication of `v0.5.0-rc.1` so post-release source builds cannot be confused with the immutable published RC artifact.
- `0.5.0-rc.2` is a development target only at this point. No tag or GitHub Release has been created for it.
- Published stable `v0.4.0` and pre-release `v0.5.0-rc.1` remain unchanged.
### Added

- Added the bounded `GlobalMaskFpe2` capability family with exact live metadata, topology, state and value checks. The writer supports only explicit one- and two-fan global masks and fails closed on unknown fingerprints or higher fan counts.
- Added schema-v4 pre-write transaction journaling and deterministic partial-write-prefix recovery for both `PerFanModeFloat32` and `GlobalMaskFpe2`, with hardened crash, startup, clean-exit and Apple Auto recovery handling.

### Changed

- Gaming Optimised now applies the same processor rule to every `SupportedIntelMac`: Maximum Processor State AC/DC `95% / 95%` with processor boost disabled on AC/DC.
- `SupportedIntelMac` now derives directly from detected Apple hardware plus an Intel CPU rather than an exact Mac-model whitelist.
- Removed the legacy per-model validation/tested-model classification and confirmation UI. Exact model identity remains hardware/reporting and persistence context, not normal processor-profile or fan-writer permission.
- Fan writes remain independently gated by a fresh exact live capability-family match plus all existing topology, value, ownership, Apple Auto, read-back and recovery checks.
- The exact `MacBookPro16,1` model check remains only where required for stable `0.4.0` schema-v1 ownership-marker downgrade compatibility and bounded physical SMC research tooling; it is not a general writer gate.

### Physical validation

- Physically qualified the one-fan `GlobalMaskFpe2` write/readback/Apple Auto round trip on `MacBookPro12,1` using exact fresh `F0Mx` bytes and the global `FS! ` mode mask.
- The existing `MacBookPro16,1` end-to-end physical validation for `PerFanModeFloat32` remains applicable.
- Two-fan `GlobalMaskFpe2` (`FS! = 0003`) physical qualification remains pending and is not inferred from the one-fan result.
- The experimental native `BootCampSmc` write transport is **not** claimed as physically write-qualified or as a production dependency.

### Documentation

- Synchronized all repository Markdown documentation after publication of `0.5.0-rc.1`.
- Recorded the immutable `v0.5.0-rc.1` tag, qualified source commit and published ZIP digest.
- Updated contributor, support and security guidance from the stable `0.4.0` exact-model fan gate to the `0.5.0-rc.1` live capability-family policy.
- Clarified that stable `0.4.0` remains the latest stable release while `0.5.0-rc.1` is a separate GitHub pre-release.
- No hardware-control code is changed by this post-release documentation synchronization.
- Prepared repository documentation for the `0.5.0-rc.2` release candidate while keeping stable `0.4.0` as the latest stable release.
- Preserved the immutable `v0.5.0-rc.1` publication identity and older release history.
- Final `0.5.0-rc.2` ZIP size and SHA-256 are intentionally deferred until the final tagged-source build.
- No hardware-control code is changed by this release-preparation documentation update.

## [0.5.0-rc.1] - 2026-09-05

Expand Down
24 changes: 12 additions & 12 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ BCPC can change processor power-management state and, when a live verified capab
## Current project baseline

- Latest stable release: `0.4.0`
- Current release candidate: `0.5.0-rc.1`
- Current RC automated baseline: `589 / 589` tests
- Current physically validated production fan path: `MacBookPro16,1` / Apple T2
- Current release candidate: `0.5.0-rc.2`
- Current RC automated baseline: `632 / 632` tests
- Current physical fan-write evidence: `MacBookPro16,1` / `PerFanModeFloat32` and `MacBookPro12,1` / one-fan `GlobalMaskFpe2`
- Current RC fan-write policy: guarded live capability-family gating, not exact-model permission alone

`0.5.0-rc.1` is a pre-release. Passing the runtime capability-family gate on another T2-era Mac does not mean that model has been physically validated by the project.
`0.5.0-rc.2` is a pre-release. Normal `SupportedIntelMac` eligibility comes from detected Apple hardware plus an Intel CPU. Passing a runtime fan capability-family gate does not mean that Mac model has been physically validated by the project.

## Development model

Expand Down Expand Up @@ -43,21 +43,21 @@ Do not enable a write path merely because a similar Mac model, T1/T2 generation,

## Fan-control changes

Production fan writes in `0.5.0-rc.1` are capability-family-gated.
Production fan writes in `0.5.0-rc.2` are capability-family-gated.

The current write family requires all of the following at runtime:
The current write families require all of the following at runtime:

- platform status `SupportedIntelMac`,
- MMIO AppleSMC protocol,
- exact verified `FNum` metadata,
- a supported discovered fan count within `F0..F9`,
- exact per-fan `Mx/Ac/Md/Tg` metadata for the verified FLT4/per-fan family,
- an exact complete live fingerprint for either `PerFanModeFloat32` or the bounded one-/two-fan `GlobalMaskFpe2` family,
- sane finite runtime values,
- Apple Auto before new ownership,
- no conflicting external Manual state,
- fresh preflight immediately before a write.

`MacBookPro16,1` is the only model physically validated end-to-end for this production path so far. New models must still be tested in controlled stages even if the runtime fingerprint passes.
`MacBookPro16,1` remains physically validated end-to-end for `PerFanModeFloat32`; `MacBookPro12,1` has passed the one-fan `GlobalMaskFpe2` write/readback/Apple Auto qualification. The two-fan global-mask path still requires physical qualification. New machines must be tested in controlled stages even if the runtime fingerprint passes.

Any fan-control proposal must preserve these invariants:

Expand All @@ -70,9 +70,9 @@ Any fan-control proposal must preserve these invariants:
- Restore ordering: fans first, then exact saved processor state,
- no inference of BCPC ownership from observed Manual mode alone,
- no arbitrary SMC key or generic RPM write surface,
- no T1 `fpe2` / `FS!` writes through the T2-style path.
- no cross-family reuse of per-fan `Md`/`Tg` or global `FS! ` semantics and no permission inferred from a model or T1/T2 label.

Do not generalize the physically observed `MacBookPro16,1` RPM values as limits for another model. `0.5.0-rc.1` intentionally derives targets from fresh live `F{i}Mx` and uses `10000 RPM` only as a broad anti-corruption ceiling, not as an Apple specification or write target.
Do not generalize physically observed RPM values from either validation machine as limits for another model. `0.5.0-rc.2` intentionally derives targets from fresh live `F{i}Mx` and uses `10000 RPM` only as a broad anti-corruption ceiling, not as an Apple specification or write target.

## Processor power-management changes

Expand All @@ -86,7 +86,7 @@ Gaming Optimised globally uses Maximum Processor State `95% / 95%` and Turbo/Boo

## Native BootCampSmc research driver

`drivers/BootCampSmc/` is an experimental independently authored KMDF research path. It is not the production fan-control dependency for stable `0.4.0` or release candidate `0.5.0-rc.1` and is not shipped in their release ZIPs.
`drivers/BootCampSmc/` is an experimental independently authored KMDF research path. It is not the production fan-control dependency for stable `0.4.0` or release candidate `0.5.0-rc.2`, is not shipped in their release ZIPs and is not claimed as physically write-qualified.

The current physically completed checkpoint is Gate 5D-B fixed-key `GET_KEY_INFO(F0Mx/F1Mx)` metadata discovery on `MacBookPro16,1`.

Expand Down Expand Up @@ -129,7 +129,7 @@ For release-packaging changes also run:
powershell -ExecutionPolicy Bypass -File scripts/publish-release.ps1
```

The current `0.5.0-rc.1` qualification baseline contains `589` automated tests. A change should not reduce coverage or bypass existing safety checks without an explicit reviewed reason.
The current `0.5.0-rc.2` qualification baseline contains `632` automated tests. A change should not reduce coverage or bypass existing safety checks without an explicit reviewed reason.

## Pull-request expectations

Expand Down
21 changes: 10 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,18 @@ BootCamp Performance Control (BCPC) is an open-source Windows utility for Intel

Its goal is to reduce unnecessary heat and thermal throttling using conservative Windows processor power management and guarded Apple SMC fan control when a verified runtime capability family is present.

**[Download the latest stable release](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases/latest)** · **[Download 0.5.0-rc.1](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases/tag/v0.5.0-rc.1)** · [All releases and pre-releases](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases) · [Hardware compatibility](docs/HARDWARE-COMPATIBILITY.md) · [Fan control](docs/FAN-CONTROL.md) · [Changelog](CHANGELOG.md)
**[Download the latest stable release](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases/latest)** · **[Download 0.5.0-rc.2](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases/tag/v0.5.0-rc.2)** · [All releases and pre-releases](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases) · [Hardware compatibility](docs/HARDWARE-COMPATIBILITY.md) · [Fan control](docs/FAN-CONTROL.md) · [Changelog](CHANGELOG.md)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the download link on the published release candidate

When this release-preparation commit lands, the prescribed post-merge build, tag, and GitHub Release steps have not happened yet, so this new v0.5.0-rc.2 URL returns 404 and the prominent download call-to-action cannot be used. The previous rc.1 process intentionally linked only the general Releases page during preparation and added the dedicated tag URL after publication; retain that behavior (and the corresponding SUPPORT/Quick start references) until rc.2 is actually published.

Useful? React with 👍 / 👎.


## Release status

- **Current stable release:** `0.4.0`
- **Current published release candidate:** `0.5.0-rc.1`
- **Current `main` development target:** `0.5.0-rc.2` — not tagged or published.
- **Current release candidate:** `0.5.0-rc.2`
- **Stable status:** `0.4.0` remains the recommended stable build and remains GitHub's latest stable release.
- **RC status:** `0.5.0-rc.1` is published as a GitHub pre-release for controlled compatibility testing.
- **RC status:** `0.5.0-rc.2` is prepared as the release candidate for controlled compatibility testing.
- **Current fan-control milestone:** dynamic topology plus bounded `PerFanModeFloat32` and `GlobalMaskFpe2` capability-family writers.
- **Physical fan-control validation:** `MacBookPro16,1` end-to-end for `PerFanModeFloat32`; `MacBookPro12,1` one-fan write/readback/Apple Auto round trip PASS for `GlobalMaskFpe2`.

Published `0.5.0-rc.1` identity:
Previous published `0.5.0-rc.1` identity:

```text
Tag: v0.5.0-rc.1
Expand All @@ -32,17 +31,17 @@ ZIP SHA-256: B2215F7C6846614F2F1606A5DC11DC2D0BB1A496C66ACBA523B607A8DC65DDD5
Tests: 589 / 589 PASS
```

The annotated release tag is immutable project evidence for this candidate. Documentation and development commits made after publication do not move or rewrite `v0.5.0-rc.1`.
The annotated release tag is immutable project evidence for that previous candidate. Documentation and development commits made after publication do not move or rewrite `v0.5.0-rc.1`.

Source builds from `main` after the release may report `0.5.0-rc.2`; that value identifies the next development target only and must not be represented as a published RC until a dedicated tag/release checkpoint is created.
The source reports `0.5.0-rc.2`. Its final ZIP size and SHA-256 must come from the final tagged-source build and are intentionally not predeclared here.

`0.5.0-rc.1` broadens runtime fan-write eligibility from the stable line's exact-model gate to a strict live SMC capability-family gate. That does **not** mean every T2 Mac has been physically validated.
`0.5.0-rc.2` determines normal `SupportedIntelMac` eligibility from Apple hardware plus an Intel CPU and gates fan writes separately through a strict live SMC capability-family match. Exact model identity is not normal writer permission, and physical evidence for one machine is not a model whitelist.

> **Important:** Gaming Optimised uses Maximum Processor State `95% / 95%` and disables Turbo/Boost on AC and DC for every `SupportedIntelMac`. Fan control is additive and remains independently capability-gated.

## Quick start

For normal use, start with the latest stable release. For `0.5.0-rc.1` testing, use the dedicated [0.5.0-rc.1 GitHub pre-release](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases/tag/v0.5.0-rc.1).
For normal use, start with the latest stable release. For `0.5.0-rc.2` testing, use the dedicated [0.5.0-rc.2 GitHub pre-release](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases/tag/v0.5.0-rc.2).

1. Download the matching `win-x64` ZIP and `.sha256` file.
2. Optionally verify the ZIP SHA-256.
Expand Down Expand Up @@ -127,7 +126,7 @@ See [0.5.0-rc.2 GlobalMaskFpe2 Hardware Validation Record](docs/0.5.0-rc.2-GLOBA

The processor Gaming profile is available on `SupportedIntelMac` systems. Fan-write eligibility is not granted merely because a machine is an Intel Mac or is believed to contain T2.

Current development builds determine `SupportedIntelMac` from Apple hardware plus an Intel CPU; the exact model identifier does not decide normal processor-profile eligibility. Fan writes separately require the fresh runtime AppleSMC fingerprint documented in [Hardware Compatibility](docs/HARDWARE-COMPATIBILITY.md) and [Fan Control](docs/FAN-CONTROL.md). Physical validation records are evidence for the observed capability mechanisms, not runtime permission lists.
`0.5.0-rc.2` determines `SupportedIntelMac` from Apple hardware plus an Intel CPU; the exact model identifier does not decide normal processor-profile eligibility. Fan writes separately require the fresh runtime AppleSMC fingerprint documented in [Hardware Compatibility](docs/HARDWARE-COMPATIBILITY.md) and [Fan Control](docs/FAN-CONTROL.md). Physical validation records are evidence for the observed capability mechanisms, not runtime permission lists.

## Fan-control dependency: Macs Fan Control 1.5.16

Expand Down Expand Up @@ -229,7 +228,7 @@ The publish script creates a versioned self-contained `win-x64` directory, ZIP,
## Documentation

- [Latest stable release](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases/latest)
- [0.5.0-rc.1 pre-release](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases/tag/v0.5.0-rc.1)
- [0.5.0-rc.2 pre-release](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases/tag/v0.5.0-rc.2)
- [All releases and pre-releases](https://github.com/mksolutionsuniversal/BootCampPerformanceControl/releases)
- [Hardware Compatibility](docs/HARDWARE-COMPATIBILITY.md)
- [Fan Control and AppleSMC Compatibility Backend](docs/FAN-CONTROL.md)
Expand Down
14 changes: 7 additions & 7 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ Security fixes are provided for the latest stable release of BootCamp Performanc
Current public lines:

- stable: `0.4.0`
- release candidate: `0.5.0-rc.1`
- release candidate: `0.5.0-rc.2`

`0.5.0-rc.1` is a pre-release and broadens production fan-write eligibility from the stable line's exact-model gate to a guarded live capability-family gate. It does not claim physical validation of every T2 Mac.
`0.5.0-rc.2` is a pre-release. Normal `SupportedIntelMac` eligibility derives from detected Apple hardware plus an Intel CPU; production fan writes are independently restricted to guarded live `PerFanModeFloat32` or bounded `GlobalMaskFpe2` capability-family matches. It does not claim physical validation of every Intel Mac.

## Reporting a Vulnerability

Expand Down Expand Up @@ -44,28 +44,28 @@ Reports involving any of the following are treated as safety-relevant:
- failure to return BCPC-owned hardware to Apple Auto,
- crash-recovery failures,
- fan writes occurring when the live capability-family gate should have blocked them,
- fan writes occurring on T1-style `fpe2` / `FS!` hardware through the T2-style production path,
- fan writes occurring through the wrong capability-family semantics or outside the exact bounded `PerFanModeFloat32` / `GlobalMaskFpe2` fingerprints,
- recovery ownership markers being cleared without verified hardware recovery,
- replacement or loss of the original processor Restore snapshot during fan-only resume.

## Fan-control safety boundary

Stable `0.4.0` uses the historical exact `MacBookPro16,1` production fan-write gate.

Release candidate `0.5.0-rc.1` uses a stricter live capability-family decision at write time. Production fan writes require, at minimum:
Release candidate `0.5.0-rc.2` uses a strict live capability-family decision at write time. Production fan writes require, at minimum:

- `SupportedIntelMac`,
- MMIO AppleSMC protocol,
- exact verified `FNum` metadata,
- a supported dynamic topology within `F0..F9`,
- exact verified per-fan `Mx/Ac/Md/Tg` metadata,
- exact complete metadata for either `PerFanModeFloat32` or the bounded one-/two-fan `GlobalMaskFpe2` family,
- sane finite runtime values,
- Apple Auto before new BCPC ownership,
- fresh preflight before the write.

The production write surface remains restricted to discovered per-fan `Md` and `Tg` keys. `FS!`, T1 `fpe2`, arbitrary SMC keys, minimum-RPM controls and user-defined fan-speed sliders remain outside the RC write path.
The production write surface remains restricted to discovered per-fan mode/target keys for `PerFanModeFloat32` and the proven global `FS! ` mode plus per-fan targets for bounded `GlobalMaskFpe2`. Arbitrary SMC keys, minimum-RPM controls, unknown fingerprints and user-defined fan-speed sliders remain outside the RC write path.

`MacBookPro16,1` remains the only model physically validated end-to-end for this production path so far. Runtime compatibility on another machine is not equivalent to project physical validation.
`MacBookPro16,1` remains physically validated end-to-end for `PerFanModeFloat32`, while `MacBookPro12,1` has passed one-fan `GlobalMaskFpe2` write/readback/Apple Auto qualification. Two-fan global-mask physical qualification remains pending. Runtime compatibility on another machine is not equivalent to project physical validation, and neither model identifier grants writer permission.

BCPC does not infer ownership from observed Manual mode alone. A Manual state without BCPC ownership context is treated as externally controlled and is not silently taken over.

Expand Down
Loading