Skip to content

Rebase onto Asahi 7.2.10: one kernel carrying integration/aurora and aurora-wip - #139

Merged
RyanTheTide merged 10000 commits into
omacom:integration/aurorafrom
aurora-silicon:unified/7.2.10
Oct 19, 2026
Merged

RyanTheTide merged 10000 commits into
omacom:integration/aurorafrom
aurora-silicon:unified/7.2.10

Conversation

@RyanTheTide

@RyanTheTide RyanTheTide commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

Ready for review. Build, KUnit, dtbs and hygiene gates pass, and the hardware is qualified on the MacBook Neo (J700), the M1 Pro (J316s) and the M2 (J413). One known regression is listed under Known issues. Any further updates will be fast-forward pushes to this branch. This branch moves integration/aurora to Asahi Linux asahi-wip v7.2.10 (6d20a3172ffe). On top of that base it carries both:

The result is one kernel for Apple Silicon Macs from M1 to the MacBook Neo (J700).

Layout

The branch is asahi-wip v7.2.10 plus one merge commit per topic, in dependency order (assemble.sh): at update #10 (b4c606fb1c51), the canonical assembly b4c606fb1c51^2 carried 2,306 non-merge commits over Asahi 6d20a3172ffe (2,208 unique subjects). Counted as non-merge commits in the head outside both Asahi and integration/aurora 168dc647cc51, the head adds 3,107; the extra 801 are earlier versions of rewritten commits that the fast-forward publishes keep in history. Each topic is reviewable on its own:

000-devicetree · 010-soc · 020-dart · 050-nvme · 060-power-thermal · 070-audio · 080-radio · 090-input · 100-sep · 170-usb · 200-dcp · 210-gpu · 220-userpages · 240-isp · 245-ane · 900-config-tooling

Topics with a hard dependency are based on that dependency: 200-dcp on 170-usb, and 080-radio on 020-dart. That way every commit builds.

Updates to this PR are fast-forward only: each re-assembly is published as a merge commit on top of the previous head, so the branch is never force-pushed.

Provenance

  • Every carried commit keeps its original author and date, and ends with (cherry picked from commit <sha>).
  • A commit that needed substantive adaptation to 7.2 carries a [ryan: adapted to 7.2.10 — …] note above its trailers.
  • Nothing from one author is squashed into another author's commit.
  • Third-party trailers, including their own co-author lines (one contributor commit credits an AI co-author), are left exactly as written.
  • Some older Aurora commits end with Signed-off-by alone. No trailer was added after the fact.
  • New commits by Aurora end with Assisted-by: LLM and Signed-off-by: Ryan Murray <ryan@aurorasilicon.org>.
  • No upstream AI-instruction files (AGENTS.md, CLAUDE.md, GEMINI.md) were added.

What was carried, and how it was checked

Every commit in both source trees was classified by stable patch-id, subject and author, cherry-pick trailers, and file-level deltas for near-matches. A subject match alone was never treated as equality.

