Repository navigation
Makefile provider gen groups list a target the generator no longer emits #572
Description
Found during #568 step 3, diagnosing why GOOS=linux make build dies with an exec-format error.
The defect
Every provider's grouped generation target lists gen/node_builder.gen_test.go:
$(P)/appnet/action_names.gen.go \
$(P)/appnet/gen/receiver_type.gen_test.go \
$(P)/appnet/gen/action.gen_test.go \
$(P)/appnet/gen/node_builder.gen_test.go \
$(P)/appnet/gen/provider.gen.go \
$(P)/appnet/gen/resource.gen.go &: $(P)/appnet/provider.go $(P)/appnet/resource.go | $(STAR)The generator retired that emission — generate.star:1197: "node_builder_test emission retired with
NodeBuilder (Phase 5)" — so no build can ever produce it. Under GNU Make 4.4.1's grouped-target (&:)
semantics, a missing group member makes the whole group stale, permanently.
The groups are also missing a member in the other direction: the generator does emit
gen/module.gen_test.go for the access=both providers (file, json, platform, regex, template, yaml), and no
group lists it — so make does not know about a real output.
Consequences
- Every
make buildregenerates every provider, every time. Slow, noisy, and it masks real staleness. GOOS=linux make buildandGOOS=windows make buildcannot pass on any host: the regeneration recipes
exec freshly built tools (devlore-inventory,star) that were compiled for the target OS —
fork/exec ...: exec format erroratMakefile:546. Cross-platform build verification is reduced to
make vetunder GOOS, which type-checks but does not link or generate.
Generation itself is deterministic and correct — after two full regeneration cycles on 0a96a5e2 + the step-3
tree, every generated file was byte-identical to develop HEAD (verified by blob SHA against the GitHub tree).
The defect is only the Makefile's member lists.
Fix
Align each group's member list with the generator's actual output set for that provider — drop
node_builder.gen_test.go everywhere, add module.gen_test.go where it is emitted.
Acceptance: make build run twice regenerates nothing on the second run, and GOOS=linux make build
passes on a darwin host.
Activity
refactor(fsroot): delete the unconfined variants (#573)
David-Noble-at-work commentedon Aug 21, 2026
Cross-reference: #598 (make build cross-compiles every supported platform by default, chore under #453) forces this fix — the stale gen groups are the known blocker for any cross-GOOS make build.
David-Noble-at-work commentedon Aug 24, 2026
Fixed in #640 (merged to
developasf2bfff45).gen/node_builder.gen_test.goremoved from all 16 grouped targets, and the comment block above themrewritten to describe what the generator actually emits — with the reason recorded, so the next member
added gets checked against the generator rather than assumed.
Verified, not assumed: a second consecutive
make buildnow runs zero codegen invocations. Beforethe fix, the unreachable member left every group permanently stale under GNU Make 4.4.1's grouped-target
(
&:) semantics, so all of them re-ran on every build.The second half of this issue was already correct. The claim that the groups are "also missing a member
in the other direction" does not hold against the tree: all 19 providers that emit
gen/module.gen_test.goalready list it. Only the
node_builderhalf was live.A separate defect surfaced while verifying this one and is tracked as #639:
GOOS=linux make buildstillfails because
GOOS/GOARCHare ambient and reach the host-tool builds, sogo run ./cmd/devlore-inventorycross-compiles and then tries to execute a Linux binary on the host. It is unrelated to the grouped targets.
Codegen runs every time, and its output must match what is committed (#…