v0.x: author settings as one surface¶
Spec 0197, landing in phases. This note grows with them.
Phase 1: the record and its flags¶
version.gois recorded.regeneraterenders the Go directive the manifest holds instead of the toolchain it runs on. An older manifest gains the field on its next regenerate, set to the running toolchain (what thegoline already says), and keeps it from then on. Change it with--go-versionat generation or, untilgtb setlands, by editingversion.goin the manifest.- New flags on
gtb generate project:--telemetry-endpoint,--telemetry-otel-endpoint,--auto-initialise,--skip-config-check,--auxiliary-commands,--config-layers,--signing-require-signature,--signing-require-checksum. Each writes the manifest field the generate reference names. - New manifest fields:
bootstrap.auxiliary_commands(rendersprops.Tool.Bootstrap.AuxiliaryCommands) andsigning.require_checksum(rendersprops.Tool.Signing.RequireChecksum). props.BoolPtr(v bool) *boolin the framework, for the tri-state baselines a generated root sets in a struct literal.- The wizard gains a Telemetry page (with the
telemetryfeature) and a "require a verified checksum" confirm on the signing page.
Phase 2: one sync, run by every writer¶
enable,disable,enable signingandattachrun the same derived-file sync asregenerate(root command, signing files, adapter files, derived fields).gtb enable aialone now yields achat.gothat links the default providers; aregenerate projectafterwards is no longer needed.keychain.gois synced from the manifest. It is written while the manifest'skeychainentry is enabled and removed when it is not, on every sync. A project that dropped the keychain by deleting the file will get the file back on its next regenerate: rungtb disable keychainonce to record the choice.keychainjoins the toggleable features.- A durable override is a manifest field, never a deleted file, stated as the rule in the manifest concept page and the generate reference.
Phase 3: gtb set, unset, get¶
- One setter over the manifest's author settings by dotted path, validated
like the flags, running the derived-file sync. The "edit the manifest and
regenerate" instruction is gone from the docs. Features and templates keep
their own commands and are refused by
set.
Phase 4: emitted is not verified, and gtb leaves the tool block¶
- Exit 3 from
generate projectandregenerate projectwhen the files were written butgo mod tidyorgolangci-lint run --fixfailed; the last line names the step. A script that expected 0 from an offline generation passes--no-verify, which skips the steps and exits 0 with a warning. Exit 2 stays the usage code. - The generated
go.moddropsgitlab.com/phpboyscout/go-tool-base/cli/cmd/gtb,github.com/golangci/golangci-lint/cmd/golangci-lintandgithub.com/vektra/mockery/v3from itstoolblock. Install gtb with the line the README now carries (@<version.gtb>); the justfile and CI already ran golangci-lint and mockery as installed binaries. An existing project loses the lines on its next regenerate, andgo mod tidydrops the indirect requirements they carried, among them the golangci-lint v1 pin (#31) and the viper that made addingchat-geminifail with an ambiguouscloud.google.com/go/compute/metadata.
Phase 5: gtb wizard¶
- The generation wizard runs over an existing project, pre-filled from the
manifest, and applies its answers through the same validation and sync as
gtb set.--dry-runprints the diff. Needs a terminal;gtb setis the scripted way. - The features page listed keychain twice for a short while after phase 2 (keychain joined the toggleable features and was still appended separately); fixed here, with a test.