diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 72065ee..d3f1f94 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -999,11 +999,11 @@ Plans: **Goal:** Plugins can register their own admin form field types (todo: cabana-richeditor-field-type), and the Journal plugin ships a first-class Blog Editor formwidget for post content — beyond the current markdown field or a plain rich editor — that edits imported HTML posts losslessly. **Requirements**: TBD **Depends on:** Phase 16.1 -**Plans:** 6 plans +**Plans:** 1/6 plans executed Plans: **Wave 1** -- [ ] 16.2-01-PLAN.md — Framework (summercms.go): pact field-type API (human API checkpoint), cabana registry, boot option checks, Decode/Load/list in the save transaction, Decode notices as meta.notices (D-10 strip report), untouched skip, FieldWritesFromContext, field-types and field upload routes, OpenAPI and TS types, SPA PluginField/MLPluginField, global loader and notice display, dist, READMEs and docs +- [x] 16.2-01-PLAN.md — Framework (summercms.go): pact field-type API (human API checkpoint), cabana registry, boot option checks, Decode/Load/list in the save transaction, Decode notices as meta.notices (D-10 strip report), untouched skip, FieldWritesFromContext, field-types and field upload routes, OpenAPI and TS types, SPA PluginField/MLPluginField, global loader and notice display, dist, READMEs and docs - [ ] 16.2-02-PLAN.md — Journal Blog Editor element (sm-journal-plugin assets/src to assets/dist): TipTap package check (human), untouched value contract, lossless schema and serializer, policy-safe links, uploads and YouTube embeds, the committed editor-output corpus, JS build, vitest, check-dist, embed **Wave 2** *(blocked on Wave 1 completion)* diff --git a/.planning/STATE.md b/.planning/STATE.md index 72367d8..9221084 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -2,18 +2,18 @@ msd_state_version: "1.0" milestone: v1.0 current_phase: "16.2" -current_phase_name: plugin-provided-field-types-and-the-blog-editor-formwidget +current_phase_name: Plugin-provided field types and the Blog Editor formwidget status: executing -stopped_at: Completed 16.1-03-PLAN.md -last_updated: "2026-10-10T00:27:04.316Z" -last_activity: 2026-10-09 -last_activity_desc: Phase 16.1 execution started -state_head: 94900f233bf34d8dc585d404021c5038c8c621b6 +stopped_at: Completed 16.2-01-PLAN.md +last_updated: "2026-10-10T09:28:16.322Z" +last_activity: 2026-10-10 +last_activity_desc: Phase 16.2 execution started +state_head: 8237b7a19f82e480825493cf0b4426c8ea440319 progress: total_phases: 34 completed_phases: 13 total_plans: 157 - completed_plans: 147 + completed_plans: 148 gsd_state_version: "1.0" milestone_name: milestone --- @@ -25,14 +25,14 @@ milestone_name: milestone See: .planning/PROJECT.md (updated 2026-09-16) **Core value:** An existing WinterCMS-shaped app can be ported plugin by plugin to a single Go binary without its frontend noticing: the PHP version's API contract is the acceptance test. -**Current focus:** Phase 16.1 — Journal admin urgent fixes: relation search, list state, post form content and excerpt (INSERTED) +**Current focus:** Phase 16.2 — Plugin-provided field types and the Blog Editor formwidget ## Current Position -Phase: 16.2 (plugin-provided-field-types-and-the-blog-editor-formwidget) — READY TO EXECUTE -Plan: 3 of 3 +Phase: 16.2 (Plugin-provided field types and the Blog Editor formwidget) — EXECUTING +Plan: 2 of 6 Status: Ready to execute -Last activity: 2026-10-09 — Phase 16.1 execution started +Last activity: 2026-10-10 — Phase 16.2 execution started Progress: [██████████] 100% @@ -202,6 +202,7 @@ Progress: [██████████] 100% | Phase 16.1 P01 | 11 min | 4 tasks | 20 files | | Phase 16.1 P02 | 1h 26m | 3 tasks | 4 files | | Phase 16.1 P03 | 12 min | 3 tasks | 8 files | +| Phase 16.2 P01 | 34min | 4 tasks | 51 files | ## Accumulated Context @@ -655,6 +656,10 @@ Recent decisions affecting current work: - [Phase 16.1]: 16.1-02: UAT Go log checks read /var/log/supervisor/grzybyfunkcjonalne-go.log directly; supervisorctl tail fails on ANSI escapes in GORM log lines and makes grep-count checks vacuous - [Phase 16.1]: 16.1-02: D-01/D-03 end-of-phase UAT checks are human-reported but not independently confirmed; queued for /msd-verify-work - [Phase 16.1]: FormatHTML refuse tests require an error and empty result for every unsafe input: with html.WithUnsafe the gate is the only XSS defence +- [Phase 16.2]: pact.FormFieldType.ListValue is func(ctx context.Context, value any) string (human adjust at the 16.2-01 checkpoint); plans 03, 05 and 06 use the ctx form +- [Phase 16.2]: Plugin field type registry is built per Activate by compileFieldTypes and passed down the compile functions; existing compile functions stay nil-registry wrappers +- [Phase 16.2]: Only pact.FormFieldError from a plugin field type's Decode or Upload is a 422; every other plugin error, Load included, is the opaque 500 +- [Phase 16.2]: Untouched plugin field values are skipped on update by canonical encoding/json comparison with the served value (stored value through Load), per field and locale ### Pending Todos @@ -724,6 +729,6 @@ Items acknowledged and carried forward from previous milestone close: ## Session Continuity -Last session: 2026-10-09T20:52:41.534Z -Stopped at: Completed 16.1-03-PLAN.md +Last session: 2026-10-10T09:28:15.731Z +Stopped at: Completed 16.2-01-PLAN.md Resume file: None diff --git a/.planning/state.json b/.planning/state.json index 86af7ac..7c3357c 100644 --- a/.planning/state.json +++ b/.planning/state.json @@ -142,7 +142,7 @@ "next": { "command": "/msd:progress --next", "label": "Advance to the next step", - "reason": "Phase 16.1 of 34 · executing" + "reason": "Phase 16.2 of 34 · executing" }, - "updated_at": "2026-10-09T18:51:01.734Z" + "updated_at": "2026-10-10T09:28:05.053Z" }