Tags give the ability to mark specific points in history as being important
-
-
-
v1.2.23
0f876044 · ·servicepack v1.2.23 — docs match the scaffolding scripts again The generated stub panics with a TODO rather than waiting on ctx.Done(); the registration script is under scripts/make/servicepack/; example-nested/http and example-nested/grpc were missing from the example list; and coverage excludes the whole services tree, not just the examples. No code changed.
-
v1.2.22
7f8586a3 · ·servicepack v1.2.22 — slogging v1.7.0 The framework code is untouched: it uses the blank import and never names a handler type. The scaffold's custom-handler example is what changed — slogconf.AddHandler became slogconf.AddSink, in the README and in cmd/init.go's comment. That is the part that mattered. Examples in a scaffold are copied into every generated project, so leaving the removed call would compile here and break each new project downstream. Migrating a generated project: AddHandler -> AddSink, or SetOutput if you meant to replace stdout/stderr rather than add alongside it.
-
v1.2.21
0e90dbcc · ·servicepack v1.2.21 — follow slog-configurator to slogging The logging dependency moved to github.com/psyb0t/slogging/slogconf. Exported names are unchanged, so nothing about logging behaves differently. The scaffold's docs move with it -- the README custom-handler example, cmd/init.go's comment, the dependency list and the .agents/ skill -- since a generated project copies those.
-
v1.2.20
3fc17021 · ·servicepack v1.2.20 — two core concurrency bugs App.Run's deferred close(errCh)/wg.Wait/Stop ran BACKWARDS under LIFO, closing the error channel while its producer was still live: a stop signal racing a service error panicked the process with 'send on closed channel' mid-shutdown. handleServiceError blocked on a capacity-1 channel drained exactly once, so three or more simultaneous failures parked forever and Run's wg.Wait never returned — a hang instead of the reported error. Both ship with regression tests proven by reintroducing the old code. Also: make build built nothing (a live build: override shadowed the real target, breaking the quick start); make servicepack-update could execute commands out of .servicepackupdateignore via eval (local vector — that file is sync-excluded); base images are digest-pinned everywhere including build.sh; the image build now injects the app name; script diagnostics go to stderr.
-
v1.2.19
964fb2af · ·servicepack v1.2.19 — build-context and ignore-file hygiene No code change. .dockerignore was a single line while every Dockerfile does `COPY . .`, and the dev Dockerfiles END at that COPY -- so the local release script git-update.sh was shipping inside the dev images. The file now covers git/CI metadata, root and docs/ documentation, env files, local tooling, build output, coverage, logs, editor state, backups, research scratch and .agents. Kept on purpose, with the reasoning written into the file: vendor/ (-mod=vendor), *_test.go (the dev image runs make test), and nested markdown, since a package may go:embed markdown as a resource. Only root-level and docs/ markdown is dropped. Also fixes .research_files never having been gitignored -- the entry was missing its leading dot. Neither file propagates to existing projects; copy the entries by hand.
-
v1.2.18
4783469e · ·servicepack v1.2.18 — the update rewrites only what it delivered No Go code change. The update rewrites servicepack's import path to yours after syncing. That rewrite was a `find` over the whole working tree, and find does not honour .gitignore -- so it edited *.go and *.mod inside scratch dirs and nested clones, invisibly, because the damage was all ignored. One project saw 62,026 files visited instead of ~50, and an unrelated servicepack checkout under the repo had its imports rewritten. It is now scoped to rsync's own transfer manifest: the exact set the sync delivered, after every exclude and .servicepackupdateignore entry. The companion *.mod walk is gone -- go.mod is handled directly, by the upgrade-only dependency merge, and by `make dep`. A missing manifest now aborts rather than silently skipping, and a post-rewrite scan warns if anything the repo actually owns still references the framework path. Both scripts run from the freshly downloaded framework, so this lands on the very next `make servicepack-update` -- no intermediate release needed.
-
v1.2.17
3277ee37 · ·servicepack v1.2.17 — the framework's own furniture is opt-out by default No code change. The update rsyncs the framework tree over the downstream's, so a file the framework ships and the downstream lacks is ADDED. Fine for a baseline you diverge from; wrong for the files that publish, fund and document servicepack itself. mirror-and-archive.yml is the sharp one: it force-pushes the repo to public GitLab and Codeberg and archives it. servicepack is public, a downstream need not be, and a private project inheriting it would publish itself on the next tag. Ignored by default now: mirror-and-archive.yml, issue-pull.yml, pipeline.yml, .github/FUNDING.yml, .agents, .gitleaks.toml, .dockerignore. .servicepackupdateignore is excluded from the sync, so an EXISTING project does not receive these automatically -- copy the lines across by hand. The README tabulates them.
-
v1.2.16
c6c23267 · ·servicepack v1.2.16 — service-manager tests stop synchronizing on sleep Test files only; no framework behaviour changed. TestServiceManager_Stop and TestServiceManager_Run each used a time.Sleep in place of the condition they actually depended on, and both were load-bearing -- zeroing either fails the test. Under load they failed for reasons unrelated to the code under test, surfacing as an unexplained flake in a consumer's CI. Both now wait on the real condition. Consumers inherit the fix on their next servicepack-update.
-
-
-
-
-
-
-
-
-
-