This is the Project Diary of the dm6-elm project.
digraph DM6_ELM_STATUS { rankdir=LR; labelloc="t"; label="dm6-elm – Branches, Features, and Integration (Sep 26, 2025)"; fontsize=20; node [shape=rounded, style=filled, fillcolor="#f7f7f7", fontname="Inter", fontsize=11]; edge [fontname="Inter", fontsize=10]; subgraph cluster_core { label="Core"; color="#cccccc"; style="rounded"; main [label="main\n(stable core, undo/redo, nested containment)"]; undo [label="Undo/Redo\n(stable)"]; nested [label="Nested Containment\n(upstream fix merged)"]; main -> undo [arrowhead=none, style=dashed, color="#bbbbbb"]; main -> nested [arrowhead=none, style=dashed, color="#bbbbbb"]; } subgraph cluster_fedwiki { label="FedWiki Bridge"; color="#99c2ff"; style="rounded"; fw_decode [label="Compat.FedWiki* decoders\n(Lite ok)"]; fw_inject [label="Inject via Main.update\n(PLANNED)"]; fw_round [label="Round-trip JSON↔Model\n(PLANNED)"]; fw_cold [label="Cold-boot visible items\n(BUG)"]; } subgraph cluster_lof { label="LoF Diagram"; color="#ffcc99"; style="rounded"; lof_icon [label="Iconic render\n(PARTIAL)"]; lof_sym [label="Symbolic render\n(PARTIAL)"]; lof_rew [label="Crossing rewrites\n(TODO)"]; lof_golden [label="Golden tests\n(TODO)"]; lof_icon -> lof_sym [dir=both, label="toggle", color="#888888"]; } subgraph cluster_features { label="Feature Branches"; color="#c3e6cb"; style="rounded"; open_door [label="feature/open-door\n(TAGGED STABLE)\n→ merge"]; cross [label="feature/cross\n(WIRE UPDATE + TEST)"]; facade [label="feature/facade-shortest-path\n(SMOKE TEST)"]; } subgraph cluster_blog { label="Elm-Pages Blog"; color="#f5b3c8"; style="rounded"; blog_msg [label="Route Msg imports\n(FIX)"]; blog_links [label="links parser\n(TODO)"]; } subgraph cluster_infra { label="Infra / Deploy / IPv6"; color="#e6e6e6"; style="rounded"; nix [label="Nix Flake deploy docs\n(TODO)"]; ipv6 [label="IPv6 loopback + PNA\n(TROUBLESHOOT)"]; graphviz_plug [label="Graphviz plugin deploy\n(DOCS)"]; } // Relationships // FedWiki → Core fw_decode -> fw_inject [label="use AM.Msg fold"]; fw_inject -> main [label="model updates", color="#4d79ff"]; fw_round -> fw_decode [style=dashed, color="#999999", label="tests"]; fw_cold -> fw_inject [color="#ff6b6b", label="fix via visible items"]; // LoF to tests lof_rew -> lof_golden [label="assert transforms"]; lof_icon -> lof_golden [style=dashed]; lof_sym -> lof_golden [style=dashed]; // Feature branches → main open_door -> main [color="#28a745", penwidth=2, label="merge"]; cross -> main [style=dashed, label="after wiring + tests"]; facade -> main [style=dashed, label="after smoke"]; // Blog fixes blog_msg -> main [style=dashed, label="fix compile"]; blog_links -> main [style=dashed, label="UX parity"]; // Infra supports nix -> graphviz_plug [style=dashed, label="how-to"]; ipv6 -> fw_cold [style=dashed, label="proxy/forking stability"]; }
dm6.dreyeck.ch elm.dm6.dreyeck.dh
Since Sep 26, 2025 we focused on tighter FedWiki ↔︎ DM6 Elm integration and a smoother embed/debug loop. The FedWiki importer was rewritten to create one topic for the page title and one per story item with non-empty text (using a simple `{ typ, text }` decoder), and to add all new topics to the current map; this replaces the old paragraph-only import and avoids empty labels. AppRunner logging and naming were cleaned up while keeping the same behavior.
On the embed side, we introduced a small “Cold Boot” console that mounts DM6 Elm via `AppEmbed` inside a wiki frame, boots from either the page JSON or `{}`, and pipes the same JSON through jq for quick inspection. We also added one-liners to stack an Elm Debugger iframe under (or beside) the app and redirect `window.open` so the debugger appears in-page, which has made iterative testing far quicker. Open questions: rendering “Monad label-only” topics as true SVG circles (currently CSS-rounded divs) and polishing the frame/plugin interactions. The code up to commit 5cea616e advances import fidelity, embed robustness, and on-page debugging without changing the main document app. commit
--- # 2025-09-27 → 2025-09-29 — FedWiki containers, WhiteBox rendering, and import flow ## Highlights * **FedWiki containers now render as *WhiteBox* by default in the embedded app**, fixing the “stays a label until interaction” issue. Also tightened the import + renderer handshake and touched up the dev shell. ([GitHub][1]) * **Structured FedWiki import**: create title container in the current map, ensure a child map, and import story items in order. ([GitHub][1]) * **Renderer + model glue**: detection helpers for “this topic is the FedWiki page”, safer `currentMapId`, and a fallback label-only circle renderer for monads. ([GitHub][1]) * **ModelAPI hardening**: `addItemToMap` becomes the single guarded entry; root map + `mapPath` correctness tweaks. ([GitHub][1]) ## Commits (newest → oldest) * **fix(renderer, import, devshell): render FedWiki container as WhiteBox; …** — `4f4412b` (2025-09-29) Makes the FedWiki title container show as WhiteBox on first paint; includes minor import + shell polish. ([GitHub][1]) * **feat: Ensure FedWiki containers render as WhiteBox in embedded app** — `b0447a4` (2025-09-29) Forces WhiteBox for the detected FedWiki container in the embed flow. ([GitHub][1]) * **feat(fedwiki): implement structured container tracking and WhiteBox rendering** — `053edd4` (2025-09-29) Adds the structured “this is the FedWiki page container” metadata used by the renderer. ([GitHub][1]) * **fix: handle empty mapPath gracefully in currentMapId** — `92a0fde` (2025-09-29) Removes a source of flakiness when the app boots without a full `mapPath`. ([GitHub][1]) * **feat(fedwiki): implement nested page structure with container tracking** — `e72951c` (2025-09-29) Solidifies child-map creation and container bookkeeping. ([GitHub][1]) * **feat(fedwiki): add ensureChildMap and Id-based page-container detection** — `b8d88c0` (2025-09-29) Introduces helpers used by the import and renderer to tie the title to its child map. ([GitHub][1]) * **feat(map): add FedWiki page detection helpers and …** — `de93b27` (2025-09-29) Renderer-side detection utilities for FedWiki containers. ([GitHub][1]) * **feat(map): render `Monad LabelOnly` as SVG circles with native drag** — `b90dd9b` (2025-09-28) Improves the minimal label-only topics and keeps free-form map editing snappy. ([GitHub][1]) * **feat(fedwiki-import): use currentMapId and import story items** — `5cea616` (2025-09-27) First pass that imports story items beneath the created page container in the current map. ([GitHub][1]) * **fix(modelapi): make addItemToMap the single guarded entry; …** — `5eae3f9` (2025-09-27) Centralizes map mutations through one safe path. ([GitHub][1]) * **fix(main): ensure root map and valid mapPath; correct Rectangle fields** — `5e69c39` (2025-09-27) Stabilizes initial model + geometry so early renders don’t glitch. ([GitHub][1]) ## What this delivers * **Immediate WhiteBox** for the FedWiki page container (no click/drag needed). * **Deterministic structure**: the page title gets a child map, and story items land there in order. * **Safer boot**: fewer edge-cases around `currentMapId`/`mapPath`, better first render. * **Editing unchanged**: non-FedWiki containers keep the free-form map behavior. --- [1]: https://github.com/RalfBarkow/dmx-systems-dm6-elm/commits/main/ "Commits · RalfBarkow/dmx-systems-dm6-elm · GitHub"
digraph DM6_FedWiki_WhiteBox { rankdir=LR; fontname="Helvetica"; node [shape=box, style="rounded,filled", fillcolor=white, fontname="Helvetica"]; edge [fontname="Helvetica"]; layout=fdp; // ========= Import pipeline ========= subgraph cluster_import { label = "FedWiki Import Pipeline"; color = "#999999"; fontname="Helvetica-Bold"; n_fw_json [label="FedWiki Page JSON (value)"]; n_decoder [label="pageDecoder\n(title, story[])"]; n_import [label="Compat.FedWikiImport.importPage"]; n_createTitle [label="CAPI.createTopicAndAddToMap\n(title topic)"]; n_setWB [label="setWhiteBoxOnCurrentMap(titleId)\n→ displayMode = Container WhiteBox", fillcolor="#ffeef6"]; n_ensureChild [label="CAPI.ensureChildMap(titleId)"]; n_createItems [label="Create story topics\n(in child map)"]; n_encodeMeta [label="encodeFwMeta(containerId, storyItemIds)\n& set model.fedWiki{...}"]; n_mapsOut [label="model.maps (updated)"]; n_fwMeta [label="model.fedWiki\n(containerId, storyItemIds)"]; n_fw_json -> n_decoder -> n_import -> n_createTitle -> n_setWB -> n_ensureChild -> n_createItems -> n_encodeMeta; n_encodeMeta -> n_mapsOut; n_encodeMeta -> n_fwMeta; } // ========= Renderer path ========= subgraph cluster_renderer { label = "Renderer Path"; color = "#999999"; fontname="Helvetica-Bold"; n_viewTopic [label="MapRenderer.viewTopic(topic, props)"]; n_effMode [label="effectiveDisplayMode\n(isFedWikiPage?, isLimbo?)"]; n_isFW [label="isFedWikiPage(topic.id)\n(model.fedWiki.containerId == id)"]; n_pickRenderer [label="case mode →\nWhiteBox → whiteBoxTopic\n…"]; n_whiteBox [label="whiteBoxTopic\n(label + whiteChrome + scream)", fillcolor="#fff8e1"]; n_topicStyle [label="topicStyleWithMode\n(base + displayModeStyles)"]; n_diag [label="data-* attrs\n(mode0, mode1, renderer, isFedWikiPage)"]; n_dom [label="DOM: <div …>\nchildren: dragHandle :: …"]; n_viewTopic -> n_effMode; n_effMode -> n_isFW; n_effMode -> n_pickRenderer; n_pickRenderer -> n_whiteBox; n_whiteBox -> n_topicStyle; n_whiteBox -> n_diag; n_topicStyle -> n_dom; n_diag -> n_dom; } // ========= Unboxing tweak ========= subgraph cluster_unbox { label = "Unboxing Path (tweak)"; color = "#999999"; fontname="Helvetica-Bold"; n_unboxItems [label="unboxItems\n(container → target map)"]; n_unboxTopic [label="unboxTopic"]; n_setWB2 [label="setWhiteBox(item)\n(if container has map & not BlackBox)", fillcolor="#ffeef6"]; n_setUnboxed [label="setUnboxed(item)\n(when no child map)"]; n_unboxItems -> n_unboxTopic; n_unboxTopic -> n_setWB2; n_unboxTopic -> n_setUnboxed; } // ========= Data dependencies between clusters ========= n_mapsOut -> n_viewTopic [label="reads", color="#444444"]; n_fwMeta -> n_isFW [label="containerId", color="#444444"]; }