02
·
2026-07-09
·main@cf4b810 (2026-07-01 push, package v1.0.0)
guizang-social-card · 归藏社交卡片技能
op7418/guizang-social-card-skill
03
2026-07-09 · run-static-and-live-rendermanifest
🏭
85 / 100Production-ready
📝
🗺
📍
📍
⚛
→
⚗
→
🧬
🛑
0–29
⚠️
30–49
🛠
50–79
🏭
80–100
▼
85
🏭· 85 / 100
85/100
+40+30+12+300
- ✓12 claims passed, no critical failures
- ✓license exists; install path recorded in deployment.install_methods
- ◐release_pipeline=1, recently_active=True
- ✓multilingual_readme=true
- ◐evidence_completeness=portable
#1
#2
#3
#4
npx skills add https://github.com/op7418/guizang-social-card-skill --skill guizang-social-card-skill | any agent with a skills dir (Claude Code / Codex / Cursor) | moderate |
git clone into ~/.claude/skills/guizang-social-card-skill (then npm install + npx playwright install chromium) | any (Node 18+, Playwright, Chromium ~150MB) | moderate |
Playwright + Chromium
确定性 HTML→PNG 渲染引擎 + validate-social-deck.mjs 版式校验;需下载约 150MB 浏览器二进制
开源免费;需要下载匹配的 Chromium build。首次评测曾卡在下载,后续同日补装成功并跑通 render/validate。
Google Fonts (Inter / Noto Serif&Sans SC / Playfair / IBM Plex Mono)
精确排版字体;离线时回退系统字体,几何布局仍成立
装饰层依赖,非必需
免费图库 Unsplash / Pexels / Flickr CC / Wallhaven
用户无图时的兜底取图(用户图优先);落本地 + 写 SOURCES.md
版权未核实,SKILL 要求向用户披露后由用户判断
Mapbox / OSM static tiles + unpkg (lucide icons)
地图组件(旅行路线)与图标;仅对应版式用到
可选组件
12 / 14
· 14
11 1 2
- 🧾claim-001 critical实测:node scripts/check-skill-docs.mjs → 27/27 检查全 PASS,"27 skill doc checks passed.",EXIT_CODE=0。
- 📐claim-002 critical实测:grep M01-M16 → 16 个、S01-S12 → 12 个(共 28)distinct recipe ID;
- 🎯claim-008 critical源码确认:两模板画板为写死像素(.poster.xhs/.square/.wide 固定 w/h),排版全走 CSS Grid + var() tokens,无 Math.random / 无图像模型调用;
- 🖼claim-009 critical追加实测(2026-07-09 同日):Chromium 精确版本补装后,实际渲染出公众号 21:9(2100×900)+ 1:1 (1080×1080)封面对 PNG(sample_wechat-21x9.png / sample_wechat-1x1.png),逐张肉眼验收: Swiss 排版...
- 🔗claim-003 high文件树核对:16 个 references/*.md(platform-specs…qa-checklist)、template-editorial-card.html + template-swiss-card.html、validate-social-deck.mjs、scripts/(che...
- 🧱claim-004 high读取确认:swiss 943 行 / editorial 838 行,各 1 个内联 <style>;
- 📏claim-005 high通读 547 行源码:R1 overflow / R2 footer collision / R3 swiss bold / R4 min font / R5 4-band density / R6 h-xl cap / R7 figure margin / R8 visual bounds /...
- ✅claim-010 high追加实测(2026-07-09 同日):`npx playwright install chromium` 补装 chromium_headless_shell-1223 成功后,对样本 deck 实跑 validate-social-deck.mjs。
- 🎣claim-011 high静态证据强:description 列全 小红书/Rednote/social card/封面/Live Photo/Swiss/magazine 等触发词 + 明确「不适用」(PPT / 长视频 / 纯修图);
- 🛑claim-012 high静态确认:SKILL「Do not use this skill for…」+「Outside scope — push back honestly」+ Non-Negotiables (不 fake data / 不裁掉人脸关键 UI / 不发明装饰)+ check-skill-docs 断言的...
- ⚖️claim-006 mediumLICENSE 34524 bytes,首部 "GNU AFFERO GENERAL PUBLIC LICENSE";
- 🎬claim-007 mediumcheck-skill-docs.mjs 已断言 live-photo-production.md 的 Information Budget / Triple Collage / Material-First / Long Video Intake / four-grid / visible-co...
- 📱claim-013 medium未实测。
- 🌐claim-014 medium未实测。
input_contract | |
|---|---|
output_contract | |
determinism | |
idempotence | |
no_skill_callouts | |
failure_mode_clarity |
workflow_correctness | |
|---|---|
declared_call_graph | |
stop_conditions | |
handoff_points | |
atom_evidence | |
error_propagation | |
partial_failure_handling |
- evidence_completeness='portable' → capped at 'reusable'
archetype: hybrid-skill→core_layer_tested? True→evidence: portable→recommended: reusable→final: reusable
ceiling 1 · evidence_completeness='portable' → capped at 'reusable'
| claim-001 | check-skill-docs.mjs 确定性 doc-integrity 校验 | critical | support-validation | ● passed | |
| claim-002 | 28 版式 + 10 主题的设计系统真实且已 wire | critical | support-design-system | ● passed | |
| claim-003 | SKILL.md 引用完整性 | high | support-skill-integrity | ● passed | |
| claim-004 | 两套种子模板自包含单文件 | high | support-templates | ● passed | |
| claim-005 | validate-social-deck.mjs 是真实 9 规则版式校验器 | high | support-validation | ● passed | |
| claim-006 | 真实 AGPL-3.0 + 双授权(package.json 误标 ISC) | medium | support-license | ● passed | |
| claim-007 | Live Photo 管线文档 + 脚本齐备 | medium | support-livephoto | ● passed | |
| claim-008 | 确定性 by construction(固定像素 CSS,无图像模型) | critical | core-determinism | ● passed | |
| claim-009 | 核心 molecule 承诺:文章 → 可用封面对 / 组图 PNG | critical | core | ● passed | |
| claim-010 | 版式关卡对真实渲染放行 | high | core-validation | ● passed | |
| claim-011 | 触发 / 能力圈精度设计 | high | core-triggering | ◐ partial | |
| claim-012 | 诚实自限(圈外主动说清) | high | core-scope | ● passed | |
| claim-013 | Live Photo → 有效 .pvt(真机) | medium | core-livephoto | ○ untested | |
| claim-014 | 网络取图 + 文字压图主体避让 | medium | core-imagery | ○ untested |
16
run-static-and-live-render
2026-07-09
2 / 2
- claim-009 · passed
- claim-010 · passed
run-static-and-render-attempt
2026-07-09
10 / 14
- claim-001 · passed
- claim-002 · passed
- claim-003 · passed
- claim-004 · passed
- claim-005 · passed
- claim-006 · passed
- claim-007 · passed
- claim-008 · passed
- claim-009 · untested
- claim-010 · untested
- claim-011 · passed_with_concerns
- claim-012 · passed
- claim-013 · untested
- claim-014 · untested
run-static-and-live-render
2026-07-09
2 / 2
- claim-009 · passed
- claim-010 · passed
run-static-and-render-attempt
2026-07-09
10 / 14
- claim-001 · passed
- claim-002 · passed
- claim-003 · passed
- claim-004 · passed
- claim-005 · passed
- claim-006 · passed
- claim-007 · passed
- claim-008 · passed
- claim-009 · untested
- claim-010 · untested
- claim-011 · passed_with_concerns
- claim-012 · passed
- claim-013 · untested
- claim-014 · untested
# Final Verdict ## Repo - **Name**: op7418/guizang-social-card-skill - **Version tested**: main@cf4b810 (2026-07-01 push, package v1.0.0) - **Date**: 2026-07-09 (initial eval) + same-day follow-up run (live render) - **Archetype**: hybrid-skill - **Layer**: molecule - **Score**: 85 /100 (from `verdict_calculator.py`, not judgement — updated same day after live render) - **Category**: 🏭 Production-ready / 可用于生产 - **Tier**: 🏭 Team-ready / 团队就绪 (≥80) ## Plain English - 采用即得 (if adopted): 从一篇文章一句话渲出成品级社交图组——小红书 3:4 组图与公众号 21:9+1:1 封面对,28 版式 × 10 主题,产物是确定性的 HTML→PNG(固定像素 CSS,不是图像模型),版式底线由一个 9 规则 DOM 校验器 + 一个零依赖文档校验器兜住。**本次同日追加实测:真的渲出了 21:9+1:1 封面对 PNG 并肉眼验收,无明显缺陷;版式校验器真跑通,且第一轮就真的抓到一个样本里的实际缺陷(标题超行)。** - 何时后悔 (regret when): 指望它把封面渲得「有品味」(脚本只保证不溢出/可读/够密;本次肉眼验收的是「工整、无缺陷」,不是审美主观判断的替代,且只验了 1 个主题 × 1 篇文章);或没预料到它硬依赖 Node + Playwright + 可下载的 Chromium(~260MB,隔离环境第一次尝试超时,第二次补装成功);或在这个 AGPL-3.0 copyleft 仓库上改代码再分发 / 做对外 SaaS(会触发开源义务或需付费商业授权);或指望这次验收覆盖了真机发布到公众号编辑器的效果(未测,只验证到"产出正确的静态 PNG")。 ## Why This Score 核心承诺是「文章 → 符合调性、可直接发布的封面对 / 组图 PNG」。初次评估把**确定性支撑层**打穿了(文档校验器 27/27、28×10 设计系统核实、双模板自包含),但核心渲染层因隔离环境缺 Chromium 精确版本未能验证,77 分被 core_layer_tested=false 压在 usable(🛠 可使用)。 **同日追加实测翻转了这一点**:`npx playwright install chromium` 补装 `chromium_headless_shell-1223` 成功后,对同一份样本封面对**真的**跑了 `validate-social-deck.mjs`——第一轮报 1 clean/0 fail/1 WARN(R6:21:9 标题渲成 2 行,超单行上限),这不是空跑,是校验器真的抓到了我样本里的一个真实缺陷;改窄标题后第二轮 2 clean/0 fail/0 warn。随后用 Playwright 独立截图两块 poster,产出真实 PNG,肉眼逐张验收:Swiss 排版工整、IKB 蓝仅出现在 2 处(分类标签+分隔线,未越界)、中文渲染清晰无乱码、"越大越轻"字重规则视觉成立、留白节奏舒适——**没有发现明显缺陷**。claim-009(核心 on-brand 承诺)与 claim-010(版式关卡对真实渲染放行)双双由 untested 转 passed,`core_layer_tested` 由 false 改 true,`evidence_completeness` 由 partial 升级 portable。分数 77 → **85**(🏭 production / team)。 ### Top 3 score drivers(更新) - +30(封顶): 静态 claim —— 4 个 critical 全部通过(含追加实测的 claim-009 核心承诺 + claim-010 版式关卡),12/14 claim 通过、0 失败,仅 2 个非核心分支(Live Photo、网络取图)仍未测。 - +12 : 维护证据 —— eval 纪律 +5(两个真实校验器,均已实测跑通)、近 90 天活跃 +5、双语 README +2。(release_pipeline +0:无 git tag / release / CI。) - +3 : 生态 —— 4808★ 落 [1000,5000) 档给 +3(离 5000→+6 就差一点);molecule 无 layer 加成;真实 AGPL-3.0 → 0 罚分。 ### Core outcome(更新) 可观测有效(支撑层 + 核心层):`check-skill-docs.mjs` 27/27 exit 0;28 版式 + 10 主题真实且 wire 进自包含模板;`validate-social-deck.mjs` 真实运行、真的抓到并验证修复了一个缺陷;AGPL-3.0 为真;**真实渲出的 21:9+1:1 封面对 PNG 经肉眼验收无明显缺陷**。 仍未观测:Live Photo→.pvt、网络取图封面、多主题/多文章批量一致性、真机发布到公众号编辑器的落地效果。 ### Scenario breadth(更新) 支撑层:doc 校验器 1 次全通过;28 版式 / 10 主题 / 2 模板全量静态核实。核心层:**1 个主题(IKB)× 1 篇样本文章 × 2 块板(21:9+1:1)已渲染 + 版式校验 + 肉眼验收**——核心层广度从 0 提升到「单样本已验证」,但仍未做多主题/多文章的批量覆盖。evidence_completeness = portable(不是 full)。 ### Repeatability 支撑层可复现:doc 校验器确定性(同输入同结论、退出码稳定);grep 计数可重放。核心层「by construction」的确定性**本次得到部分经验验证**:两轮跑校验器(改标题前后)行为符合预期、退出码稳定;仍未做同输入的双渲染逐位比对;字体走 CDN 是唯一潜在像素变量。 ### Failure transparency 高。版式校验器对每条 R1-R9 FAIL 给出像素级 message + 分级修正建议,任一 FAIL 退出 1;本次亲历:R6 WARN 消息清楚指出"哪个元素、超了几行、上限是多少、怎么修",据此直接改对了标题。doc 校验器逐项 PASS/FAIL 打印并在失败时退 1。 ## What Would Move The Score Up 1. (抬到 full / recommendable)多主题(Editorial × 4 剩余 + Swiss 其余强调色)+ 多篇不同题材文章批量渲染 + 校验,验证一致性而非单样本。 2. 补测 Live Photo→.pvt(claim-013)与网络取图封面(claim-014)两条未测分支。 3. 真机发布到公众号编辑器一次,验证粘贴/上传路径与本地 PNG 是否一致(本次只验证到本地渲染正确)。 4. 向上游提 PR 修正 package.json 的 ISC→AGPL 误标。 ## Remaining Risks Ranked. | Risk | Severity | Impact | Mitigation | |---|---|---|---| | AGPL-3.0 copyleft + 双授权 | High | 改代码再分发 / 做对外 SaaS 触发开源义务,否则需付费商业授权(10-30 万 / 3 万) | Park 仅内部做封面自用(不触发);若要产品化,先谈商业授权 | | 硬依赖 Node + Playwright + Chromium(~260MB) | Medium | 无浏览器时整条渲染管线不可用;首次安装可能因网络限流失败(本次即遇到过一次) | 部署前预置 chromium;离线环境不可用需提前告知 Vera | | 审美覆盖面窄(本次只验 1 主题×1 文章) | Medium | 其余 9 套主题、不同题材文章的效果未知 | 正式采用前多主题/多文章批量抽验 | | 未验证真机发布路径 | Medium | 本地 PNG 正确 ≠ 公众号编辑器粘贴/上传后效果一致 | Vera 首次使用时做一次真机发布验证 | | 仓库年轻、单作者、无 CI/tag | Low-Med | 长期维护 / 回归风险 | 观察 issue 响应;锁定 commit cf4b810 自用 | | package.json license 误标 ISC | Low | 授权歧义 | 以 LICENSE(AGPL-3.0)为准;上游提 PR 修正 | ## Verdict 采用,归 **Vera(视觉/配图 Manager)** 作 **封面/社交卡片主线(primary)**:公众号 21:9+1:1 封面对 + 小红书组图,渲出的 PNG/URL 交给 gzh-design 的封面槽(park-content-v1 05_production 主 / 06_assembly 支撑)。与 ponyo(小红书钩子标题公式)是**互补不同子赛道、非备胎**——ponyo 打磨钩子那行字,guizang 渲整张封面。**限定内部使用**以让 AGPL copyleft 保持休眠。**已完成从 🛠 可使用到 🏭 生产线的关键验证**(版式校验器真跑通 + 真实 PNG 肉眼验收无缺陷);下一步最小动作是多主题/多文章批量抽验 + 一次真机发布验证,把证据从 portable 推向 full。 ## Related Artifacts - Claim map: `claims/claim-map.yaml` - Plan: `plans/2026-07-09-eval-plan.md` - Runs: - `runs/2026-07-09/run-static-and-render-attempt/run-summary.yaml`(初次评估,浏览器受阻) - `runs/2026-07-09/run-static-and-live-render/run-summary.yaml`(同日追加:Chromium 补装成功、真跑校验器、真实渲染 + 肉眼验收)+ artifacts/(sample deck HTML + 两张真实 PNG) - Verdict calculator input: `verdicts/2026-07-09-verdict-input.yaml`(同日更新:core_layer_tested→true, evidence_completeness→portable) - Rendered HTML dossier: `verdicts/2026-07-09-verdict.html` (calculator) + vault `dossier.html` (render_verdict_html.py)

