docs(16.2-03): update state and roadmap after plan 03

This commit is contained in:
2026-10-10 12:13:59 +02:00
parent 2a7e9761a4
commit ffa6d18474
4 changed files with 45 additions and 13 deletions

View File

@@ -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)*

View File

@@ -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 (<p><img></p>); 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

View File

@@ -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"
}
]
````

View File

@@ -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"
}