From a126d2170d6c9c8a0465bf54ff66b3dfea12b653 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Fri, 26 Jun 2026 22:25:17 -0600 Subject: [PATCH] =?UTF-8?q?docs(phase-22):=20correct=20cookbook=20=C2=A728?= =?UTF-8?q?b-6=20=E2=80=94=20the=20dedup=5Fpropagate=20registry-skip=20is?= =?UTF-8?q?=20independent=20of=20concurrent=20make=20(R14,=20per=20=C2=A72?= =?UTF-8?q?8c)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/matching-cookbook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/matching-cookbook.md b/docs/matching-cookbook.md index dd3d66cba..2da3335e1 100644 --- a/docs/matching-cookbook.md +++ b/docs/matching-cookbook.md @@ -2014,4 +2014,4 @@ The in-`&&` assignment stays inside the short-circuit (not hoisted) yet lands in 3. **Verify the lift is BYTE-NEUTRAL** before touching the giant (R22): rebuild the binaries whose already-matched fns use those types (the prelude's owner fn, e.g. func_80156848) + 1 overlay + resident → all must stay byte-identical. Typedefs emit no code; only a name collision can bite. 4. **Strip the typedefs (+ any `#include`) from the draft → `tools/recover_giant.py`** (it canonicalizes the engine_core.h-callee externs + block-scopes ALL externs, so the body is self-contained for ×134 with its types coming from the shared header). recover_giant strips only SCALAR typedefs — remove the struct ones yourself first. 5. **match_one caveat:** match_one compiles standalone WITHOUT engine_types.h, so the recovered (typedef-free) draft won't compile there — that's a harness limitation, not a defect. Confirm the MATCH on the ORIGINAL self-contained draft (with its own typedefs); gate the recovered draft with the **whole-binary** `harvest_verify` (which includes engine_types.h via engine_core.h — the real arbiter, G3/P9). Then `dedup_propagate --addr 0x… --source-overlay ov_SC01_077` (BACKGROUND, §28). -6. **Op gotcha (Phase 22 T2, byte-proven):** do NOT run a second `make`-invoking job (`make check-all`, `make report`) CONCURRENTLY with `dedup_propagate` — parallel make wrote a partial `.o` (`file format not recognized` on ov_SC04_016) AND the propagation's final byte-gate+registry step was lost (source propagated, but `config/dedup.us.yaml` group unwritten → progress.py under-counts). Serialize all make jobs; re-running `dedup_propagate` is idempotent (detects the existing macro/instantiations, just rebuilds+registers). +6. **Op gotcha (Phase 22 T2, byte-proven):** do NOT run a second `make`-invoking job (`make check-all`, `make report`) CONCURRENTLY with `dedup_propagate` — parallel make corrupted a partial `.o` (`file format not recognized` on ov_SC04_016, caught by check-all + cleared by a clean rebuild). Serialize all make jobs. **NOTE (corrected — §28c):** the propagation's registry-skip (source propagated but `config/dedup.us.yaml` group unwritten) is a SEPARATE recurring issue **independent of concurrency** (it recurred with NO concurrent make on func_80163C2C) — see §28c for the byte-proven recovery; re-running `dedup_propagate` does NOT re-register an already-propagated fn.