diff --git a/dev-plans/lark-slides/svglide-parser-semantic-generation-plan.zh.md b/dev-plans/lark-slides/svglide-parser-semantic-generation-plan.zh.md
new file mode 100644
index 000000000..5c6c02b35
--- /dev/null
+++ b/dev-plans/lark-slides/svglide-parser-semantic-generation-plan.zh.md
@@ -0,0 +1,1715 @@
+# SVGlide Parser Semantic Generation Implementation Plan
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** Prevent browser-only or unreadable SVG decks from reaching Lark Slides by making generated SVG parser-legible by construction, enforcing readability safety before publish, repairing failed pages as page-level units, and making readback fidelity a hard online success gate.
+
+**Architecture:** Keep creative planning flexible, but make final SVG syntax deterministic and parser-facing. Agents produce page intent or use a small semantic renderer; validators reject browser SVG constructs and unreadable foreground overlap; repair context scripts isolate failures to page-level regeneration and hash guards prove non-failed pages did not change. `svg_slides_bundle.mjs` and `slides +create-svglide` become the only supported generated-deck publish path; online delivery must pass readback checks for key text and image preservation.
+
+**Tech Stack:** Node.js ESM scripts, existing `skills/lark-slides` SVG Slides references, Go `slides +create-svglide` manifest validation, existing CLI E2E tests.
+
+## Global Constraints
+
+- Final slide files must be raw SVG rooted at `",
+ `
Overlapping overlay
`
+ ));
+ createPromptTrace(root, refs);
+ writeAssetReadiness(root);
+ writeTypographyPlan(root);
+ const result = spawnSync("node", [script, root, "--title", "Readability Fail", "--references", refs], { encoding: "utf8" });
+ assert.equal(result.status, 1);
+ assert.match(result.stderr || result.stdout, /readability\.overlap/);
+ assert.equal(fs.existsSync(path.join(root, "receipts", "readability_safety.json")), true);
+ assert.equal(fs.existsSync(path.join(root, "manifest.json")), false);
+});
+```
+
+- [ ] **Step 6: Enforce readability receipt in Go manifest guard**
+
+Add this field to `svglideManifestReceipts`:
+
+```go
+ReadabilitySafety string `json:"readability_safety"`
+```
+
+Add it to the `required` map:
+
+```go
+"receipts.readability_safety": receipts.ReadabilitySafety,
+```
+
+Include `receipts.readability_safety` in the zero-error receipt validation branch:
+
+```go
+if label == "receipts.frame_discipline" || label == "receipts.parser_contract" || label == "receipts.readability_safety" {
+```
+
+Update every SVGlide manifest fixture in `shortcuts/slides/slides_create_svglide_test.go` and `tests/cli_e2e/slides/slides_create_svglide_helpers_test.go` that is expected to pass:
+
+```json
+"readability_safety": "receipts/readability_safety.json"
+```
+
+and add this receipt file:
+
+```json
+{"ok":true,"totalErrors":0}
+```
+
+Add this negative manifest case beside the parser-contract missing case:
+
+```go
+{
+ name: "readability safety receipt has errors",
+ manifest: `{"version":"svglide.manifest.v1","protocol":"svg-slides.v1","title":"x","size":{"width":960,"height":540},"publish_ready":true,"published":false,"receipts":{"validate_svg_deck":"receipts/validate_svg_deck.json","prompt_read_trace":"receipts/prompt_read_trace.json","asset_readiness":"receipts/asset_readiness.json","typography_plan":"receipts/typography_plan.json","frame_discipline":"receipts/frame_discipline.json","parser_contract":"receipts/parser_contract.json","readability_safety":"receipts/readability_safety.json"},"pages":[{"id":"p1","index":1,"file":"page.svg","sha256":"e49b13606aa9da3e670d91549b1d3500b282a5484ce411326457e68fe672ce56"}]}`,
+ pageFiles: map[string]string{
+ "page.svg": ``,
+ "receipts/validate_svg_deck.json": `{"totalErrors":0}`,
+ "receipts/prompt_read_trace.json": `{"ok":true}`,
+ "receipts/asset_readiness.json": `{"ok":true}`,
+ "receipts/typography_plan.json": `{"ok":true}`,
+ "receipts/frame_discipline.json": `{"ok":true,"totalErrors":0}`,
+ "receipts/parser_contract.json": `{"ok":true,"totalErrors":0}`,
+ "receipts/readability_safety.json": `{"ok":false,"totalErrors":1}`,
+ },
+ wantMessage: "--manifest receipts.readability_safety receipt must have totalErrors=0",
+}
+```
+
+- [ ] **Step 7: Update prompt source and validation docs**
+
+Add this contract to `skills/lark-slides/prompt-sources/svg-slides/full.debranded.md` inside the `system_prompt_workflow` section near visual composition rules:
+
+```markdown
+### Readability Safety Contract
+
+Compose every slide freely from the content. Do not use a fixed page-pattern menu. However, free composition must never break readability.
+
+Foreground text, chart values, table cells, labels, legends, captions, KPI numbers, and primary visual focal points must not be covered by callouts, cards, images, decorative shapes, or other foreground objects.
+
+Photo walls, collage covers, textured backgrounds, and image-heavy heroes are allowed. When text sits over them, add a text scrim, gradient mask, quiet safe zone, or equivalent contrast treatment so the text remains readable and visually intentional.
+
+If an overlap is intentional, annotate it with `data-svglide-allow-overlap="true"` and a concrete reason such as `data-svglide-overlap-reason="decorative staff lines pass behind the title"`. Use this only for genuine design layering, not to hide layout mistakes.
+
+Scrims and masks must remain parser-legible shapes: use `slide:role="shape" slide:shape-type="rect" data-svglide-layer="mask"`, not a new `slide:role` value.
+```
+
+Update `skills/lark-slides/references/svg-slides/validation/README.md` with three distinct gates:
+
+```markdown
+1. `validate_svg_deck`: protocol legality and parser-supported SVG semantics.
+2. `svg_slides_frame_discipline`: text frame and container discipline.
+3. `svg_slides_readability_safety`: foreground overlap, out-of-bounds content, and missing text-over-image masking.
+```
+
+Then regenerate runtime references:
+
+```bash
+node skills/lark-slides/scripts/svg_slides_extract_references.mjs
+```
+
+- [ ] **Step 8: Verify readability tests and bundle tests**
+
+Run:
+
+```bash
+node --test skills/lark-slides/scripts/svg_slides_readability_safety_test.mjs
+node --test skills/lark-slides/scripts/svg_slides_bundle_test.mjs
+go test ./shortcuts/slides -run SVGlide -count=1
+```
+
+Expected: PASS.
+
+- [ ] **Step 9: Commit**
+
+```bash
+git add skills/lark-slides/scripts/svg_slides_readability_safety.mjs skills/lark-slides/scripts/svg_slides_readability_safety_test.mjs skills/lark-slides/scripts/testdata/readability skills/lark-slides/scripts/svg_slides_bundle.mjs skills/lark-slides/scripts/svg_slides_bundle_test.mjs shortcuts/slides/slides_create_svglide_manifest.go shortcuts/slides/slides_create_svglide_test.go tests/cli_e2e/slides/slides_create_svglide_helpers_test.go skills/lark-slides/prompt-sources/svg-slides/full.debranded.md skills/lark-slides/references/svg-slides/system-prompt.md skills/lark-slides/references/svg-slides/validation/README.md
+git commit -m "feat: enforce svg slides readability safety"
+```
+
+---
+
+### Task 6: Add Online Readback Fidelity Gate
+
+**Files:**
+- Create: `skills/lark-slides/scripts/svg_slides_readback_gate.mjs`
+- Create: `skills/lark-slides/scripts/svg_slides_readback_gate_test.mjs`
+- Modify: `skills/lark-slides/references/lark-slides-create-svglide.md`
+
+**Interfaces:**
+- Consumes: local deck directory and either `--readback-file ` or `--presentation-id `.
+- Produces: JSON receipt with `ok`, `totalErrors`, missing text, image count, and local href leakage.
+
+- [ ] **Step 1: Write readback gate tests**
+
+Create `skills/lark-slides/scripts/svg_slides_readback_gate_test.mjs`:
+
+```js
+import assert from "node:assert/strict";
+import fs from "node:fs";
+import os from "node:os";
+import path from "node:path";
+import { spawnSync } from "node:child_process";
+import test from "node:test";
+
+const script = path.resolve("skills/lark-slides/scripts/svg_slides_readback_gate.mjs");
+
+function tempDeck() {
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "readback-gate-"));
+ fs.mkdirSync(path.join(root, "slides"));
+ return root;
+}
+
+function writeLocalSlide(root) {
+ fs.writeFileSync(path.join(root, "slides", "slide_01.svg"), `
+
+