- on a string or url field that is not numeric or integer, min and max
compare utf8.RuneCountInString (Laravel's mb_strlen) and answer with
the lagoon::validation min.string / max.string messages
- a min or max argument that is not a whole number is the
unrecognized-rule error, whatever the value
- rule strings without string or url keep their results (pinned by a
test); between is unchanged
- string requires a string value (pointers and named string types
included), url a URL matching Laravel's pattern (urlPattern, shared
with lagoon.ValidateRequest); both skip an empty or blank value
- lagoon::validate.string and .url in the en and pl catalogs, English
fallbacks for a nil translator
- settings saves whose model rules use nullable|string|max:255 or
nullable|url|max:500 no longer fail with an unrecognized-rule error
- planned contents of framework v0.6.1: the two 33-01 seams and the
gate script; the six Phase 32 fixes listed as already released in
v0.5.2
- newest plugin and layer tags with no unreleased commits; versions
read from git tag in 33-14
- release order and an empty executed-steps table
- scripts/check-phase33.sh with the stages self-test, go, plugins,
layers, consumers, docker, admin, docs, marker, additive and compat,
and --all; no argument prints the usage and exits 2
- engine taken from check-phase32.sh (go test -json and vitest
detectors, scratch sibling farm, apisurface additive comparison)
- marker diffs from v0.6.0 and adds sitemap, JSON-LD and the
application names; additive compares against the newest tag not
containing HEAD
- a missing repository fails with "missing <path>"; the self-test
plants an API removal, an interface method, a marker hit, a failing
go test and a missing repository
- pact.FormFieldType gains RequestOptions, called with the application's
database once per form schema request for each type the form uses
- the form schema route merges the answer into a copy of each field's
typeOptions; a fields.yaml key wins, the compiled schema never changes
- an error logs one warning naming the type and serves the fields.yaml
options only
- TestFieldTypeRequestOptions covers every screen, the precedence, the
call count, the error path, unchanged schemas, form extension fields
and the authenticated handler; a runnable example backs the docs
- the typeOptions description, the regenerated OpenAPI document and
schema.d.ts, the field types page and the pact and cabana READMEs
document it
- pact.ContentDescriptor gains Kind and Tools with the ContentKind and
ContentTool constants
- pact.ContentRecord gains PublishedAt, Parents, Authors and TopHeading;
pact.ContentLocale gains Images, Videos and Headings, with the value
types ContentRef, ContentPerson, ContentImage, ContentVideo and
ContentHeading; every field is optional
- TestContentDescriptorFields proves signpost hands them through and
that a type setting none of them describes as before
- the runnable content example, the pact and signpost READMEs and the
menu item types page document the fields
- CR-01, CR-02, CR-03, WR-01, WR-04 and WR-05 fixed, with commits, tags
and the live checks of release 195aa213c546
- WR-02, WR-03, WR-06 and IN-01 to IN-09 deferred, one todo each
A plugin developed inside an application replaces its required plugins
with sibling directories (../user). Checked out on its own, that
directory is missing and plugin.yaml lost the minimum (golem15.user: ""),
so the manifest differed between the two layouts and TestPluginManifest
could not pass in both. Such a module is now fetched at the version
go.mod requires, as a consumer would see it.
- listedModule.fallback marks a local replace whose directory is absent
- fallback modules download separately, so one unfetchable version does
not hold up the others
- TestDeriveMissingReplace over a file:// proxy (offline)
The smoke fixture's acme.blog has v0.1.1 for framework v0.6.0 under a
newest release that needs v0.7.0; plugin:install picks v0.1.1, so the
marketplace now marks it compatible.
The comment-keeping summer.yaml edit refused a flow-style plugins list
(plugins: [{id: a, module: b}]) that plugin:add used to handle with a
full rewrite. The edit now replaces an inline list, over one or several
lines, with a block list of its items plus the new ones and keeps every
other line. A list it cannot edit in place (a tagged one, say) falls
back to the full SaveManifest rewrite with a note that the comments were
not kept. plugin:install gets the same behaviour.