Two items split out of #5, which reconciled the Makefile target vocabulary across the seed's authoring sources.
1. Nothing verifies that a bootstrapped generate target actually runs
seed/Makefile.tmpl now has <prefix>-generate-services for all five languages, with swift-generate-services an alias for swift-generate (both expand to $(MAKE) -C swift generate). That satisfies MAKEFILE-CONVENTION.md.
What is missing is coverage, and it is not Swift-specific. The seed ships no generator artifact for any language:
| Recipe |
Artifact it invokes |
In the seed? |
go-generate-services |
go/cmd/generate-services/ |
absent |
rb-generate-services |
ruby/scripts/generate-services.rb |
absent |
kt-generate-services |
kotlin/generator/ (gradle) |
absent |
swift-generate |
swift/Makefile generate target |
absent |
All five are produced by the bootstrap scaffolding step, so on a pristine seed make go-generate-services and make swift-generate fail identically (Error 2). Nothing catches a scaffolding step that silently fails to produce its generator, and nothing catches a conventional target regressing to a no-op.
Wanted: a check that each <prefix>-generate-services target actually runs after bootstrap — asserting the generator artifact exists and the target does work, rather than exiting 0 vacuously. That is what should have gated the Swift alias, and it applies to the other four equally.
Swift's one real asymmetry, worth keeping in mind but not the driver here: it is the only generation target that delegates to a sub-Makefile instead of running the generator inline, so no root-level recipe describes what has to exist.
2. make check has no profile contract
seed/Makefile.tmpl:407 makes check depend on go-check ts-check rb-check swift-check kt-check conformance unconditionally, while prompts/seed-sdk.md offers a single-language profile. A narrower SDK therefore fails the gate on a language it never initialized.
The same applies to the aggregate generate-services, which runs all five generators unconditionally.
Wanted: a profile contract — how the selected language set is expressed, whether the Makefile is trimmed at instantiation or reads a variable, and how conformance behaves on a partial profile. #5 documents the constraint in seed/AGENTS.md.tmpl and seed/CONTRIBUTING.md.tmpl in the meantime.
Two items split out of #5, which reconciled the Makefile target vocabulary across the seed's authoring sources.
1. Nothing verifies that a bootstrapped generate target actually runs
seed/Makefile.tmplnow has<prefix>-generate-servicesfor all five languages, withswift-generate-servicesan alias forswift-generate(both expand to$(MAKE) -C swift generate). That satisfiesMAKEFILE-CONVENTION.md.What is missing is coverage, and it is not Swift-specific. The seed ships no generator artifact for any language:
go-generate-servicesgo/cmd/generate-services/rb-generate-servicesruby/scripts/generate-services.rbkt-generate-serviceskotlin/generator/(gradle)swift-generateswift/MakefilegeneratetargetAll five are produced by the bootstrap scaffolding step, so on a pristine seed
make go-generate-servicesandmake swift-generatefail identically (Error 2). Nothing catches a scaffolding step that silently fails to produce its generator, and nothing catches a conventional target regressing to a no-op.Wanted: a check that each
<prefix>-generate-servicestarget actually runs after bootstrap — asserting the generator artifact exists and the target does work, rather than exiting 0 vacuously. That is what should have gated the Swift alias, and it applies to the other four equally.Swift's one real asymmetry, worth keeping in mind but not the driver here: it is the only generation target that delegates to a sub-Makefile instead of running the generator inline, so no root-level recipe describes what has to exist.
2.
make checkhas no profile contractseed/Makefile.tmpl:407makescheckdepend ongo-check ts-check rb-check swift-check kt-check conformanceunconditionally, whileprompts/seed-sdk.mdoffers a single-language profile. A narrower SDK therefore fails the gate on a language it never initialized.The same applies to the aggregate
generate-services, which runs all five generators unconditionally.Wanted: a profile contract — how the selected language set is expressed, whether the Makefile is trimmed at instantiation or reads a variable, and how
conformancebehaves on a partial profile. #5 documents the constraint inseed/AGENTS.md.tmplandseed/CONTRIBUTING.md.tmplin the meantime.