Skip to content

Commit 58cd0d4

Browse files
committed
BRANCH-LOG.md (was DECISIONS.md): merge through the harness, not the branch
Corrections after reading openpocl's CLAUDE.md, README, HANDOFF and WORKLOG: - Public crmvec is written only by crmvec-publish.sh, which has an explicit file list: the six files this branch adds must go on it, or a publish drops them and the Makefile builds nothing. - Don't fast-forward main to the branch: its commits are authored by the cloud session's identity with a session trailer, where every commit on main is anun333's (openpocl's rule for anything public). Publishing through the harness keeps that. - Renamed: openpocl's docs/DECISIONS.md is generated and never edited by hand, and a file of the same name would read as one. - Where each record belongs in openpocl (own-math-library.md, port-speed.md, pr-fix-intents.md, 40-traps.md from 83 on), and the traps written out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GBrvY1uPRbonUrDncT7rc7
1 parent 5a2e3c4 commit 58cd0d4

1 file changed

Lines changed: 73 additions & 16 deletions

File tree

DECISIONS.md renamed to BRANCH-LOG.md

Lines changed: 73 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,42 @@ deliberately left alone. It is written for whoever merges the branch into
66
session_01GBrvY1uPRbonUrDncT7rc7, 2026-09-29) could not reach openpocl's
77
canonical copy.
88

9-
These are branch notes, not part of a release. When merging, move them to
10-
openpocl's docs (beside `docs/outline/40-traps.md`) or delete them, so
11-
`crmvec-publish.sh` doesn't publish them. Each later commit on this branch
12-
adds its entry here.
9+
These are branch notes, not part of a release. `crmvec-publish.sh`
10+
publishes only the files on its list, so this one stays out unless someone
11+
adds it; its content belongs in openpocl's docs (see "Where this belongs in
12+
openpocl" at the end). It is not called `DECISIONS.md` because openpocl's
13+
`docs/DECISIONS.md` is a generated file that sessions are told never to
14+
edit. Each later commit on this branch adds its entry here.
1315

1416
## Before merging
1517

16-
1. **The branch was made on the public repo, not in `openpocl/harness/crmvec`.**
17-
Copy its tree into `harness/crmvec` before the next
18-
`crmvec-publish.sh`, or the next publish reverts it. Six files are new:
19-
`crmvec-fpenv.c`, `crmvec-fpenv.h`, `crtest-ftz.h`, `crtest-own.h`,
20-
`port/crmvec-port-e.c`, `port/pow-parity.h`. Then
21-
`crmvec-publish.sh --check` should report a match.
22-
2. **It contains `main` as of `5bf6f82`** (merged in `357fa92`, no
23-
conflicts) and was 0 commits behind it on 2026-09-29, so `main` can
24-
fast-forward to it. `git log --oneline
25-
main..origin/claude/beautiful-ramanujan-4gvzzd` lists what it adds.
26-
3. **The user asked that this branch not be merged by the cloud session**
18+
1. **Bring it in through the harness, not by merging the branch.** The
19+
branch was made on the public repo, not in `openpocl/harness/crmvec`,
20+
and public crmvec is written only by `crmvec-publish.sh`:
21+
- copy the branch's files into `harness/crmvec` (or the next publish
22+
reverts them);
23+
- add the six new files to `crmvec-publish.sh`'s file list:
24+
`crmvec-fpenv.c`, `crmvec-fpenv.h`, `crtest-ftz.h`, `crtest-own.h`,
25+
`port/crmvec-port-e.c`, `port/pow-parity.h`. The Makefile needs all
26+
six, so a publish without them builds nothing. This log is not on the
27+
list, and needn't be;
28+
- run the fresh-copy gate and the privacy scan as for any publish, then
29+
publish; `crmvec-publish.sh --check` should then report a match.
30+
2. **Don't fast-forward `main` to this branch.** Its 11 commits are authored
31+
`Claude <noreply@anthropic.com>` and carry a `Claude-Session` trailer.
32+
Every commit on `main` is authored `anun333 <anun333@posteo.net>`, with
33+
only the `Co-Authored-By` trailer, which is openpocl's rule for anything
34+
public. The cloud session was set up with that identity and didn't know
35+
the rule until it saw openpocl's CLAUDE.md. Publishing through the
36+
harness gives `main` the usual author; the branch can be deleted after.
37+
3. **It contains `main` as of `5bf6f82`** (merged in `357fa92`, no
38+
conflicts) and was 0 commits behind it on 2026-09-29. `git log
39+
--oneline main..origin/claude/beautiful-ramanujan-4gvzzd` lists what it
40+
adds.
41+
4. **The user asked that this branch not be merged by the cloud session**
2742
("let the other maintainer version of you do that"). Nothing here was
2843
pushed to `main`.
29-
4. **CI** is green on every pushed head: `6bc7ff0`, `447d3c0`, `bed74e9`,
44+
5. **CI** is green on every pushed head: `6bc7ff0`, `447d3c0`, `bed74e9`,
3045
`41e9443` and `5fe2314` (run 36593612771).
3146
- GitHub's x86-64 runners vary: the `447d3c0` run had AVX-512, the later
3247
three didn't (their AVX-512 steps took 0 s).
@@ -302,6 +317,48 @@ exit non-zero.
302317
`ec1904b` on, a build of this branch links with conda's `LDFLAGS`. That
303318
was checked here with simulated flags, not by conda-build.
304319

320+
## Where this belongs in openpocl
321+
322+
Mapped from openpocl's CLAUDE.md and `docs/HANDOFF.md` as of 2026-09-28,
323+
the latest the cloud session saw. Run `harness/prior-work.sh` on each
324+
subject first (ftz, avx512, port_isint, variant_cc, multi-arch), in case
325+
the laptop has something newer.
326+
327+
- **The crmvec record** (each commit above): `docs/own-math-library.md`.
328+
The Cascade Lake timing goes in `docs/port-speed.md`. It bears on two
329+
open lines there: making the x86 portable build the default (the owner's
330+
call), and x86's 1.11-1.14x stragglers. On Cascade Lake the gcc build's
331+
worst are `erff` 1.17x and `atan` 1.15x; the clang build's `sinhf` 1.13x
332+
and `cbrtf` 1.11x.
333+
- **The CORE-MATH flush-to-zero findings:** `docs/pr-fix-intents.md`, the
334+
CORE-MATH report entry, as a follow-up in the thread where CORE-MATH
335+
answered the undefined-behaviour report on 2026-09-28. It is
336+
outward-facing, so it needs the owner's yes. The draft and its `repro.c`
337+
were written in the cloud session's scratchpad, which doesn't outlive the
338+
container; both were sent to the owner through the app on 2026-09-29, to
339+
go in `docs/drafts/`.
340+
- **Traps**, for `docs/outline/40-traps.md`, numbered after 82 (the
341+
highest in the 2026-09-28 handoff):
342+
- A check that finds its library through a RUNPATH of `$ORIGIN` tests
343+
whatever `LD_LIBRARY_PATH` puts first, and prints that library's
344+
verdict (`mpfrcheck`, `f16check`).
345+
- `(a + 1.5*2^52) - 1.5*2^52` rounds exactly only for |a| < 2^51, so an
346+
integer test built on it misjudges [2^51, 2^53).
347+
- gcc's `-ffast-math` startup code leaves FTZ/DAZ (x86) or FZ (aarch64)
348+
on for the whole program, and CORE-MATH is not correct under it.
349+
- clang calls `_ZGVd*` for `-mavx` code. glibc's are IFUNCs, so a libmvec
350+
replacement must check the CPU there.
351+
- A check that ends in `| tail -1` or greps for a verdict passes when it
352+
tested nothing (`crtest` and `mpfrcheck` typos, `hypotf-midpoints`
353+
finding nothing). Say VOID and exit non-zero instead.
354+
- The compiler marks functions that take vectors with the variant
355+
calling-convention flag (`VARIANT_PCS`, `VARIANT_CC`), but not aliases
356+
of them (riscv64 `fmin`).
357+
- A `Multi-Arch: same` package can't carry a script that names the
358+
host's library directory.
359+
- **Open items:** the "Deliberately not done" list above goes to
360+
`pr-fix-intents.md`'s Backlog.
361+
305362
## Appendix: Cascade Lake, the AVX2 entry points per function
306363

307364
`crtest time`, L1 column, fastest of 3 interleaved runs per build

0 commit comments

Comments
 (0)