Source Commits Already present / older copy of ours Carried or ported Review fixes Dropped Held
aurora-wip-rebase (0bbaaa063195) vs aurora-wip 1,324 611 (412 present + 199 older copies) 702 (283 port + 2 delta + 417 overlapping, best version kept), plus the 9 commits with a provenance note — 4 —
integration/aurora delta beyond that (5d570a78a4ab) 1,388 1,309 — 64 (#136) 5 —

Rule on conflicts: Asahi is the base. Where two versions of the same change exist, the more correct and more complete one is kept, and nothing either side relied on is lost. J700/Neo code and the SEP keep Aurora's implementation unless the other version is demonstrably better. Every decision is recorded in the topic hand-off notes.

Per topic:

  • 000-devicetree: 35 carried. DT hunks from mixed commits are split here; bindings stay with their drivers.
  • 010-soc / 020-dart / 060-power-thermal: 28 carried. The T8122/T6031 display bring-up rows are ported in update media: apple: avd: update decoder and improve playback reliability #10: the PMP startup provider on 010-soc and the display gate on 170-usb (see "M3 native display"). The T6030 rows stay listed, not ported.
  • 080/090/240/245: 24 carried, plus 2 adaptations.
  • 100-sep (+ tools/aurora-sep): 192 carried, 15 of them adapted.
  • 170-usb: 59 ported, 35 already present or superseded; rebased onto HPD v2.
  • 200-dcp: 161 dispositioned (78 ported, 67 adapted, 13 present, 3 dropped).
  • 210-gpu: the M3/T8122 backend is compile-only and gated to M3 hardware, with no change to G13/G14/G17. The M3 runtime/GPUVM redesign is listed for its maintainer (see "Not in this PR").
  • 220-userpages: the Merge aurora-wip (carries #131) with review fixes #136 review fixes, carried mechanically.
  • 900-config-tooling: generated by make-900.sh; 15 carried, 8 adapted.

Carried with a provenance note

The following commits were carried on Aurora's maintainer decision. They are disclosed here so their authors can document sources or follow up on gaps:

  • 0aa39105: drm/apple: let a dock replug restore a parked dcpext scanout (Chris Kearney).
  • 7b1603a0, f18e6a5b: the T8122 GPU DT resources and UAT placeholders (garymeyerca), as disabled nodes.
  • 8b20dcee: gate T8122 G15G identity before startup (garymeyerca).
  • 84e34610, 8231fa35, 330a560b, 0d51a403: the T8122 register lists and HwData words (Satya Benson).
  • a0fe58a7: the T8122 remaining runtime InitData words (Chris Kearney).

The M3 code they feed is only reachable through M3 compatibles. The G13, G14 and G17 paths are unchanged.

Landed in the fast-forward updates (latest 644133b7799f)

  • Update Aurora kernel roadmap: priorities, current evidence and acceptance #12 (644133b7799f, review follow-ups and base alignment). It has integration/aurora 339ea0487dfc as a parent and carries ASoC: apple: select the Neo speaker codec with macaudio #149 (MAX98357A select for macaudio).
    • GPU UAPI matches integration/aurora. include/uapi/drm/asahi_drm.h now uses the merged numbering from 0c986f352044 (G17P feature bits 10–15, timestamp-copy arrays, VM_CREATE flags). A layout check proves all 499 of its symbols equal to 339ea0487dfc's header. The only diff is two comments describing this tree's behaviour (GEM_MADVISE, RSRC_SPEC_HI). Without this, merging would have reverted the base's UAPI and broken current Aurora Mesa (aurora-silicon/mesa aurora-wip). Older Mesa still runs on it through its existing fallbacks.
    • A DCP that doesn't start keeps the boot framebuffer. The panel's DCP has to come up before simplefb is removed; an external DCP never stands in for a failed panel DCP. A T8122 dcpext whose PMP request isn't acknowledged is left off.
    • Failed PMP start: documented recovery, debugfs start state, and KUnit fault injection (12 cases).
    • Touch ID readiness accounts for the xART guard. Diag gains xart_guard, xart_guard_list, xart_guard_refusals and matching (usable / unverified / blocked); aurora-sep-ready reports NOT ready for configurations the guard is known to block and names the xart_guard=0 opt-out. The diag ABI stays 2 (keys are only added).
    • apple-isp: surfaces the firmware releases are now freed at stream stop. With T8140's resident firmware they were only freed at unbind, so each camera session leaked ~100 MB of memory and ISP IOVA until capture failed with ENOMEM.
    • XART-SAFETY.md full-list wording and the sensor-wake test comment are corrected.
  • Update wifi: brcmfmac: AWDL support for the BCM4387 (AirDrop link layer) #11 (cdc7cd13b1b4).
    • drm/asahi (with the Rust shmem/gpuvm abstractions):
      • an imported dma-buf's SG table is left to its attachment, instead of being unmapped and freed by the importer;
      • unmaps that split two mappings preallocate enough GPUVAs;
      • a failed exec_lock() no longer leaks the VM.
    • Hardware result: on 7.2 without the first fix, every GStreamer camera → GL close on J700 oopses in vb2_dma_sg detach. With it, heap, udmabuf, ISP camera and AVD decode imports pass on a KASAN + kmemleak kernel, with 0 reports.
    • 25G83 runtime: iomfb_v26_6.c finds the display subsystem through disp0, so the 25G83 DCP passes its handoff check.
    • Bindings: apple,pmp, apple,pmp-report, apple,no-ack and apple,soc-device-record are documented. dtbs_check is 7,153 lines, below Support USB4/TB DisplayPort Tunneling #9.
    • Config: RESET_APPLE_CIO defaults to ARCH_APPLE, so a 7.1 config no longer loses the USB4 routers silently.
  • M3 native display on ordinary 14.x boots (update media: apple: avd: update decoder and improve playback reliability #10). On J613/J615, the display gate now completes the tree's own PMP topology with the boot loader's per-Mac values, and the PMP report driver starts the halted PMP and answers apple_pmp_report_wait_ready(), so the DCP takes over from the boot framebuffer. dcpext is admitted the same way. M3 Max (T6031) works the same way but is opt-in with apple_t6031_display.enable=1. Authorship of the carried gate and provider commits is kept.
    • Superseded: on T8122/T6031 the gate reuses the PMP report, DART and mailbox nodes this tree already describes instead of applying the PMP overlays (which this tree would refuse with -EEXIST), so those two overlays are dropped. T6030 keeps the overlay path unchanged. 25G83 coldplug stays in drm/apple; only the gate's 25G83 skip is carried.
    • Not carried: the M3 GPU hunks of those commits, because every T8122 tree keeps the GPU disabled. They go with the M3 GPU runtime.
  • The 64 review fixes from Merge aurora-wip (carries #131) with review fixes #136 (Chris Kearney), ported onto the 7.2 topics.
  • The commits listed under "Carried with a provenance note".
  • The T8112 SEP DART window plus the xART write guard (M2 Touch ID). The DT part was already carried, from 6d52684728eb.
  • Touch ID sensor attach: the serial and nonce are read before registration, and attempts are spaced and bounded with one late retry.
  • Touch ID ready reporting: the sensor's bind is reported to diag, so aurora-sep-ready says ready only once the enrolment is restored, and NOT ready with a reason otherwise.
  • Everything in aurora-wip not yet in this base is now ported, including the 5-cell/legacy DART window KUnit test, the SELinux label for /dev/sep-bio, the authselect PAM hint and the XART-SAFETY cold-boot note. A per-commit audit of all aurora-wip work against this branch found 4 commits missing, and they are the ports above. The other 256 are present under another subject, superseded, already upstream in Asahi 7.2.10, or intentionally dropped. A follow-up hunk-level audit of every file aurora-wip changes (1,176 files, 7,337 hunks) found nothing else missing: 6,684 hunks match exactly, 441 are adapted to 7.2, 205 are superseded with a cited replacement, and 7 are recorded drops.
    • the J700 AVE debugfs encode transport is not carried: it has no stable ABI, needs !SUSPEND so no shipped config can build it, and stays parked on research/ave-transport-7.2.10.
  • M1/M2 Touch ID: the sensor status is re-read after registration on every profile, as on 7.2.10. That removes the session-share refusals seen on M1 Pro boots.
  • integration/aurora arm64: handle Apple M4+ wait state without boot flags #147: Diljit Singh's "arm64: handle Apple M4+ wait state without boot flags", carried unchanged (the J700 keeps the register-preserving WFI path, and arm64.nowfxt is no longer needed).
  • Review fixes (Rebase onto Asahi 7.2.10: one kernel carrying integration/aurora and aurora-wip #139 review): the xART guard list is capped at the length the boot-time read accepts; a sensor bring-up stops between protocol stages when the system suspends; KUnit covers a refused CLEAR_STATE re-registration; XART-SAFETY.md documents the guard per platform; the J613/J615 25G83 display coldplug finds its nodes by alias and phandle.
  • Touch ID attach retries: after the serial is registered, a retry clears the enclave's session state (CLEAR_STATE) and repeats the whole sequence, including share and commit.
  • Display and USB fixes: the DCPEXT reservation-owner warning, every deprecated-workqueue user moved to system_dfl_wq, the M1/M2 Type-C replug relink, the ATC KUnit objects built as modules, and missing MODULE_DESCRIPTIONs.

Validation

Build gates (head 644133b7799f; base asahi-wip v7.2.10; compared with 7.2.10 rebase-wip/7.2.10 c6d6d0964f73)

Gate Result
J700 build (Aurora's published config, LLVM=1) PASS: 0 compiler warnings, 2,508 modules. It is running as the Neo's daily (see Hardware)
M1 Pro / M2 builds (Fedora stock-config recipe) PASS
W=1, J700, the 109 touched directories PASS: 0 new lines vs 7.2.10
KUnit, the union of every topic's suites (37 configs) PASS: 0 failures. SEP 132/132 (+1 skip), DCP 315/315 (+1 skip), GPU 625/625, Type-C/USB 296/296, DART 22/22 (+1 skip), and more. The known apple-drm-resume fixture still stalls under lockdep; every other DCP suite passes there
apple-dcp host selftests (run.py) PASS: 56/56
tools/aurora-sep tests PASS: 767 tests, 0 failing
dtbs_check Compared with this PR's base integration/aurora 5d570a78a4ab: no new warning comes from Aurora's commits, and J700 has no new line. The 337 new lines (after node moves) are all carried: 290 are Asahi 7.2.10's own warnings, 34 are Asahi t8122.dtsi warnings on the base's J613/J615 profiles, and 13 already exist in substance on the base. The T8122 GPU, mailbox and UAT nodes stay disabled
checkpatch --strict 0 errors in this PR's new and adapted commits. Inherited classes are listed: (cherry picked from …) references, and contributor commits without a nominal-author Signed-off-by
Hygiene 0 Co-Authored-By on Aurora commits (contributors' own trailers are kept) · every Aurora commit ends with Assisted-by: LLM + Signed-off-by · 0 AI-instruction files · 0 private paths or identifiers in diffs or messages

Hardware

MacBook Neo (J700), first boot of this tree, compared with the 7.2.10 daily:

  • Driver binding: identical on every platform/SPMI/I²C/SPI/PCI device: DCP×2, apple-drm, the G17P GPU, the SEP, ISP, AOP audio, ALS, PMP, and MT7932 Wi-Fi/BT.

  • External display, 180 Hz over the rear dock, software-driven:

    • DPMS ×10: picture back in 1.8 s median;
    • mode change ×5: 0.9 s;
    • s2idle with the monitor on ×6: 1.4 s;
    • 0 drops.
  • Short sweep: display, GPU (Vulkan/EGL/GLES via Zink/Honeykrisp), Wi-Fi, BT, Touch ID (restored 3 on the first attempt), camera, mic, USB, wake and thermal all pass.

    • Trusted-key seal/unseal works.
    • 3×60 s s2idle at 99.2% residency.
    • AOP capture with 0 xruns.
    • 0 WARN/BUG.
  • Regression sweep, essentials (same scripts as the 7.1 baseline):

    • DCP s2idle 6/6, with the mailbox re-entry rate at baseline;
    • 3 boots at ~14 s to userspace, the same as 7.1;
    • storage 15/0 with data intact across s2idle;
    • s2idle ×5;
    • input 12/0;
    • Wi-Fi e2e on 5 GHz and 2.4 GHz plus a BT reconnect;
    • power/thermal: trip points, IPA policies and cpufreq ladders identical to 7.1;
    • ISP streaming before and after s2idle;
    • speaker playback through the protected path, with the speaker lock held throughout;
    • HQ/LQ mic capture.
  • It was the Neo's daily kernel until the updates below replaced it.

  • The latest update (ffa615e26f29) on the Neo: it passes the same kit and is now the Neo's daily.

    • Driver binding is identical, with 0 WARN.
    • The DCPEXT reservation warnings and the deprecated-workqueue notice are gone.
    • The xART guard reports off on T8140, by design.
    • DPMS 10/10, mode change 5/5, s2idle with the monitor 6/6, the short sweep, and Touch ID restored 3.
  • Attended checks on the Neo, on this kernel: all pass.

    • USB keyboard wake with the lid open and closed (clamshell, external display);
    • Bluetooth keyboard wake;
    • real-lid clamshell (the internal mic and the Touch ID reader hide while closed and return on open);
    • Touch ID verify, lock/unlock and sudo;
    • a cold power-on to the desktop with the external display in about 27 s.
  • The current head (a9712ec4665e) on the Neo: it passes the full kit. Driver binding is identical, with 0 WARN. DPMS 10/10, mode change 5/5, s2idle with the monitor 6/6, the short sweep before and after sleep, about 99.2% s2idle residency, and a 5-minute idle check matching the previous head. Touch ID restored 3, including a first-attempt failure that the retry recovered.

  • M1 Pro and M2 on this tree's code (the head before the final M4+ wait-state commit, which does not apply to M1/M2): the full battery passes on both, and both run it as their daily. The M2 has the SEP on and the xART ledger unchanged (0 of 10).

M1 Pro (J316s) and M2 (J413) on 7.2.10 (the same code base minus the unified carries):

  • M1 Pro: the full battery passes. That covers tipd, USB4 routers, Type-C cycles, pm_test, the display DART attach, the GL smoke test and the ANE probe.

  • Touch ID verified on the M1 Pro, with the xART ledger unchanged.

  • M1 Pro on this tree (e0fa50d863ee, the Fedora stock-config recipe): the same battery passes, matching 7.2.10.

    • tipd 4/4 with nothing deferred;
    • all USB4 routers bound;
    • Type-C cycles 10/10;
    • pm_test=platform 3/3 with 0 DART faults;
    • 3 DCPs with eDP connected;
    • GL smoke test, ANE probe;
    • Touch ID restores its enrolment, with the xART ledger unchanged;
    • 0 Oops.

    The only new dmesg line is an intermittent brcmf_get_assoc_ies -52. It is now the M1 Pro's daily kernel, with 7.2.10, the 7.1 Touch ID kernel and stock as GRUB fallbacks.

  • M1 Pro, attended: Touch ID verify matches; a USB 3 camera in all three ports, both orientations, enumerates at SuperSpeed 7/7.

  • M1 Pro external display through a USB-C dock (DP alt mode), attended:

    • monitor power-cycle and input switch recover;
    • a dock replug recovers in 2 of 3 tries, through the Type-C relink path, in about 7 s.
    • Root-caused: in 1 of 3 replugs the port came back USB 2 only, without DP. A stale CRTC power-off was releasing the replacement Type-C display session. The fix extends the existing session-ownership guard to every Type-C output, and has landed.
  • M1 Pro on the 7.2.10 DTB set (one-shot boots; the daily runs the 7.1 DTB set, which this kernel also supports): 7 of 8 boots of this tree came up with display, Wi-Fi and tipd 4/4. One hung before the root filesystem, with no log, and the watchdog recovered it; it did not reproduce in 6 retries. The 7.2.10 baseline came up 4 of 4. Every boot shows the already-known late-IOMMU probe race, which moves between devices.

  • M2 on this tree: the same battery passes with 0 warnings, and the xART ledger is unchanged (0 of 10).

  • M2 with the SEP on (this tree plus the xART guard and the T8112 SEP DART window, now landed):

    • the SEP attaches with the guard at level 1, and all 10 existing session records are protected;
    • Touch ID restores its enrolled identity across reboots;
    • the xART ledger shows 0 of 10 records changed and 0 added, before, after, and across a plain reboot;
    • 0 warnings.
      It is now the M2's daily kernel.

Known issues and follow-ups

  • M3 native display (J613/J615), regression against integration/aurora.
    • 25G83 profile (J613; J615 only with asahi,j615-25g83-experimental): the coldplug now finds all ten display/PMP nodes through aliases and phandles, so the 25G83 native display can be admitted again.
    • Ordinary 14.x boots: native display is restored in update media: apple: avd: update decoder and improve playback reliability #10 (see "Landed"). T6031 is opt-in.
    • Verification: static only. Builds and W=1 are clean, KUnit passes 68/68 for the gate and validators, and a host test runs the unmodified gate and the provider's lookups against the compiled J613/J615/J514c/J516c DTBs (44/44, with mutated trees refused). Not tested on M3 hardware, and the PMP tables in that test are synthetic.
    • dtbs_check: the bindings landed in update wifi: brcmfmac: AWDL support for the BCM4387 (AirDrop link layer) #11, so this no longer adds lines.
    • 25G83 runtime: fixed in update wifi: brcmfmac: AWDL support for the BCM4387 (AirDrop link layer) #11 (disp0 lookup in iomfb_v26_6.c).
    • M3 PMP start failure. On native-display boots Linux starts the PMP that iBoot left halted. If the start fails after the PMP is enabled, it keeps running until reboot. There is no PMP shutdown handshake, and halting a running PMP would freeze the SoC power states it manages. Recovery: reboot. To boot without starting it, use apple_t8122_display.enable=0 (T8122) or nomodeset. T6031 only starts it with apple_t6031_display.enable=1. The display stays on the boot framebuffer in that case. Verified with KUnit fault injection only.
    • M3 hardware qualification (J613, J615 opt-in: cold boots, PMP start timeouts, DCP failure after the PMP acknowledges, s2idle, dcpext) is owed before rc.
    • Config: APPLE_T6030_DISPLAY_GATE now defaults to y on Apple. It returns immediately without an M3 handoff. The J700 release config pins it off, so its config is unchanged.
  • M1/M2 Touch ID first-attempt reliability (regression vs 7.2.10). On the M1 Pro (J316s), the first sensor bring-up after boot fails more often than on the 7.2.10 kernel: about 1 boot in 4 here, against 0 of 21 on 7.2.10 in an interleaved A/B. The attach retry now clears the enclave's session state and recovers most of these, so Touch ID came up on 28 of 31 recent boots, and a reboot recovers the rest. The xART records and the enrolment are never touched. The rate is bursty: in a later 32-boot interleaved run, the unmodified head failed its first attempt on 1 of 8 boots, and three candidate-revert kernels on none. Every boot restored Touch ID. This is accepted for an edge merge. Finding the cause needs a longer instrumented soak, tracked as a follow-up; the fix will follow as a fast-forward update. The M2 (J413) and the Neo (J700) have not shown an unrecovered boot.
  • J700 rear USB-C SuperSpeed: after a cold boot, a dock's SuperSpeed side doesn't retrain until it is physically replugged. Warm reboots keep it up (11/11), and after a replug it runs at full 10 Gb/s. A fix is still being worked on.
  • HPD v2 (CD321x DP hotplug) is inert on J700, because a DT displayport link has no matching DRM connector there; adding one would give no extra function. It applies to M1/M2 CD321x ports.
  • xART guard on M1-family Macs. With the default xart_guard=1, restoring Touch ID at boot works on every platform, because it only reads xART. Using it does not always work: a fingerprint match rewrites session records, and the guard allows that only for records Linux created while the guard was on.
    • Cold-boot Macs (M1, T8103; M1 Pro/Max, T6000/T6001): creating the keybag also rewrites a session record from before Linux, so setup needs xart_guard=0. Because setup ran unguarded, the matches that follow need it too.
    • M2 (T8112): keybag creation makes no xART writes.
    • Untested under the guard: M2 Pro/Max (T6020/T6021) and M3 (T8122).
      A refused write fails closed and is logged; tools/aurora-sep/XART-SAFETY.md covers restore, use, setup and recovery per platform.
  • Boot.bin DT set: boot.bin holds one DTB set for every GRUB entry. 7.1 kernels need aurora-wip's 5-cell DART backport (now merged there) to run on this tree's DTBs.
  • M1 Pro on the 7.2.10 DTB set: one unexplained early hang in 8 boots; see Hardware.
  • M3 GPU runtime (firmware-event lifetime, GPUVM): it needs its maintainer's redesign on 7.2. Only the compile-only, gated backend is carried here.
  • 240-isp: the AVD part of 107036c9c167 and the ISP part of 7f835188accc still need owner reconciliation.

How to review

Review the canonical assembly, the second parent of the head, not the first-parent chain. The first parents only link earlier fast-forward publishes, so their topic merges are stale copies. The canonical is Asahi 7.2.10 plus one merge per topic, in NNN order.

C=644133b7799f^2          # or <head>^2 after later updates
git log --first-parent --format='%h %s' 6d20a3172ffe..$C            # the topic merges
T=200-dcp                                                           # any topic
M=$(git log --first-parent --format=%H --grep="^Merge branch 'unified/bits/$T'" 6d20a3172ffe..$C | head -1)
git log --reverse --no-merges --format='%h %an %s' $M^1..$M^2        # the topic's commits, in order
git diff $M^1 $M                                                    # its net effect
git diff 6d20a3172ffe $C                                            # the whole kernel over Asahi 7.2.10

Because the canonical is reassembled for each update, git rev-list over the whole head counts every topic commit several times.

What from integration/aurora is carried, deferred or dropped: the head has integration/aurora as a parent, so git counts all of its commits as merged even where the content isn't carried. A per-commit list (1,389 commits checked; 153 deferred, most of them the M3 GPU runtime, 99 superseded, 3 dropped) is here: https://gist.github.com/RyanTheTide/980fce5c903a3b158b37a45432b47abd

Please merge with a merge commit (or a fast-forward), not squash or rebase, so the topic structure and authorship survive.

🤖 Generated with Claude Code

Loading
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.

8 participants