Skip to content

feat: sn-chart-render skill — 数据图表编排器,替代旧 chart_render.py 硬化实现 - #123

Open
ray-lee-coder wants to merge 1 commit into
OpenSenseNova:mainfrom
ray-lee-coder:feat/sn-chart-render
Open

feat: sn-chart-render skill — 数据图表编排器,替代旧 chart_render.py 硬化实现#123
ray-lee-coder wants to merge 1 commit into
OpenSenseNova:mainfrom
ray-lee-coder:feat/sn-chart-render

Conversation

@ray-lee-coder

Copy link
Copy Markdown

概要

新增 sn-chart-render skill,按照 SenseNova 三层分级架构重构了之前的图表渲染硬化实现。

旧方案: sn-md-to-html-report/scripts/chart_render.py (282 行单体) + chartjs-integration.md (参考文档) — 文件路径硬编码、无边界、无验证、无可发现性。

新方案: 独立技能 sn-chart-render,编排器 + 3 个 capability + 3 个独立脚本 + 2 个可替换模板。

产物链

data (DataFrame/dict JSON)
  → render_chart_html.py (data → Chart.js HTML)
  → embed_chart_to_html.py (注入已有 HTML)
  → validate_chart_rendering.py (Playwright canvas + 字体验证)

文件结构 (10 files, +1,305 lines)

文件 职责
SKILL.md Tier 1 编排器,行为边界/产物链/执行流程/质量守门
capability/chartjs-rendering/SKILL.md 渲染能力 (6 种 chart type, 6 套 palette)
capability/chart-embedding/SKILL.md 注入能力 (slot 定位/ID 冲突/CDN 去重)
capability/chart-validation/SKILL.md 验证能力 (Playwright/CDN/canvas/中文字体)
scripts/render_chart_html.py data dict → Chart.js HTML
scripts/embed_chart_to_html.py 图块注入已有 HTML
scripts/validate_chart_rendering.py Playwright 自动化验证
templates/standard-report.html 完整报告模板 (可替换)
templates/chart-inject-template.html 纯注入片段模板
references/chart-type-selection.md 选型决策树

测试结果

47/47 通过 (100%) — 6 梯度递进 (L0 基础 → L5 验证器)

梯度 覆盖
L0 基础功能 chart-only/standard-report/CDN/canvas/Chart 实例
L1 多类型 bar/line/doughnut/radar/mixed 全类型
L2 边界 空数组/缺字段/0 值/≥10 饼图合并/horizontal
L3 嵌入 注入/slot 不存在退到 body/CDN 检测/错误处理
L4 配色 6 种 palette 全部产出 HTML
L5 验证器 Playwright 调用/status 输出/错误处理

结构审计

7 项 SenseNova 设计模式全部落实:

  • ✅ 三层分级 (Tier 1 编排器 + Tier 2 capability × 3)
  • ✅ 产物链契约 (每阶段文件落盘)
  • ✅ 行为边界 (4 个 SKILL.md 含做/不做)
  • ✅ 质量守门 (8 项: CDN/ID/数据上限/canvas/字体/反模式)
  • ✅ 元数据系统 (tier/category/triggers/parent)
  • ✅ 三管线分工 (数据图→本 skill / 架构图→drawio / 手绘图→excalidraw)
  • ✅ 旧资产标记弃用 (chartjs-integration.md header 已改)

与旧方案对比

维度 旧 chart_render.py sn-chart-render
架构 单体 282 行 10 文件管线
模板 CSS 硬编码在 .py 里 templates/ 独立 HTML
配色 只有餐饮色 6 种 palette 可切换
验证 Playwright canvas + 字体
发现 文件路径硬引用 skill_view 可发现
嵌入 不支持 slot 注入 + CDN/ID 冲突处理

…ywright validate

Tier 1 orchestrator with 3 capability sub-skills (rendering, embedding, validation).
Replaces previous hardcoded chart_render.py with modular pipeline.

- SKILL.md: orchestrator with behavioral boundaries, artifact chain, quality gates
- capability/chartjs-rendering: data dict → Chart.js HTML block (6 chart types, 6 palettes)
- capability/chart-embedding: inject chart blocks into existing HTML, CDN dedup, ID conflict avoidance
- capability/chart-validation: Playwright canvas/console/font verification
- scripts/render_chart_html.py: 312 lines, CLI entry for chart-only or full-report template
- scripts/embed_chart_to_html.py: slot-based injection with dry-run support
- scripts/validate_chart_rendering.py: automated Playwright validation
- templates/: replaceable Jinja-style HTML templates
- references/chart-type-selection.md: decision tree for chart type selection

47/47 tests passed across 6 gradient levels (L0-L5).
Audit: all 7 SenseNova design patterns verified.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant