v0.45.0

4 November 2026

A field definition is now a Field everywhere, and the Clockwork addon is trimmed and no longer defines clock().

Added

  • Field::list($entries) builds [name => Field] from a template's field entries, and Field::templateFields() and FieldValue::templateFields() return the sub-fields a field declares.
  • The Clockwork viewer's request filter includes PUT.

Changed

  • TemplateFields::fieldDefs() is now Field::list(), and PageView::fieldDefs() is now PageView::templateFields(). Both return Field objects instead of arrays.
  • App::resolveField() takes a ?Field in place of the [type, label, options, render] array. Pass null for an undeclared key.
  • A field with no label is labelled with its title-cased name on every path (published_at reads Published At). Set label to keep the raw name.
  • The Clockwork addon no longer registers the global clock() helper and uses its instance directly.
  • Clockwork's request log drops the fields Clockwork already shows in its own Request and Session tabs.
  • The Clockwork viewer's logic moved from its template into the controller, and the unused global controller is removed.