[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"journal-post-summercms-0-1-3":3},{"author":4,"categories":8,"content":9,"content_html":10,"created_at":11,"excerpt":12,"featured_image_url":9,"featured_images":13,"id":14,"is_pinned":15,"metadata":9,"next_post":16,"previous_post":20,"published":24,"published_at":25,"reading_time":17,"related_posts":26,"slug":27,"sources":9,"tags":28,"title":29,"translations":9,"updated_at":11},{"first_name":5,"id":6,"last_name":5,"login":7},"",1,"jakubzych@gmail.com",[],null,"\u003Ch2>Highlights\u003C\u002Fh2>\n\u003Cp>The \u003Ccode>cabana\u003C\u002Fcode> admin learns declared actions: bulk actions on lists and record actions with applicability rules, plus a read-only preview screen. Forms gain several seams that plugins like the user plugin rely on.\u003C\u002Fp>\n\u003Ch2>Added\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Declared bulk actions on admin lists and record actions with a rule that decides where they apply.\u003C\u002Fli>\n\u003Cli>A read-only preview screen with a status hint and the record's actions.\u003C\u002Fli>\n\u003Cli>List row states computed by one controller call per page.\u003C\u002Fli>\n\u003Cli>\u003Ccode>permissioneditor\u003C\u002Fcode> form field in radio or checkbox mode.\u003C\u002Fli>\n\u003Cli>Password fields, form-only fields, and validation rules per operation and per preset.\u003C\u002Fli>\n\u003Cli>Writable foreign keys, locked relation options and invisible list columns.\u003C\u002Fli>\n\u003Cli>\u003Ccode>cabana.ForbiddenError\u003C\u002Fcode> answers a refused write with 403.\u003C\u002Fli>\n\u003Cli>\u003Ccode>surf\u003C\u002Fcode> can register overlapping routes that differ by constraint; a request falls through to the next one when a constraint fails.\u003C\u002Fli>\n\u003Cli>A \u003Ccode>prohibited\u003C\u002Fcode> validation rule.\u003C\u002Fli>\n\u003Cli>\u003Ccode>sunscreen\u003C\u002Fcode>, a redacting \u003Ccode>slog\u003C\u002Fcode> handler installed by every generated \u003Ccode>main\u003C\u002Fcode>, keeps credentials out of logs.\u003C\u002Fli>\n\u003Cli>\u003Ccode>fetchguard\u003C\u002Fcode> client supports PUT, multipart and bearer requests plus a trusted mode for operator-configured endpoints; \u003Ccode>fetchguard.IsPrivateAddr\u003C\u002Fcode> exposes its address classification.\u003C\u002Fli>\n\u003Cli>\u003Ccode>conga.Describe\u003C\u002Fcode> reports a registered job's kind, queue, attempts and timeout, and jobs can be queued before their worker ships.\u003C\u002Fli>\n\u003Cli>\u003Ccode>beachcomber\u003C\u002Fcode> gains \u003Ccode>DropIndex\u003C\u002Fcode> and \u003Ccode>EnsureIndex\u003C\u002Fcode> for reindex tooling.\u003C\u002Fli>\n\u003Cli>\u003Ccode>summer parity:upstream\u003C\u002Fcode> records vendor API calls for offline replay through \u003Ccode>tide\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Fixed\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ccode>surf\u003C\u002Fcode> answers OPTIONS on CORS paths with headers matching Laravel's HandleCors.\u003C\u002Fli>\n\u003C\u002Ful>\n","2026-10-17T21:26:24+00:00","Declared bulk and record actions, a read-only preview screen, list row states, a permission editor field and new form seams in the cabana admin.",[],3,false,{"id":17,"slug":18,"title":19},2,"summercms-0-1-2","SummerCMS 0.1.2",{"id":21,"slug":22,"title":23},4,"summercms-0-1-4","SummerCMS 0.1.4",true,"2026-10-05T10:41:01+00:00",[],"summercms-0-1-3",[],"SummerCMS 0.1.3"]