- READMEs and service pages name the new pact and wristband identifiers
- an empty MCP scope list resolves to the five fixed names; OIDC discovery is unchanged
- pact gains MemberTokenScopeCatalog, MCPAdvertisedScopes and MCPCall
- an empty MCP ScopesSupported resolves to the five fixed names including backend
- pier copies advertised scopes and sets MCPCall beside WithDispatch
Hide removed an owner field from the schema, show and save, but a hidden
relation-manager field's relation routes (panel, link, unlink, child CRUD,
deferred commit) and a hidden partial field's partial stayed reachable.
dropHiddenFields now drops the relation and the partial path too; a partial
the list or preview header or another field still uses keeps rendering.
Admin saves copied the raw context locale into RecordSaved.Locale, which
could be a whole Accept-Language header, while reorder reported a
normalised code. Saves, child writes and reorder now report the primary tag
of the request locale. The pact doc says what Locale is and that per-locale
work keys on RecordChange.Locale, since an admin save writes the row in the
default content locale.
hasMany link and unlink rewrote a child's foreign key (and ClearOnChange
columns) without a RecordSaved, the deferred commit attached session-created
children silently, and unlinking a session-created child deleted it without
the RecordDeleted that should follow its RecordSaved{Created}. These paths
now fire the child's events after the commit; the CRUD service carries the
registry so the deferred commit names the child's controller.
WidgetField assigned its element after append(), so an action the element
dispatched from connectedCallback (inside append) found no target and was
dropped without a result or an error state; widgets that load on connect
never started. The element is now the action target before it is connected.
Rebuilt the embedded admin dist.
The plugin field-type upload route resolved a form extension's field without
checking the extension's Permissions and Visible, so an administrator who
cannot see the extension could still run its Upload. The route now answers
404 for them, like the extension's widget actions and partials.
A required: true field in a form extension became a rule on the owner's
model, where its value never exists, so every save of the host form failed,
also for administrators who cannot see the extension. mergedRules now skips
extension fields; liftExtensionValues checks required on the submitted value
for visible extensions only (create: must be sent and not blank; update:
only when sent).
Every task of plans 32-01 to 32-06 with its automated command and the
latest status, Wave 0 checked, nyquist_compliant and wave_0_complete
true; status stays draft until the full gate is green with the demo
mounted. Records the host-only TestNoTideJournalFixtures exception.
- form extensions: placement across three plugins, required plugins' tabs
and fields, Hide with neighbours and whole tabs, spans, grouping only of
extended forms; every remaining boot error with plugin, controller and
offending name
- record events: the pure snapshot/diff (create, update, pointers, times as
instants, timestamps and key omitted, per-locale translations) and the
value helpers
- descriptors: MatchPattern edge cases, MatchPath ordering, types without
Content, duplicate Model/Controller across plugins
- scripts/apisurface: standard-library printer of a package's exported API
(signatures without parameter names, struct fields and tags, interface
method sets, constants with their group index), canonical across
formatting and comment edits
- additive: compares the API of pact, cabana, signpost and every other
changed package with the newest tag; refuses removed or changed lines and
methods added to existing interfaces (D-106)
- compat: sitemap at HEAD, Journal and the demo at their pre-phase commits
(demo with its pinned submodules) build and pass short tests; every other
sibling that requires the framework builds, each through a scratch go.work
in a scratch sibling layout; read-only snapshots for other users' repos
- self-test plants 12 API change cases; PHASE32_SKIP_TESTS for host-only
test failures
- proven in a scratch worktree of sm-demo-app 8fcdbdd: TestBootAllPlugins,
TestSEOTabMounted and TestSEOToolsCatalog pass
- summer.yaml, config/golem15.seo.yaml, the nginx /robots.txt location,
DEPLOY.md, boot_test.go, plugins.gen.go and the two SEO tests; plan
32-06 applies it after the plugin tag
- stages self-test, go, plugins, consumers, docker, admin, docs and
marker; --all with the docker NOT RUN rule (PHASE32_REQUIRE_DOCKER)
- consumers: NOT MOUNTED golem15.seo refuses unless
PHASE32_ALLOW_UNMOUNTED=1, and the Journal route-drift check between
the demo's menu_items.yaml and its Nuxt routes
- marker (D-90): lines added since PHASE32_BASE under modules/ and docs/
name neither SEO nor a consuming application; Journal imports no SEO
or sitemap plugin; the framework does not require grobotstxt
- github.com/jimsmart/grobotstxt v1.0.3 for the robots.txt tester and
the noindex-blocked warning in sm-seo-plugin (D-99), plugin-only
- STACK.md Supporting Libraries row