Skip to content

Add the MacBook support matrix generator - #798

Open
maralcbr wants to merge 1 commit into
quattrofrom
docs/macbook-support-matrix
Open

maralcbr wants to merge 1 commit into
quattrofrom
docs/macbook-support-matrix

Conversation

@maralcbr

@maralcbr maralcbr commented Nov 8, 2026

Copy link
Copy Markdown
Member

Summary

Commits the generator behind the MacBook support matrix so it can be refreshed each release candidate instead of rebuilt by hand.

+scripts/macbook-support-matrix/
+├── matrix.py      # stdlib CLI: scan, diff, build
+├── boards.json    # curated matrix: 42 boards × 16 features, gates and PRs per cell
+├── scan.json      # device-tree evidence at linux-aurora 8eddf5ae (refresh baseline)
+└── page.html      # page template
+agents/skills/macbook-support-matrix.md   # refresh procedure
+tests/test-macbook-support-matrix.{py,sh}
 AGENTS.md          # + task guide link
refresh(rc)
  scan  --kernel <linux-aurora at rc>   # cc + dtc: compile each MacBook .dts, effective status, driver match
  diff  --new scan                      # what moved since scan.json
  edit boards.json for each change
  build --out dir --scan scan           # index.html, basecamp.html, matrix-data.json
                                        # + lists cells the scan contradicts

Placement: the repo has no reports/, so code and data sit beside the other collectors in scripts/, and the procedure goes in agents/skills/ per the documentation layout in AGENTS.md. Bare #N and repo#N in notes become omacom PR links. boot_enables records nodes m1n1 turns on at boot (kboot.c:407-419, M3 Pro dispext, Neo), and tree_in_pr marks J714C, whose tree exists only in linux-aurora#404.

Evidence

  • Before: the matrix lived as a one-off page plus scratch scripts with hardcoded paths.
    After: build reproduces the published data: 42 boards, every cell's status and note text identical to the current matrix-data.json. The one change is the M5 Pro / Max family note, now m1n1#30 instead of m1n1 #30 so the link points at m1n1. The page renders 42 boards in 13 families with no console errors.
  • scan at linux-aurora 8eddf5ae (27 trees) matches the earlier scan on 566 of 567 cells. The other one is the new disabled J514M DCP node from linux-aurora#408, which the matrix already shows as In PR until m1n1#32.
  • build --scan: 0 disagreements.
  • tests/test-macbook-support-matrix.sh: 9 tests pass (link expansion, kind expansion for all 42 boards, effective DT status, build outputs, committed scan agrees with boards.json). They run in tests/all and need no dtc.

Merge Danger

Door: two-way

New files plus one AGENTS.md line; nothing at runtime or install time reads them.

Blast Radius: none

tests/all gains one suite, and it is stdlib only.

Keeps the curated per-board matrix in boards.json, records the device-tree
evidence in scan.json, and builds the page and the Basecamp document from
them so the matrix can be refreshed each release candidate.
@greptile-apps

greptile-apps Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[Low impact] The changes affect matrix readers and the maintainers who refresh it, not MacBook runtime behavior.

The PR has no blocking runtime defect, but the scan check, shared page text, and evidence links need cleanup.

Findings

  1. P2 Bluetooth failures pass the check ▶
  2. P2 Refreshed pages keep old claims ▶
  3. P2 Kernel evidence links elsewhere ▶
  4. P2 Summary evidence is not clickable ▶

Summary

Adds a repeatable MacBook support matrix workflow:

  • Readers can compare support across 42 Apple Silicon MacBook models.
  • Maintainers can refresh and rebuild the matrix from a kernel release candidate.

The review found a missed combined-feature check, duplicated release text that can go stale, and two evidence-link issues. Browser capture was blocked because the browser executable was unavailable.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  Kernel[Kernel checkout] --> Scan[scan]
  Scan --> NewScan[New scan JSON]
  Baseline[Committed scan JSON] --> Diff[diff]
  NewScan --> Diff
  Diff --> Edit[Refresh boards.json]
  Edit --> Build[build]
  NewScan --> Check[Compare curated cells]
  Build --> Check
  Template[page.html] --> Build
  Build --> Outputs[Standalone HTML, Basecamp HTML, JSON]
Loading

Reviews (1) · Last reviewed commit: "Add the MacBook support matrix generator" · Reviewed by Greptile

v = b["r"][col]
if col in b["boot_enables"] and "dt-off" in states:
continue
if v["s"] == "on" and "driver" not in states:

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 Bluetooth failures pass the check

disagreements() accepts an On network cell when either Wi-Fi or Bluetooth has a driver. If Bluetooth changes to no-driver while Wi-Fi stays at driver, build --scan reports no disagreement. Maintainers can therefore miss a broken half of the combined feature. Require every listed feature to pass, with explicit exceptions for boards that need them.

[`${counts.full} boards: M1 to M2 Max`, "Every device described with a driver, display and GPU on by default. The gap is external display on M2."],
[`${counts.m3on} of ${counts.m3all} M3 boards`, "Native display and GPU on by default: J504, J613, J615, J514S, J516S, J516C, and J514C since m1n1#31 (unqualified power values). On M3 Pro only the 12-core CPU / 18-core GPU bin gets the GPU; the 14-core GPU bin is in linux-aurora#366 and #390."],
["Sleep is s2idle only", "No board has deep sleep. Measured sleep drain: M1 Pro J314S 2.25 W, M3 Pro J514S 1.35 W, about 2 W on an M2 Pro, against 0.25 W for macOS on the same M1 Pro. Neo does not resume from s2idle yet."],
["Binned M3 Max (T6034)", "J514M display and GPU are merged in the kernel and Mesa; on by default once m1n1#32 merges. J516M has nothing yet and boots on the framebuffer."],

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 Refreshed pages keep old claims

The standalone page repeats release-specific summaries and evidence instead of reading them from boards.json. Following the refresh guide updates the table and Basecamp text but leaves these statements unchanged. For example, changing J514M to On still leaves the page saying it is waiting for m1n1#32. Generate the shared text from one source, or include the template in the required refresh steps.

],
"gpu": [
"pr",
"m1n1 hand-off m1n1#37; no kernel driver in #404"

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 Kernel evidence links elsewhere

This note turns #404 into a link to m1n1/pull/404, because link() carries forward the repository from m1n1#37. The kernel change is linux-aurora#404. Spell out that repository here so both published outputs point to the right evidence.

Suggested change
"m1n1 hand-off m1n1#37; no kernel driver in #404"
"m1n1 hand-off m1n1#37; no kernel driver in linux-aurora#404"


document.getElementById("summary").innerHTML = [
[`${counts.full} boards: M1 to M2 Max`, "Every device described with a driver, display and GPU on by default. The gap is external display on M2."],
[`${counts.m3on} of ${counts.m3all} M3 boards`, "Native display and GPU on by default: J504, J613, J615, J514S, J516S, J516C, and J514C since m1n1#31 (unqualified power values). On M3 Pro only the 12-core CPU / 18-core GPU bin gets the GPU; the 14-core GPU bin is in linux-aurora#366 and #390."],

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 Summary evidence is not clickable

The standalone summary inserts PR references as plain text, so m1n1#31, linux-aurora#366, #390, and m1n1#32 are not clickable. Readers must find those PRs themselves. This misses the guide's requirement to link every PR and commit. Pass these strings through the same link expansion used for cell notes and Basecamp text.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant