Commit Graph

989 Commits

Author SHA1 Message Date
Jakub Zych
40a2a6584c docs(quick-261007-qgx): record heading from translatable fields v0.1.12 2026-10-07 19:07:34 +02:00
Jakub Zych
b6b194e5eb fix(boardwalk): rebuild embedded admin shell 2026-10-07 19:07:25 +02:00
Jakub Zych
a714bb4629 fix(admin): name records by translatable (mltext) fields
The record heading, breadcrumb crumb and document title took the first
plain text field only, so records named by an mltext field fell back to
the generic update message. A shared recordDisplayName helper now takes
the first text or ML field and reads its default locale, then the first
non-empty one.
2026-10-07 19:05:47 +02:00
Jakub Zych
7554241e9d docs(planning): log to-many list column fix v0.1.11 2026-10-07 18:43:18 +02:00
Jakub Zych
fa25b4e000 fix(cabana): show to-many relation list columns joined with commas 2026-10-07 18:43:17 +02:00
Jakub Zych
b4cc6f88e4 docs: capture todo - Translate Messages as a Nuxt i18n JSON editor v0.1.10 2026-10-07 18:32:01 +02:00
Jakub Zych
52eef9b43b docs(quick-261007-p4y): toggle sizing and settings controller links 2026-10-07 18:28:54 +02:00
Jakub Zych
0b09acdb0c feat(admin): open controller-link settings entries from the settings index
A settings entry with a controller opens that controller's route from
its card (settingsPath); singleton cards still open /settings/<code>.
On a linked controller with no navigation entry of its own the rail
marks Settings current, the breadcrumbs read Settings > entry label
(plus the record title on record and create routes) and the page title
uses the entry label. The settings docs describe the admin behaviour;
the embedded admin shell is rebuilt.
2026-10-07 18:24:54 +02:00
Jakub Zych
4a9b0896b1 feat(cabana): settings entries that link to an admin controller
pact.SettingsItem gains an additive Controller field, the equivalent of a
WinterCMS registerSettings 'url' => Backend::url(...) entry. A link entry
declares no Model, Form or NewModel and needs no AdminFS; start-up fails
when it combines Controller with a singleton form or a model, or names an
unregistered controller. Settings codes stay one namespace.

GET /settings lists a link entry with its controller only when the
principal passes the item's permissions and may open the controller.
Registry.Setting never returns a link entry, so the singleton settings
endpoints answer 404 for its code. SettingsEntry carries controller,
empty for singletons; the OpenAPI document, generated SPA types and
settings fixture follow, and the pact and cabana READMEs and the
settings docs describe the link.
2026-10-07 18:22:01 +02:00
Jakub Zych
b040ee3a74 fix(admin): size the switch toggle in pixels at the 14px root
The admin sets the html font size to 14px, so the rem utilities w-11 and
size-5 shrank the track to 38.5px and the knob to 17.5px against the
fixed 26px height and 18px travel. Use w-[44px] and size-[20px] so the
knob sits in a symmetric 3px inset at both ends. Rebuild the embedded
admin shell.
2026-10-07 18:15:41 +02:00
Jakub Zych
a586357a34 fix(boardwalk): rebuild embedded admin shell v0.1.9 2026-10-07 10:39:22 +02:00
Jakub Zych
5707f97089 fix(admin): add favicon and page-aware titles 2026-10-07 10:39:22 +02:00
Jakub Zych
9b3e630b6b fix(admin): fit long plugin labels in rail 2026-10-07 10:39:22 +02:00
Jakub Zych
efcef5d501 docs(planning): record embedded admin release gate 2026-10-07 10:39:22 +02:00
Jakub Zych
f15b38e2ff fix(boardwalk): rebuild embedded admin navigation v0.1.8 2026-10-07 01:02:11 +02:00
Jakub Zych
840af3e922 fix: give long plugin labels more room v0.1.7 2026-10-07 00:07:49 +02:00
Jakub Zych
6d2e3ba8bb docs(planning): log default icon quick fix 2026-10-07 00:07:49 +02:00
Jakub Zych
4a94380b5f fix: use sun as default admin icon 2026-10-06 23:58:44 +02:00
Jakub Zych
9fa714ff17 Add temp to .gitignore 2026-10-06 22:32:36 +02:00
Jakub Zych
4abac02d2d docs(planning): log planning cleanup 2026-10-06 22:31:49 +02:00
Jakub Zych
c05ad09dc2 docs(planning): commit accumulated workflow artifacts 2026-10-06 22:31:37 +02:00
Jakub Zych
fdee6b626e docs(quick-261006-tnp): add mltextarea field type v0.1.6 2026-10-06 21:38:08 +02:00
Jakub Zych
aa3a7c2e90 docs(cabana): document mltextarea field type
- forms.md: field-types row, ML section and example, lift paragraph,
  preset refusal
