basecamp / basecamp/sdk

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

Open
#7 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go Template
Stars
5
Forks
0
Avg merge
20h 47m
Merged PRs (30d)
10

Description

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 `-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 `-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.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with seed/Makefile.tmpl, especially the check and generate-services dependencies around line 407, then read prompts/seed-sdk.md and the constraints in seed/AGENTS.md.tmpl and seed/CONTRIBUTING.md.tmpl. Define how selected language profiles are represented and how conformance behaves, then add coverage proving each bootstrapped generator artifact exists and each generate target does real work.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, kotlin, ruby, swift, typescript
Domain
build-system, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.