diff --git a/NEXT.md b/NEXT.md index 2b09ff3..818e2c5 100644 --- a/NEXT.md +++ b/NEXT.md @@ -1,3 +1,43 @@ +## To discuss: two decisions parked during the ownership discussion + +Both came out of the lane that closed the enum-layout and constant-checking gaps. Its work is sound and committed; +these are questions it raised rather than defects in it. + +### 1. The header check cannot run in a worktree, and nothing says so + +`.gitignore:60` ignores `vendor/raylib/web/`, so the vendored `raylib.h` exists in the main tree and **never appears +in a worktree checkout**. Every parallel lane that touches bindings is therefore checking against nothing, or +against whatever it can find. The lane that hit this found a copy in `~/.local/share/Trash` and validated it the +right way — `generate-c` rewrote `generated.flan` byte-identically before it changed anything, and the two headers +are md5-identical — but a header in the Trash is not a corpus, and the next lane may be less careful or less lucky. + +The options: + +- **Vendor `raylib.h` as a tracked file.** It is one header. `BUILT.md` records that requiring a header was + rejected so that "a build needs libraylib linkable and not raylib-devel installed" stays true — but tracking the + header in this repository is not the same as requiring one on the machine, since `headers` is still + `?${FLAN_RAYLIB_H}` and still opt-in. This looks like the answer and the old argument may not actually apply. +- **Fail loudly when `FLAN_RAYLIB_H` names a path that is not there.** Already the behaviour for a set-and-wrong + path; what is missing is any signal when the *default* corpus has vanished, which is the worktree case. +- Leave it, and put the warning in the agent briefs instead. Weakest — it depends on whoever writes the brief + remembering. + +### 2. A missing `bindings` line does not stop a build — a judgment call, flagged for review + +The lane split its findings by severity: + +- A **value mismatch or a missing C name** stops an ordinary build, the way `check_structs` does. +- A **coverage or typo finding about the `bindings` file itself** gates `generate-c` only. + +The consequence is the part to decide: a lane that adds a `defenum` to `raylib.flan` and forgets its `bindings` +line gets **no warning from a plain build**, only from `generate-c`. Its reasoning was that failing somebody's +build over a config file, in a message shaped like "your layout is wrong", is the wrong place to stop them. + +Arguable in both directions, and the argument against it is the one this whole feature exists for: an unchecked +enum member is exactly the silent wrongness the header read was built to catch, and "you have to remember to run +`generate-c`" is the same shape as "you have to remember to check the header by eye". Overruled by dropping the +`cmapping` guard in `lib/load.ml`. + ## Decided 2026-09-13: generics by monomorphisation, checked abstractly, with `where` predicates The spike answered it (`SPIKE-GENERICS.md`, on `worktree-agent-afcd2406f3660629b`): **it runs**, the whole feature