Skip to content

Executable coverage for bootstrapped generate targets, and a profile contract for make check #7

Description

@jeremy

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions