Five days of bug fixes on the release candidate. Nothing here changes how you write an application; most of it is a thing that said it worked and did not.
One correction to rc-1 first. That post said three breaking changes were the whole list. It is four. A :wagoe/* key in :active that nothing assembles now fails the boot — it lands here, rather than in 1.0.0, so you meet it before the tag rather than after. That is the only addition, and the list is closed again.
Breaking: a config key that reaches nothing fails the boot
If :active names a :wagoe/* key that no module assembles, the boot stops and tells you which key. It used to start, minus whatever you thought you had switched on.
Give a module :enabled? true to turn it on. Name your own settings blocks in :wagoe/config-keys — that is what the :wagoe/ namespace in :active is reserved for now.
:wagoe/dashboard is the case that found this. It is assembled by devtools, in the :dev profile only; in a config it started nothing and said nothing. In any other profile it now fails the boot rather than leaving you to wonder why /dev is a 404.
Fixed: the installer stops asking for a sudo password
curl -fsSL https://get.wagoe.org | bash has no terminal to type a password into, so a sudo prompt was a dead end. Three separate paths reached one.
A machine that already had bbin took the upgrade branch every time, because the check it had to satisfy could never pass — bbin has no per-command help, so no flag name ever matched. The upgrade then moved a script into /usr/local/bin as root. bbin now installs pinned into ~/.local/bin, needs no root, and an installed one is left alone.
It also put the wrong directory on your PATH. It assumed ~/.babashka/bbin/bin, which bbin 0.2.x deprecated; it asks bbin bin now.
And with JAVA_TOOL_OPTIONS or _JAVA_OPTIONS set, every JVM prints Picked up … before its banner. The installer read the first line only, found no version there, and concluded you had no Java — then reinstalled a JDK you already had, which on macOS is another sudo prompt. It reads the whole output.
Fixed: admin updates that answered 200 and wrote nothing
Four separate ways an admin write went wrong while reporting success.
A PUT with only some of the fields validated the partial form, failed, and returned 200 with nothing written. Updates now validate the merged record, read JSON bodies, and answer 422 with the reason when they reject.
A field could not be cleared — you emptied it, saved, and the old value was still there. An emptied field is written as NULL; emptying a required one is rejected rather than ignored.
A PUT to an id that does not exist answered 200. It answers 404; it used to validate the form and write zero rows.
Fixed: your module’s routes, not admin’s
Admin’s /:entity swallowed every sibling module’s /web/admin route — whichever module contributed first won. Web and API routes are ordered by specificity now, so a literal path beats another module’s wildcard, whatever order the modules are in.
Fixed: --field price:decimal was a float
Scaffolding money as a DOUBLE is a rounding bug waiting for a busy month. decimal now generates DECIMAL(19,4) and a decimal? predicate. A column you already scaffolded keeps DOUBLE until you ALTER it — the generator does not rewrite your schema.
Two more scaffolder fixes in the same area. A kebab-case module name was written into a directory Clojure cannot load; bb scaffold generate, field, endpoint, adapter and integrate all use invoice_line_item/ now. And --field status:enum generated [:enum], which validates nothing — name the values: --field status:enum:values=draft,sent,paid, or --enum-values on bb scaffold field.
Fixed: bb setup writes a config you can log into
The config it generated could not be read and could not authenticate. It writes :secure-cookies? false and the admin/users.edn that its own #include names.
That cookie flag was ignored in any case — :secure-cookies? false did not drop the Secure attribute, so a browser on plain HTTP discarded the auth cookie and curl against a dev server lost its session on every request. It works now.
When a password was rejected, the error said the field was missing. Validation errors print the rule they broke; only absent keys are listed as missing. And a password policy you switched off stayed on in half the application — :require-numbers? and friends reached one validator and not the other. One policy, applied everywhere.
Fixed: wagoe version printed a version from four releases ago
It said 1.0.0-beta-5 long after that stopped being true. It reads :cli-version from the shipped catalogue, and bb check:versions fails the build if that drifts again.
Seventeen documented versions were stale for the same reason — the check only looked at some of the places a version is written. It reads Leiningen coordinates, dependency-table rows and Version: headers too.
Added: bb test:services starts what the tests need
The Redis and MySQL adapter sweeps need Redis and MySQL running. bb test:services starts them, and bb test:all and bb doctor:env name a missing one before the run instead of failing somewhere in the middle of it.
Changed: a release publishes whole, or not at all
A release could stop half-published, leaving some artifacts on Clojars at the new version and some not. Each artifact installs to ~/.m2 before Clojars now, so the run no longer sleeps 30 seconds per library hoping indexing catches up.
Related: clojure -T:build needed the network right after a version bump, because even clean resolved coordinates that were not published yet. bb deploy --install-local primes ~/.m2 first.
Version alignment
All 31 artifacts bumped to v1.0.0-rc-2 to maintain lockstep versioning.
Upgrade
Re-run the installer to pick up the latest release:
curl -fsSL https://get.wagoe.org | bash
Coming from rc-1, two things to check:
-
Look at
:active. Any:wagoe/*key there that no module assembles now fails the boot. Module switches belong to the module (:enabled? true); your own settings blocks go in:wagoe/config-keys. -
Check your decimal columns. A
price:decimalfield scaffolded before this release is still aDOUBLE. Write theALTERyourself if the column holds money.
Coming from a beta, work through the rc-1 upgrade list first — it is longer, and the breaking changes are in it.