- admin-controllers.md and the cabana README name mltextarea
2026-10-06 21:37:08 +02:00
Jakub Zych
a913eec50f feat(admin): render mltextarea fields per locale
- MLField.vue is the one locale-switching wrapper; MLTextField,
  MLMarkdownField and the new MLTextareaField are shells around it
- isMLFieldType replaces the inline ML type-name checks in formState,
  FormView and RelationChildModal
- register mltextarea as a group-labelled control; rebuild dist
2026-10-06 21:36:04 +02:00
Jakub Zych
3596df4ff5 feat(cabana): add mltextarea field type
- mltextarea compiles (with size), binds as a writable scalar and goes
  through the mltext lift, translation write and hydrate paths
- preset on or from an mltextarea field stays refused
- tests: compile, Postgres round trip over a nullable host column with
  multi-line text, invalid locale maps, preset refusals
2026-10-06 21:30:56 +02:00
Jakub Zych
673c6ca82c docs(quick-261006-t5r): preset on mltext fields 2026-10-06 21:21:15 +02:00
Jakub Zych
5932172148 docs(cabana): document preset on mltext fields
- schema_types.go and the form-schema swag description name text or mltext
- regenerated admin/openapi/admin.json and admin/src/api/schema.d.ts
- README and docs/backend/forms.md describe the per-locale rules
2026-10-06 21:20:25 +02:00
Jakub Zych
b5d850662c feat(admin): follow presets on mltext fields per locale
- formState: changedLocales and presetUpdates hold the preset-follow rules
  for text and mltext pairs
- FormView applies presetUpdates on create, tracks per-locale hand edits of
  ML fields and follows the active ML locale
- rebuilt modules/boardwalk/dist
2026-10-06 21:18:09 +02:00
Jakub Zych
7afad732c7 feat(cabana): accept preset on mltext fields
- compilePresetKey admits a text or mltext target
- checkPresets admits a text or mltext source
- TestPresetML pins every text/mltext pairing and the refusals
2026-10-06 21:09:48 +02:00
Jakub Zych
7e2b1a909b docs(quick-261006-sne): markdown preview via sanitized RenderMarkdown 2026-10-06 20:59:43 +02:00
Jakub Zych
27711b7c21 chore(scripts): allow the sanitized markdown preview binding in raw-HTML gates
- check-phase10, 12.1, 12.2 and 14.2.1 drop only the exact
  MarkdownField.vue line binding sanitizedHtml (server-rendered by
  cabana.RenderMarkdown); every other raw-HTML sink is still refused
2026-10-06 20:58:45 +02:00
Jakub Zych
a0116dfbb9 fix(admin): render markdown preview from server-sanitized HTML
- MarkdownField posts the source to POST /markdown/preview when Preview
  opens and again 300 ms after a change while open; stale answers dropped
