docs(examples): mark page shell html boundaries

Document that remaining SafeHtml use in examples is limited to full-page shell composition of already-rendered hemplate fragments, while effect payloads use render helpers.

req: html_safety/002

req: view/001
This commit is contained in:
slhx agent
2026-05-26 01:34:05 +02:00
parent 5972785c3c
commit e20d356c1d
4 changed files with 6 additions and 1 deletions
+1 -1
View File
@@ -558,7 +558,7 @@ what a valid business email is.
001 Raw HTML insertion requires an explicit safe HTML type (`SafeHtml` or equivalent). Plain `String` renders as escaped text unless explicitly wrapped. 001 Raw HTML insertion requires an explicit safe HTML type (`SafeHtml` or equivalent). Plain `String` renders as escaped text unless explicitly wrapped.
### req: html/002 ### req: html/002
002 Hemplate-rendered output may be converted to `SafeHtml` by trusted render APIs. User input is never `SafeHtml` by default. 002 Hemplate-rendered output may be converted to `SafeHtml` by trusted render APIs. User input is never `SafeHtml` by default. Full-page shell composition may pass already-rendered hemplate fragments through explicit `SafeHtml` fields; handlers should prefer slot/resource render helpers for effect payloads.
### req: html/003 ### req: html/003
003 Slot render commands distinguish text payloads from HTML payloads at the type level. 003 Slot render commands distinguish text payloads from HTML payloads at the type level.
+1
View File
@@ -225,6 +225,7 @@ fn parse_column(value: Option<&str>) -> usize {
} }
fn page_html(board: &BoardState) -> String { fn page_html(board: &BoardState) -> String {
// Explicit full-page composition boundary for already-rendered hemplate fragments.
// req: html_safety/002 req: view/001 // req: html_safety/002 req: view/001
ui::board::lower_html(render_template(&Board { ui::board::lower_html(render_template(&Board {
options: render_options(), options: render_options(),
+3
View File
@@ -422,6 +422,8 @@ fn parse_lane(value: Option<&str>) -> usize {
} }
fn page_html(demo: &DemoState) -> String { fn page_html(demo: &DemoState) -> String {
// Explicit full-page composition boundary for already-rendered hemplate fragments.
// req: html_safety/002 req: view/001
render_control_center(ControlCenter { render_control_center(ControlCenter {
hero: render_hero(demo), hero: render_hero(demo),
board: render_board(demo), board: render_board(demo),
@@ -431,6 +433,7 @@ fn page_html(demo: &DemoState) -> String {
} }
fn shell(body: String) -> String { fn shell(body: String) -> String {
// Explicit full-page shell composition boundary for already-rendered hemplate fragments.
// req: html_safety/002 req: view/001 // req: html_safety/002 req: view/001
render_template(&AppShell { body: SafeHtml::trusted(body) }) render_template(&AppShell { body: SafeHtml::trusted(body) })
} }
+1
View File
@@ -185,6 +185,7 @@ fn all_examples() -> String {
} }
fn shell(body: String) -> String { fn shell(body: String) -> String {
// Explicit full-page shell composition boundary for already-rendered hemplate fragments.
// req: html_safety/002 req: view/001 // req: html_safety/002 req: view/001
render_template(&AppShell { render_template(&AppShell {
body: SafeHtml::trusted(body), body: SafeHtml::trusted(body),