fleet/ohm: switch bes2600 to cumulative-c5x interim + close besser#1 + GCC 15 SCS fix (closes #5 partial) #28

Merged
marfrit merged 9 commits from claude-noether/kernel-agent:noether/migrate-pinetab2-pkg-and-patches into main 2026-05-18 20:56:41 +00:00
Owner

Migration delivery (ohm pkgrel=4 + besser#1 + GCC 15 SCS)

Closes the partial part of #5linux-pinetab2-danctnix-besser PKGBUILD is now driven by ka-promote ohm against this manifest. The new package lives in marfrit/marfrit-packages/arch/linux-pinetab2-danctnix-besser/ (matching PR in that repo).

What this changes

  1. fleet/ohm.yaml — fixes YAML parse error (bar5_burn_in scalar + sub-list, never parsed cleanly since #18). Drops the 17 broken -danctnix per-series includes. Replaces with three working includes: cumulative-c5x-danctnix/, scan-filter-5ghz-danctnix/ (closes besser#1), xor-neon-ffixed-x18-scs-build-fix-danctnix/.
  2. patches/driver/bes2600/cumulative-c5x-danctnix/ — interim single-file series-dir staging the working hand-curated cumulative from boltzmann (148 149 B, touches the correct 48 drivers/staging/bes2600/* files — the same set pkgrel=3 ships).
  3. patches/driver/bes2600/scan-filter-5ghz-danctnix/ — Patch I for besser#1. Both commits (n_channels > 0 and the > 1 refinement that preserves single-channel BSS discovery for NM band=a). Phase 7 baseline: Pattern A 14.3/h → 0/h.
  4. patches/arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/ — Makefile workaround for GCC 15.2.1 + arm_neon.h + SHADOW_CALL_STACK=y. No-op while ohm's config has SCS=n.

Audit that produced this shape (2026-05-18)

Running ka-promote ohm with the original 17 per-series includes (after fixing the YAML syntax error) produced a 172 644-byte cumulative touching 27 file paths, of which 11 were bogus: 10 patches target DKMS-style root paths (bes2600/foo.c) rather than in-tree staging paths (drivers/staging/bes2600/foo.c), and 1 patch has a corrupted mixed-prefix header a/drivers/staging/bes2600/bes2600_sdio.c b/bes2600/bes2600_sdio.c.

The hand-curated cumulative — what pkgrel=3 actually builds with — is 148 149 bytes and touches 48 in-tree staging files. The per-series mirrors from #17 do NOT apply against the linux-pinetab2 baseline.

Per-series reconstruction tracked separately as the followup issue filed alongside this PR.

Self-consistency check

ka-promote ohm
  cumulative: cumulative.patch (157 458 bytes)
  b2sum:      bd42cd39106298879eeb...
  patches:    3 resolved

byte arithmetic: 148 149 + 7 735 + 1 574 = 157 458 ✓

Why the second commit (989b884)

The SCS source patch was missing the -- \n2.54.0\n git-format-patch trailer. BSD patch(1) in makepkg's prepare() reads the trailing context line of the hunk as the start of a new patch header and errors with 'malformed patch at line N'. Added the trailer; cumulative b2sum bumped 12 bytes.

Verification status

  • ka-promote ohm exits 0, manifest.lock + cumulative.patch generated, self-consistent.
  • Build of pkgrel=4 from the migrated PKGBUILD (marfrit/marfrit-packages) in progress; prepare() passes after the trailer fix. Full build + install + ohm Phase 7 will follow as a comment when done.
## Migration delivery (ohm pkgrel=4 + besser#1 + GCC 15 SCS) Closes the partial part of #5 — `linux-pinetab2-danctnix-besser` PKGBUILD is now driven by `ka-promote ohm` against this manifest. The new package lives in `marfrit/marfrit-packages/arch/linux-pinetab2-danctnix-besser/` (matching PR in that repo). ### What this changes 1. **`fleet/ohm.yaml`** — fixes YAML parse error (`bar5_burn_in` scalar + sub-list, never parsed cleanly since #18). Drops the 17 broken `-danctnix` per-series includes. Replaces with three working includes: `cumulative-c5x-danctnix/`, `scan-filter-5ghz-danctnix/` (closes besser#1), `xor-neon-ffixed-x18-scs-build-fix-danctnix/`. 2. **`patches/driver/bes2600/cumulative-c5x-danctnix/`** — interim single-file series-dir staging the working hand-curated cumulative from boltzmann (148 149 B, touches the correct 48 `drivers/staging/bes2600/*` files — the same set pkgrel=3 ships). 3. **`patches/driver/bes2600/scan-filter-5ghz-danctnix/`** — Patch I for besser#1. Both commits (`n_channels > 0` and the `> 1` refinement that preserves single-channel BSS discovery for NM `band=a`). Phase 7 baseline: Pattern A 14.3/h → 0/h. 4. **`patches/arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/`** — Makefile workaround for GCC 15.2.1 + `arm_neon.h` + `SHADOW_CALL_STACK=y`. No-op while ohm's config has SCS=n. ### Audit that produced this shape (2026-05-18) Running `ka-promote ohm` with the original 17 per-series includes (after fixing the YAML syntax error) produced a 172 644-byte cumulative touching **27 file paths**, of which **11 were bogus**: 10 patches target DKMS-style root paths (`bes2600/foo.c`) rather than in-tree staging paths (`drivers/staging/bes2600/foo.c`), and 1 patch has a corrupted mixed-prefix header `a/drivers/staging/bes2600/bes2600_sdio.c b/bes2600/bes2600_sdio.c`. The hand-curated cumulative — what pkgrel=3 actually builds with — is 148 149 bytes and touches 48 in-tree staging files. The per-series mirrors from #17 do NOT apply against the linux-pinetab2 baseline. Per-series reconstruction tracked separately as the followup issue filed alongside this PR. ### Self-consistency check ``` ka-promote ohm cumulative: cumulative.patch (157 458 bytes) b2sum: bd42cd39106298879eeb... patches: 3 resolved byte arithmetic: 148 149 + 7 735 + 1 574 = 157 458 ✓ ``` ### Why the second commit (989b884) The SCS source patch was missing the `-- \n2.54.0\n` git-format-patch trailer. BSD `patch(1)` in makepkg's `prepare()` reads the trailing context line of the hunk as the start of a new patch header and errors with 'malformed patch at line N'. Added the trailer; cumulative b2sum bumped 12 bytes. ### Verification status - `ka-promote ohm` exits 0, manifest.lock + cumulative.patch generated, self-consistent. - Build of pkgrel=4 from the migrated PKGBUILD (marfrit/marfrit-packages) in progress; `prepare()` passes after the trailer fix. Full build + install + ohm Phase 7 will follow as a comment when done.
marfrit added 2 commits 2026-05-18 14:55:26 +00:00
Audit during ohm pkgrel=4 migration found the per-series -danctnix
mirrors merged in #17 do NOT apply against the linux-pinetab2 baseline:
all 17 of them use DKMS-style root paths (bes2600/foo.c) rather than
in-tree staging paths (drivers/staging/bes2600/foo.c), and at least one
has a corrupted mixed-prefix header
(a/drivers/staging/bes2600/...  b/bes2600/...).

ka-promote ohm with those includes produced a 172 644-byte cumulative
touching 27 file paths, of which 11 are bogus. The hand-curated
0001-bes2600-besser-cumulative-series.patch from the working
danctnix-besser-pkgbuild flow on boltzmann (148 149 bytes, 48 in-tree
staging files) is what pkgrel=3 actually builds with.

Until the per-series mirrors are reconstructed (followup issue to be
opened separately), the bes2600 driver scope is satisfied here by
staging that hand-curated cumulative as a single-file series-dir
patches/driver/bes2600/cumulative-c5x-danctnix/. ohm.yaml drops the
broken per-series includes in favour of:

  - driver/bes2600/cumulative-c5x-danctnix/
  - driver/bes2600/scan-filter-5ghz-danctnix/      (closes besser#1)
  - arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/

ka-promote ohm now produces a self-consistent 157 446-byte cumulative
(148 149 + 7 735 + 1 562 = exact byte arithmetic) with b2sum
a807297b25be... which is what the new
marfrit-packages/arch/linux-pinetab2-danctnix-besser PKGBUILD pkgrel=4
pins.

Also fixes fleet/ohm.yaml YAML parse error: bar5_burn_in had a scalar
value followed by a sub-list, which ka-promote (PyYAML) refused to
parse. The whole manifest had never parsed cleanly since #18 landed.

Refs: #5 (migrate PKGBUILD), #2 (mirror besser series — needs per-series
rewrite followup), besser#1 (Patch I).
The SCS-build-fix patch was missing the standard '-- \n2.54.0\n'
trailer that git format-patch emits between patches. Without it,
BSD-flavour patch(1) in makepkg's prepare() reads the trailing context
line of the @@ hunk as the start of a new patch header and dies with
'malformed patch at line N'. Affects builds where ka-promote
concatenates this series with any others. Reproduced 2026-05-18 on
the first attempted ohm pkgrel=4 build.

Cumulative b2sum changes accordingly:
  a807297b25be... -> bd42cd39106298879eeb...
(size 157446 -> 157458; 12 bytes for the trailer)
marfrit added 1 commit 2026-05-18 14:58:22 +00:00
The hunk header @@ -9,6 +9,10 @@ understated both old (actual 7) and
new (actual 12) line counts by 1. patch(1) standalone tolerates this
via fuzz, but in the concatenated cumulative the wrong counts cause
patch to mis-judge the hunk boundary and read the trailing context
line ('lib-...uaccess_flushcache.o') as the start of a new patch
header — 'malformed patch at line 4526'.

Cumulative b2sum: bd42cd39106298879eeb... -> ad9e2cb533957f218058...
(size unchanged at 157 458; only the @@ counts in the SCS patch
differ)
marfrit added 1 commit 2026-05-18 15:00:14 +00:00
The '-- \n2.54.0\n\n' trailer added in 989b884 was wrong. The
underlying problem was the malformed @@ hunk counts (off by 1 in
both old and new), fixed in a840f76. With correct @@ counts, patch(1)
processes the hunk fully and then sees the orphan trailer at EOF —
which it tries to parse as the start of a new patch header
('malformed patch at line N: 2.54.0').

The original (no-trailer) shape works correctly in the concatenated
cumulative as long as the @@ counts are right. Removing the trailer
brings the file back to the original 1562-byte size and the
cumulative b2sum to 334c37b5d37067982bd9... (size unchanged 157 458 ->
157 446 since the 12 byte trailer is gone).

Lesson for ka-promote: when concatenating patches as a stream for
patch(1), the LAST patch must not carry a trailing '-- \n<version>\n'
sentinel — the previous patches' sentinels are fine because they are
followed by 'From <sha>' headers that patch(1) recognises as the next
patch boundary. Documented in series-dir README as a gotcha.
marfrit added 1 commit 2026-05-18 16:01:43 +00:00
Pulls the besser#18 lockdep fix (originally on
noether/bes2600-pending-record-lock-bh / PR #30) into this PR so the
ohm migration ships a single self-consistent pkgrel that contains all
three goal components: kernel-agent flow + Patch I + besser#18 fix
(plus the GCC 15 SCS Makefile workaround, no-op while SCS=n).

ohm.yaml includes now resolve to 4 patches:
  1. driver/bes2600/cumulative-c5x-danctnix/             (148 149 B)
  2. driver/bes2600/scan-filter-5ghz-danctnix/           (  7 735 B)
  3. arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/ (1 562 B)
  4. driver/bes2600/queue-pending-record-lock-bh-danctnix/  (5 258 B)
  ----
  cumulative.patch                                       (162 704 B)
  b2sum 0eb091ddaba4a8f1c3c2a78eb8c621cdc6e6dfed6c43f7dac03e508a05b...

Trailer-strip applied to the besser#18 patch source for the same
reason as the SCS patch — it's now the last in the concatenated
cumulative, and patch(1) errors on the orphan '-- \n2.54.0\n' EOF
sentinel. Same gotcha documented in 84734ba.

PR #30 (the standalone besser#18 mirror PR) becomes superfluous
once this lands; close it as 'bundled into #28'.
Author
Owner

Update 2026-05-18 — besser#18 fix bundled.

After pkgrel=4 build succeeded (49 MB pkg.tar.zst, srcversion BEB625FA7443171EA8D55F7 confirmed byte-identical to pkgrel=3), the besser#18 lockdep fix that was on the standalone branch noether/bes2600-pending-record-lock-bh (PR #30) has been pulled into this PR so the migration ships a single self-consistent release containing all three goal deliverables.

New commit 4d98a81 on this branch:

  • Adds patches/driver/bes2600/queue-pending-record-lock-bh-danctnix/ (the in-tree mirror of marfrit/bes2600-dkms d95453c / PR #11)
  • Adds it to fleet/ohm.yaml includes as the 4th patch
  • Trailer-strip applied to the besser#18 patch source for the same reason as the SCS patch (it's now the last in the concatenated cumulative; orphan -- \n2.54.0\n EOF sentinel breaks patch(1))

ka-promote ohm now produces:

  cumulative: cumulative.patch (162 704 bytes)
  b2sum:      0eb091ddaba4a8f1c3c2a78eb8c621cdc6e6dfed6c43f7dac03e508a05b35102...
  patches:    4 resolved (4 from series-dirs)

Byte arithmetic: 148 149 + 7 735 + 1 562 + 5 258 = 162 704 ✓

PR #30 (the standalone besser#18 mirror) becomes superfluous — close as 'bundled into #28' when this lands.

The matching marfrit/marfrit-packages PR #28 bumps to pkgrel=5 with the new cumulative + b2sum pinned.

**Update 2026-05-18 — besser#18 fix bundled.** After pkgrel=4 build succeeded (49 MB pkg.tar.zst, srcversion `BEB625FA7443171EA8D55F7` confirmed byte-identical to pkgrel=3), the besser#18 lockdep fix that was on the standalone branch `noether/bes2600-pending-record-lock-bh` (PR #30) has been pulled into this PR so the migration ships a single self-consistent release containing all three goal deliverables. New commit `4d98a81` on this branch: - Adds `patches/driver/bes2600/queue-pending-record-lock-bh-danctnix/` (the in-tree mirror of `marfrit/bes2600-dkms` d95453c / PR #11) - Adds it to `fleet/ohm.yaml` includes as the 4th patch - Trailer-strip applied to the besser#18 patch source for the same reason as the SCS patch (it's now the last in the concatenated cumulative; orphan `-- \n2.54.0\n` EOF sentinel breaks `patch(1)`) ka-promote ohm now produces: ``` cumulative: cumulative.patch (162 704 bytes) b2sum: 0eb091ddaba4a8f1c3c2a78eb8c621cdc6e6dfed6c43f7dac03e508a05b35102... patches: 4 resolved (4 from series-dirs) ``` Byte arithmetic: 148 149 + 7 735 + 1 562 + 5 258 = 162 704 ✓ PR #30 (the standalone besser#18 mirror) becomes superfluous — close as 'bundled into #28' when this lands. The matching `marfrit/marfrit-packages` PR #28 bumps to pkgrel=5 with the new cumulative + b2sum pinned.
marfrit added 1 commit 2026-05-18 16:15:47 +00:00
When the SCS patch was the LAST patch in ohm's cumulative, the
trailing '-- \n2.54.0\n' git-format-patch sentinel was an orphan that
patch(1) read as a malformed header — fixed in 84734ba by stripping
the trailer.

Now besser#18 (queue-pending-record-lock-bh-danctnix) is added at the
end of ohm.yaml's includes. SCS is no longer last. Without its
trailer to mark end-of-patch, patch(1) reads straight into besser#18's
'From d95453c... Mon Sep 17 00:00:00 2001' line and errors as
'malformed patch at line N: From ...'.

Restoring the trailer makes the separator unambiguous again.

Cumulative b2sum: 0eb091ddaba4a8f1c3c2a78... -> ceec602afa8574c74354...
Size: 162 704 -> 162 716 (+12 = the trailer bytes).

This rule — 'only the LAST patch must lack a trailer; all others must
keep theirs' — is sensitive to ohm.yaml include ordering, which is
brittle. Filed as a kernel-agent followup: ka-promote should rewrite
trailers automatically (always add to non-last, always strip from
last) so source patches don't need to be ordering-aware.
marfrit added 1 commit 2026-05-18 17:17:26 +00:00
a840f76 changed @@ from -9,6 +9,10 to -9,7 +9,12 but overshot by 1.
Actual hunk is 6 context + 5 add = -9,6 +9,11. Wrong counts were
silently masked in pkgrel=4 build #4 by the trailer-stripped EOF
letting patch fuzz recover. pkgrel=5 with besser#18 after SCS
exposes it as 'malformed patch at line N: 2.54.0'.

Cumulative b2sum: ceec602afa8574c74354... -> 50397711a6a3ba522283...
Size unchanged 162 716.
claude-noether added 2 commits 2026-05-18 20:53:02 +00:00
Resolves the conflict-window between the PR's "switch bes2600 to
cumulative-c5x interim" intent and main's incremental per-patch
evolution.

Resolution per discussion:
- fleet/ohm.yaml: keep PR's cumulative-c5x layout (replaces per-patch
  list) but rename arch/arm64 include to main's canonical
  'scs-arm-neon-build-fix/' (branch's renamed dir dropped).
- patches/driver/bes2600/queue-pending-record-lock-bh-danctnix/
  0001-*.patch: take main's (= identical content + the git-format-patch
  trailer that the branch's earlier add omitted).
- patches/driver/bes2600/scan-filter-5ghz-danctnix/: drop branch's
  older '0001-...-allow-single-channel.patch' variant; keep main's
  newer '0001-...-filter-at-driver-boundary.patch' to avoid 0001-*
  collisions in ka-promote's series-dir resolver.
- patches/arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/:
  dropped (= duplicate of main's scs-arm-neon-build-fix/).
- All other main additions (rkvdec vp9 patches, scan-filter-5ghz/,
  fleet/ampere.yaml updates) auto-merged cleanly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The merge commit renamed arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/
to arch/arm64/scs-arm-neon-build-fix/ (= main's canonical name) but the
include reference in ohm.yaml didn't get updated atomically.

Update the include path to match the renamed dir; ka-promote would have
exit-2'd on this manifest otherwise.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
marfrit merged commit 7a86ebb587 into main 2026-05-18 20:56:41 +00:00
Sign in to join this conversation.