- the pane binds only data.html of a 2xx answer; a refusal is a text notice
- mlmarkdown previews the active locale and follows a locale switch
- .summer-markdown style kit restores headings, lists, code and tables
- vitest coverage, forms.md and rebuilt modules/boardwalk/dist
2026-10-06 20:57:51 +02:00
Jakub Zych
b492e79f2b feat(cabana): add markdown preview admin route
- POST {prefix}/api/v1/markdown/preview renders {markdown} through
  cabana.RenderMarkdown in the backend-guarded group behind requireAjax
- refused output is a 422 validation_failed on markdown with a fixed message
- swag annotation, regenerated admin.json and schema.d.ts
- route inventories, CSRF walk (26) and OpenAPI conformance learn the route
- README and docs/backend/forms.md document the route
2026-10-06 20:53:07 +02:00
Jakub Zych
0ff928d6cf docs(quick-261006-seq): fix nullable pointer scalars in cabana ML fields 2026-10-06 20:37:37 +02:00
Jakub Zych
4f7e69fd2b test(cabana): cover pointer scalars in ML host hydration
- table-driven hostScalarString cases for nil and live pointers to string, ints, uint, float, bool, []byte, named string and double pointers
- DB-free hydrateMLRecord cases for nil, empty and filled *string hosts
2026-10-06 20:36:59 +02:00
Jakub Zych
90b87d6363 fix(cabana): dereference nullable pointer scalars in ML host hydration
- hostScalarString walks pointers via reflect; nil at any depth is ""
- string kinds return raw text, byte slices decode, other kinds format the dereferenced value
- Postgres round-trip regression for an mltext field on a *string column
2026-10-06 20:35:10 +02:00
Jakub Zych
8e22e5f25b docs(quick-261006-s0v): remove ML copy-from locale UI 2026-10-06 20:13:20 +02:00
Jakub Zych
2f03128a58 fix(admin): drop ML copy-from locale chrome (quick-261006-s0v)
Copy overwrote the active locale with the other locale's often-empty string, so the editor went blank. Keep a single synchronized locale picker.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 20:12:47 +02:00
Jakub Zych
ba4427360b test(15): persist human verification items as UAT 2026-10-06 19:30:42 +02:00
Jakub Zych
b409f2ceb0 docs(15): add phase verification report 2026-10-06 19:30:41 +02:00
Jakub Zych
570be0a493 docs(15): record code review disposition 2026-10-06 19:29:25 +02:00
Jakub Zych
7c4fca92ec docs(15): add code review report 2026-10-06 19:28:21 +02:00
Jakub Zych
b697a677e6 docs(15-04): complete journal tests, gate, and ASVS review plan
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 19:23:19 +02:00
Jakub Zych
7307b36baa test(15-04): add fail-closed Phase 15 gate and ASVS L1 review
scripts/check-phase15.sh --all refuses skip/no-tests/race/dirty PHP pin; the review closes T-15-01..15 and T-15-SC with executed TestNames.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 19:22:19 +02:00
Jakub Zych
05b77b7818 docs(15-03): summarize journal public API, writes, media, and Typesense gate
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 19:06:12 +02:00
Jakub Zych
db6243c8c2 docs(15-02): record journal admin plan progress in STATE and ROADMAP
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 18:49:33 +02:00
Jakub Zych
685837a3c8 docs(15-02): complete journal admin YAML and import/export plan
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 18:49:08 +02:00
Jakub Zych
8d7979f87e docs(15-01): record journal plan progress in STATE and ROADMAP
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 18:30:56 +02:00
Jakub Zych
90b946db40 docs(15-01): complete journal plugin clone and schema plan
Tasks completed: 3/3
- Clone plugin, translatable Post tracer, three-plugin host boot
- Categories, tags, pivots, settings, author slug
- en/pl phrasebooks, README, host CORS

SUMMARY: .planning/phases/15-journal-plugin/15-01-SUMMARY.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 18:30:20 +02:00
Jakub Zych
a28bb1e4ec docs(15): create phase plan 2026-10-06 18:02:17 +02:00