From ffa6d1847474918033bc9b9581b31868e1e1e5c6 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Sat, 10 Oct 2026 12:13:59 +0200 Subject: [PATCH] docs(16.2-03): update state and roadmap after plan 03 --- .planning/ROADMAP.md | 4 ++-- .planning/STATE.md | 18 +++++++++++------- .planning/WINDOWS.md | 34 +++++++++++++++++++++++++++++++--- .planning/state.json | 2 +- 4 files changed, 45 insertions(+), 13 deletions(-) diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index c98e4fe..6de3488 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -999,7 +999,7 @@ 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:** 2/6 plans executed +**Plans:** 3/6 plans executed Plans: **Wave 1** @@ -1007,7 +1007,7 @@ Plans: - [x] 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)* -- [ ] 16.2-03-PLAN.md — Journal Go integration: blogeditor and mlblogeditor types, strip-and-report Decode per locale (SanitizeHTMLReport), D-07 Load, post and category fields (category 422 gate retired), content_html companion writes without goldmark, bluemonday policy extended for the editor's own output (corpus test), editor uploads through the extracted media storage +- [x] 16.2-03-PLAN.md — Journal Go integration: blogeditor and mlblogeditor types, strip-and-report Decode per locale (SanitizeHTMLReport), D-07 Load, post and category fields (category 422 gate retired), content_html companion writes without goldmark, bluemonday policy extended for the editor's own output (corpus test), editor uploads through the extracted media storage - [ ] 16.2-04-PLAN.md — vue-journal-layer: sanitize-html mirror extended for the editor's own output (corpus copy), expandEmbeds as the last step after sanitizeJournalHtml, SSR proof, tag v0.2.0 (human push gate), pin in vue-grzybyfunkcjonalne-app **Wave 3** *(blocked on Wave 2 completion)* diff --git a/.planning/STATE.md b/.planning/STATE.md index 76acf44..add3d75 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -4,16 +4,16 @@ milestone: v1.0 current_phase: "16.2" current_phase_name: Plugin-provided field types and the Blog Editor formwidget status: executing -stopped_at: Completed 16.2-02-PLAN.md -last_updated: "2026-10-10T09:55:19.276Z" +stopped_at: Completed 16.2-03-PLAN.md +last_updated: "2026-10-10T10:13:50.309Z" last_activity: 2026-10-10 last_activity_desc: Phase 16.2 execution started -state_head: 5600c02a730d9ca18ff1324314778f1cc3db83a3 +state_head: 2a7e9761a45ad2c33422a51506f35a844e4a9227 progress: total_phases: 34 completed_phases: 13 total_plans: 157 - completed_plans: 149 + completed_plans: 150 gsd_state_version: "1.0" milestone_name: milestone --- @@ -30,7 +30,7 @@ See: .planning/PROJECT.md (updated 2026-09-16) ## Current Position Phase: 16.2 (Plugin-provided field types and the Blog Editor formwidget) — EXECUTING -Plan: 3 of 6 +Plan: 4 of 6 Status: Ready to execute Last activity: 2026-10-10 — Phase 16.2 execution started @@ -204,6 +204,7 @@ Progress: [██████████] 100% | Phase 16.1 P03 | 12 min | 3 tasks | 8 files | | Phase 16.2 P01 | 34min | 4 tasks | 51 files | | Phase 16.2 P02 | 25min | 3 tasks | 24 files | +| Phase 16.2 P03 | 13min | 3 tasks | 21 files | ## Accumulated Context @@ -665,6 +666,9 @@ Recent decisions affecting current work: - [Phase 16.2]: Blog Editor bundle built through the Vite application pipeline (single ES entry, fixed names, exports kept) because library mode never minifies ES whitespace - [Phase 16.2]: Blog Editor link parsing, rendering and commands use isPolicyUrl (http, https, mailto, relative); on* attributes are never captured; external values load outside the undo history - [Phase 16.2]: Uncaptioned editor images are inline (

); captioned ones are figure with figureImage and figcaption +- [Phase 16.2]: Plan 03: the Journal HTML policy needed exactly the four editor-output rules (figure data-embed/data-id, img alt, ol start); the corpus showed no fifth +- [Phase 16.2]: Plan 03: editor uploads must sniff as a JPEG/PNG/GIF/WebP type matching the extension; uniqueMediaKey errors instead of overwriting when all numbered names are taken +- [Phase 16.2]: Plan 03: admin saves of post content write the Decode output to content and content_html per written locale (FormBefore*/FormAfter* hooks), no goldmark; category 422 gate retired ### Pending Todos @@ -734,6 +738,6 @@ Items acknowledged and carried forward from previous milestone close: ## Session Continuity -Last session: 2026-10-10T09:55:18.559Z -Stopped at: Completed 16.2-02-PLAN.md +Last session: 2026-10-10T10:13:41.137Z +Stopped at: Completed 16.2-03-PLAN.md Resume file: None diff --git a/.planning/WINDOWS.md b/.planning/WINDOWS.md index 491ae2b..e3c3216 100644 --- a/.planning/WINDOWS.md +++ b/.planning/WINDOWS.md @@ -1,10 +1,10 @@ --- schema_version: 1 -open_count: 8 +open_count: 10 waived_count: 0 fixed_count: 6 -total_count: 14 -last_updated: 2026-10-10T09:54:57.583Z +total_count: 16 +last_updated: 2026-10-10T10:12:10.986Z --- # Broken Windows Ledger @@ -29,6 +29,8 @@ last_updated: 2026-10-10T09:54:57.583Z | 12 | 16.1 | unrun-verify | .planning/phases/16.1-journal-admin-urgent-fixes-relation-search-list-state-post-f/16.1-VALIDATION.md | | sm-journal-plugin TestPostsAdminResaveKeepsHTML (posts_admin_smoke_test.go) not run here (no Docker); run go -C ../sm-journal-plugin test -count=1 ./... on a Docker host before /msd-verify-work | open | | 2026-10-09T20:51:27.671Z | | | 13 | 16.2 | deviation | tests/blogeditor/fixtures/imported-post.html | | sm-journal-plugin: 16.2-02 imported-post fixture is synthetic (same structure as the export post) because reading the journal export was refused by the environment's PII classifier; swap in the real export content if wanted | open | | 2026-10-10T09:54:57.288Z | | | 14 | 16.2 | unrun-verify | plugin_test.go | | sm-journal-plugin: TestJournalSVGEmbed now asserts AdminFS embeds assets/dist/blogeditor.js and .css; the root package TestMain needs Docker, so it was not run here; run go -C ../sm-journal-plugin test -count=1 . on a Docker host (plan 06) | open | | 2026-10-10T09:54:57.583Z | | +| 15 | 16.2 | unrun-verify | .planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-03-PLAN.md | | sm-journal-plugin posts_admin_smoke_test.go: TestPostsFormCompiles, TestPostsAdminCreateSmoke, TestPostsAdminResaveKeepsHTML, TestPostsAdminSaveSanitizesHTML compile under go vet but need a Docker host (plan 06) | open | | 2026-10-10T10:12:10.725Z | | +| 16 | 16.2 | unrun-verify | .planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-03-PLAN.md | | sm-journal-plugin journal_api_categories_test.go TestCategoriesAdminContent (strip assertions) and journal_api_task3_test.go media upload route tests after the StoreMedia refactor need a Docker host (plan 06) | open | | 2026-10-10T10:12:10.986Z | | ````json [ @@ -213,6 +215,32 @@ last_updated: 2026-10-10T09:54:57.583Z "recorded_at": "2026-10-10T09:54:57.583Z", "resolved_at": null, "milestone": "v1.0" + }, + { + "id": 15, + "kind": "unrun-verify", + "phase": "16.2", + "file": ".planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-03-PLAN.md", + "line": null, + "description": "sm-journal-plugin posts_admin_smoke_test.go: TestPostsFormCompiles, TestPostsAdminCreateSmoke, TestPostsAdminResaveKeepsHTML, TestPostsAdminSaveSanitizesHTML compile under go vet but need a Docker host (plan 06)", + "status": "open", + "reason": "", + "recorded_at": "2026-10-10T10:12:10.725Z", + "resolved_at": null, + "milestone": "v1.0" + }, + { + "id": 16, + "kind": "unrun-verify", + "phase": "16.2", + "file": ".planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-03-PLAN.md", + "line": null, + "description": "sm-journal-plugin journal_api_categories_test.go TestCategoriesAdminContent (strip assertions) and journal_api_task3_test.go media upload route tests after the StoreMedia refactor need a Docker host (plan 06)", + "status": "open", + "reason": "", + "recorded_at": "2026-10-10T10:12:10.986Z", + "resolved_at": null, + "milestone": "v1.0" } ] ```` diff --git a/.planning/state.json b/.planning/state.json index 3eff037..b64f8dd 100644 --- a/.planning/state.json +++ b/.planning/state.json @@ -144,5 +144,5 @@ "label": "Advance to the next step", "reason": "Phase 16.2 of 34 · executing" }, - "updated_at": "2026-10-10T09:55:05.823Z" + "updated_at": "2026-10-10T10:13:36.073Z" }