From 44526f0bca027444ad529719a71b3a6262a031e1 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Fri, 2 Oct 2026 14:36:41 +0200 Subject: [PATCH] docs: insert Phase 12.2 admin form fields with deferred binding (v0.1.1) --- .planning/ROADMAP.md | 21 +++++++++++++++++++++ .planning/STATE.md | 7 ++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index b4cada2..148c86c 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -654,6 +654,27 @@ Plans: Plans: - [ ] TBD (run /gsd-plan-phase 12.1 to break down) +### Phase 12.2: Admin form fields: date, file upload, relation editing with deferred binding (INSERTED) + +**Goal:** A plugin's admin forms cover the three gaps a downstream project on SummerCMS v0.1 hit: a date/datetime field, a file upload field, and creating, editing and deleting related records inside the parent form (WinterCMS RelationController parity). Uploads and related-record changes on a record that is not saved yet use Winter-like deferred binding: they are held against a session key and committed with the parent's first save, or discarded with it. +**Requirements**: TBD +**Depends on:** Phase 9 (cabana form schema and relation-manager), Phase 12 plan 12-01 (`lagoon/attach` public URLs, webp, image-dimension guard) +**Repos:** summercms.go only (`modules/cabana`, `modules/lagoon/attach`, the admin SPA); framework READMEs and `docs/` updated in the same change +**Release:** ships as tag v0.1.1 +**Ordering:** urgent; independent of Phase 12.1 and Phase 13, and Phase 12.1's relation managers can use it +**Success Criteria** (what must be TRUE): + + 1. `fields.yaml` accepts `type: datepicker` with Winter's `mode` (date, datetime, time) and stores date, timestamp and time columns without a plugin defining its own date types. + 2. `type: fileupload` handles `attachOne` and `attachMany` relations: upload with size and MIME limits from the field config, image preview and thumbnail, remove, and reorder for `attachMany`. It works on both saved and unsaved records. + 3. The relation manager creates, updates and deletes `hasMany` (and `belongsToMany` with pivot) related records in a modal driven by the related model's `fields.yaml`, alongside the existing link and unlink. Every child endpoint is scoped to its parent record, so a child of another parent can be neither read nor changed. + 4. Deferred binding: on an unsaved parent, uploads and related-record changes bind to a session key, are committed in the parent's create transaction, and are discarded with the session. Orphaned deferred bindings and their files are purged. + 5. The new code has unit tests, delivered in the phase's last plan, and the docs checker passes. + +**Plans:** 0 plans + +Plans: +- [ ] TBD (run /gsd-plan-phase 12.2 to break down) + ### Phase 13: Płytarium API — wishlist, notifications, CSV, credentials, public routes **Goal**: The remaining core API surface — wishlist, notifications, CSV import/export, per-user/org credentials, and onboarding/public/invitation routes — is ported with byte-compatible shapes and their own public rate-limit buckets. diff --git a/.planning/STATE.md b/.planning/STATE.md index d1b481e..b3c1b8b 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -5,12 +5,12 @@ current_phase: 12 current_phase_name: Płytarium API — Collections and Albums status: executing stopped_at: Completed 12-03-PLAN.md -last_updated: "2026-10-02T11:18:14.935Z" +last_updated: "2026-10-02T12:36:15.774Z" last_activity: 2026-10-02 last_activity_desc: Phase 12 execution started -state_head: 6f37a3782f59f1d786016197f485c6d8f466e38e +state_head: 66497635906aea588e28ba6d34afc6576423a662 progress: - total_phases: 20 + total_phases: 21 completed_phases: 10 total_plans: 101 completed_plans: 99 @@ -168,6 +168,7 @@ Progress: [██████░░░░] 60% - Phase 11.3 inserted after Phase 11.2: Newsletter plugin and signup on summercms.io (split out of the original 11.2) - Phase 11.3 deferred to the backlog as Phase 999.1 (2026-10-02): the Journal plugin and delivering Płytarium take priority - Phase 12.1 inserted after Phase 12: User plugin admin screens (sm-user-plugin): Users, User Groups, Organisations admin, before Phase 15 cutover +- Phase 12.2 inserted after Phase 12: Admin form fields: date picker, file upload and relation-manager create/update/delete with Winter-like deferred binding (RelationController parity); framework only, ships as tag v0.1.1; blocks a downstream project on v0.1 (URGENT) ### Decisions