double6-workbench-builder · diff
git:20260807.f9d68fe to v0.41.0
41 added, 83 removed. Audit A to A.
---
name: double6-workbench-builder
+ version: 0.41.0
description: 把普通用户反复要做的真实事情构建成离线优先、严格单文件、个人数据留在当前设备的本地工作台。用户提到个人工作台、学习台、备考台、任务面板、记录与复盘工具,或想把重复流程做成可保存恢复的页面时应使用;联网、多人协作、账号、支付和发布属于独立外部流程。
+ metadata:
+ openclaw:
+ homepage: https://github.com/double6-ai/double6-skills/tree/main/skills/double6-workbench-builder
+ emoji: "🧰"
+ requires:
+ anyBins:
+ - python3
+ - python
+ - py
---
# Double6 工作台制作器
- 这是公开共享的 Skill。活动版本、命令与 schema 以 `manifest.json` 为准;本文定义流程语义与不可突破的边界。儿童学习场景的专属细则见 `references/education-rules.md`(路由命中时必读)。
-
- ## 不可突破的边界
-
- ### 交付与数据
-
- - 交付物是可离线打开的单个 `index.html`(文件名固定使用 ASCII,不使用中文文件名);个人数据只写入该产品唯一的 localStorage 命名空间(`data_policy.storage` 固定为 `local_only`),并启用导入导出。
- - 儿童、学生、客户、财务、医疗和健康任务默认使用合成或脱敏数据(`synthetic_or_redacted`)。只有用户明确授权、有权控制数据且确认本地保护条件时,才允许录入真实数据;不得保存 token、密码、Cookie 或会话密钥。这些安全默认不占澄清轮次。
- - 联网数据、多人协作、账号操作、消息发送、公开发布、下单和支付只能标为人工交接或暂不支持;capability mode 只能是 `in_page`、`manual_handoff` 或 `unsupported`。发布由独立宿主流程执行,并以真实链接和内容校验回执为准。
- - 公开发布(云托管)与本机部署(磁盘持久化、局域网访问)是两个不同的方向,都超出单文件交付本身;用户主动提出其中任一方向时,宿主按对应的独立流程直接执行,不要求额外的授权前置。
- - 用户想在手机长期使用或分享时,候选须说明"先备份、确认无真实隐私数据、取得明确授权后再走独立宿主发布流程、拿到真实链接和回执后才可添加到主屏幕"。页面不得自行上线、发送或公开数据。
-
- ### 模块与内容
-
- - 每个工作台选择 4–15 个核心模块。需要新增、删减或保留哪些能力,必须在澄清阶段问清楚;首页只呈现用户确认后的内容,并让每个已确认模块可直接进入,不能在页面底部再用"更多入口""完整能力"补一份未确认的模块清单。能安全采用的设备、本地保存与通用内容默认值直接采用,不要求用户逐项确认。
- - 每个核心模块必须同时具备两层:无需用户先录数据即可操作的内置内容(内部合同名 `starter`)和用户自有记录。内置内容至少包含真实动作、模板、题目、计算器、生成器或参考卡之一,并声明动作结果、手机交互、状态和来源边界;空数组、占位卡、纯说明和只有 CRUD 空表都不算能力。
- - 每个核心模块还必须绑定一种真实交互表面:`action_checklist`、`record_ledger`、`stage_board`、`metric_log`、`review_journal` 或 `reward_economy`,并实现合同声明的增删改查、状态变化、刷新恢复和导入导出。
- - 凡能力语义包含出题、练习、测验或错题,默认直接提供可作答的通用自编题,不得为"是否需要题目"再问用户。每题至少有题干、选项或输入控件、答案、即时对错、解析、知识点、难度和来源标签;教育与备考内容包各至少 12 题,且不得标为"演示"。只有用户明确指定教材、真题、考纲、地区或版本时才询问来源。
- - 通用题不等于随意编题。宿主对年级适配、知识点、答案或安全边界没有把握时,必须先联网检索与该问题匹配的可靠来源:课程对齐优先课程标准或用户指定教材,词义/用法查权威词典,科学与安全事实优先一手机构或学术/科普权威来源;不要把所有题目都伪装成来自官方课程标准。记录实际采用来源的 URL、核验日期和"自编通用/未对齐指定教材"的边界。检索后仍不能决定,应在 `clarifying` 状态向用户询问具体来源、范围或期待答案;不得擅自猜测、伪造来源,也不得静默删掉该类题。教育场景另见 `references/education-content-research-policy.md`。
- - 儿童学习场景的星星经济、参考内容包、各学段题量、口算生成器、功能说明卡与家长回顾等专属细则,统一见 `references/education-rules.md`。
-
- ### 文案与标识符
-
- - 内部标识符不得进入用户可见文案:学段 ID(如 `primary-transition-2-to-3`)、能力 ID(`CAP-XX-XX`)、模块 ID(如 `education-math`)、surface 类型名、`starter`、`action`、`question` 等内容类型字段只能出现在源码、合同与数据属性中。孩子与成人可见的文案里只允许出现友好名称;静态验收与浏览器验收都会扫描可见文案,命中即判候选失败。
- - 治理文案与使用者文案分层:来源边界、未对齐教材声明只能出现在已声明边界的功能说明卡或家长回顾区,不得以"通用内容;有自己的材料时再替换"这类元文案打断主流程;主流程文案使用产品语言(如"可反复练习,进度只保存在这台设备上")。
- - 候选不得携带其他场景的代码与标记:渲染产物只注入当前产品已确认模块所需的脚本;非个人生活场景的候选中不得出现 `life-*` 模块代码、热量/收支等指标标记,静态验收命中即判失败。
-
- ### PWA 与首屏
-
- - 候选必须是"PWA 就绪"的单文件:浏览器标签页 favicon 与添加到主屏幕的图标默认和首页标题旁的品牌块一致——当前视觉模板的 motif emoji 置于模板主色圆角块上,九套模板各一套离线渲染 PNG(`references/app-icons.json`,64 favicon/180/192/512/maskable,由治理脚本 `render_app_icons.py` 渲染)。只有用户明确要求时,才经 `design_brief.icon_override` 换用另一套模板 motif 或 `double6_brand` 品牌图标(源自 `references/page-icon.svg`);非法取值以 ContractError 拒绝。同时内嵌 data-URI manifest(名称、短名称、standalone 显示、主题色与背景色、三张 PNG 图标)和 Apple 主屏元数据(apple-touch-icon 必须用 PNG,SVG 在 iOS 无效)。
- - 只声明元数据:不得注册 service worker,不得声称"已可安装"或"已上线"。真实安装提示只在独立发布流程提供 https 入口后出现;file:// 或局域网打开时浏览器忽略 manifest 属正常行为。内嵌 manifest 与主屏图标不代表已发布或可安装。
- - 每个首页都必须把"今天要处理"放在工作流最前:只汇总带日期、尚未完成且到期日为今天或更早的行动;过期项显示为"已顺延到今天"但保留原始日期,并能在卡片上直接完成。没有待办时只能引导用户从已确认的首要模块开始,不能伪造任务或逾期记录。
- - 首屏同时提供导出备份与导入恢复;本地记录达到 30 条时提示导出。含 `entry_type + amount` 的已确认财务流水可额外导出 CSV。
-
- ### 移动交互
-
- - 题目在手机上采用单题流:大触控选项或合适的数字/文本键盘、提交后即时反馈、解析与错题记录、下一题、刷新后续做;不得把桌面题表缩小后塞进手机。数字答案题必须使用页面内自绘数字键盘(0–9、删除、清空),不得用 `input[type=number]` 调起系统键盘顶掉页面;答对给予明确的庆祝动效(星星飘落),答错给予轻微抖动与正确答案提示,动效不得遮挡作答区。
- - 移动端输入字号不小于 16px;数字字段使用数值键盘。手机和平板统一使用可纵向滚动的左侧导航栏:每项必须是彩色 emoji 加可见的精简文字,竖屏采用上 emoji、下文字的纵向堆叠(电脑横屏保持左 emoji、右文字),文字可以在窄屏适度缩小和换行,但不得隐藏成只剩图标;导航必须列出首页、全部已确认模块和数据入口,不能截断前四项,也不能遮挡正文。
- - 可使用浏览器本机朗读辅助,但不得承诺未实现的语音或智能判定能力。
-
- ## 六步流程
-
- 1. `start` 只保存用户原话和已选择的路由。未提供路由时只返回完整场景目录,不创建 run;新运行只接受当前版本,旧运行保留作历史记录而不混入新状态机。路由文件中的 `evidence_spans` 必须逐字摘自用户原话——校验器做逐字包含比对,概括、改写或编造的片段会以 ContractError 拒绝。
- 2. 状态为 `clarifying` 时用 `respond` 逐次记录关键答案,最多询问三个会改变工作对象、核心动作、数据/来源边界或验收结果的问题。每个问题必须给出推荐值、推荐原因和"按推荐"的可用回答;宿主把"按推荐"标准化为该题的 `recommended_value`。儿童学习场景的澄清顺序与默认值见 `references/education-rules.md`。
- 3. 状态为 `intake` 时,根据不可变的 `recommendation_snapshot` 提交产品合同并调用 `propose`。理解稿同时展示 4–15 个默认模块、每个模块的 starter 数量/类型与确认前可加入的可选模块;不得只在隐藏推理或内部产品 JSON 中列清单。
- 4. 把返回的完整 `conversation_text` 展示给用户。`approve_product` 只能绑定当前理解稿 SHA:从当前 run 的 `product.json` 现读 `presentation.content_sha256`,复用旧值或拿错字段都会以 ContractError 拒绝。确认回执还会绑定不含回执自身的完整产品内容 SHA。确认后只要标题、主能力、模块、内容、扩展事项或边界发生变化,`build` 必须失败并要求重新提案、展示和确认。这仍不独立证明用户在任何宿主 UI 中看过它。
- 5. 产品确认后调用 `build`,只生成一个推荐候选。建议紧接着调用 `evaluate --preflight` 或 `status --environment`;环境未就绪时先修好,不要让用户先做视觉确认。必须先让用户查看当前候选;只有绑定当前候选 SHA 的 `approve_visual` 才能进入验收,`reject_visual` 也必须绑定该 SHA。候选 SHA 取自当前 `build` 返回的 `candidate_sha256`,同样必须现读现用。
- 6. 视觉确认后调用 `evaluate`。通过即为 `local_delivered`;静态或候选质量失败时保留产品确认并用新 build ID 修复。仅缺 Playwright/Chromium 等环境时状态为 `evaluation_blocked`——这是环境问题,不代表候选质量失败;环境就绪后直接重试同一个 `evaluate`,不得强制重建、再次视觉确认、新建 run 或改动已确认的产品合同。`evaluate --skip-browser` 只返回静态预检通过,绝不交付。若反馈需要 renderer/CSS 源码修订,维护者修订后以 `renderer_revised` 事件回到 `ready_to_build`,新 build 自动生成新候选 SHA。
-
- 公开 CLI 为 `start`、`respond`、`propose`、`build`、`evaluate`、`cleanup`、`status`。`start --clone-from <已确认 run>` 只可复用同版本、内容未变且不含真实数据授权的产品确认;候选、视觉确认与评估证据不会复制。`cleanup --run` 恢复事务 journal,并报告受宿主限制而保留的 staging。
-
- ## Windows 与受限宿主环境
-
- - 事务 journal 会在数据全部落盘后标记为 `committed`;受限宿主拦截删除时,残留 journal 或 staging 只会产生 warning,不能把已提交数据报成 CLI 失败。旧 run 可调用 `cleanup --run` 恢复。
- - 以进程 exit code 为唯一成败判据。stderr 中出现 `SAFE_DELETE_FAIL_CLOSED` 是 Windows 沙箱无回收站导致的噪音,只要 exit code 正常即为成功,不要据此重试、判失败或中断流程。
- - 浏览器验收使用 Playwright 与 Chromium。先执行 `evaluate --preflight`;可设置 `DOUBLE6_BROWSER_PYTHON` 和 `DOUBLE6_CHROMIUM_EXECUTABLE`。Windows 会自动尝试 `.venv\Scripts\python.exe`、常见 Chrome 安装路径及 `%LOCALAPPDATA%\ms-playwright`,仍缺失时预检会给出安装指引。
- - 宿主 CLI 操作、浏览器验收守则与本机服务器扩展守则见 `references/host-integration-playbook.md`。
-
- ## 视觉反馈合同
-
- - 自动重建只承诺真正生效且能映射到已登记模板的颜色反馈;它会保留 renderer 与内容结构并切换 palette。视觉模板通过不等于 palette 已通过;只有绑定当前候选 SHA 的用户反馈才能记录为接受。
- - 构图、密度、字体、资产、场景辨识或交互反馈如果需要改 renderer/CSS,状态必须变为 `renderer_revision_required`,由维护者修改源代码后以 `renderer_revised` 事件恢复到 `ready_to_build`;禁止只改 metadata、换 build ID 或空跑三轮。`renderer_revision_required` 是 run 的状态标记,不是第八个状态机节点。
- - 候选使用 `references/vivid-social-template-system.json` 中九套去重模板、九个特定场景 renderer 和一个通用回退 renderer(`generic_dashboard`,未精确命中时使用)。场景不由制作器按关键词自动决定:调用方必须先从路由目录选择主场景、可选子场景,并附用户原话证据;制作器只校验选择合法、生成对应推荐快照。辅助领域不得触发特定 renderer。已登记场景若缺 renderer、四个首屏槽位(hero、primary_surface、progress、supporting_panel)或候选锁漂移,构建必须失败。首屏不得再叠加与模块卡片重复的纯文本快捷入口清单。
+ 把澄清后的真实重复工作做成一个可离线打开的 `index.html`。触发后先读
+ `references/runtime-contract.md`;它是完整运行合同,本文只保留路由和执行入口。
- ## 事件与产品合同
+ ## 核心流程
- - 事件只保留 `event_id`、递增 `turn_index`、未经改写的 `raw_text`、`intent`,以及确认场景所需的 SHA。运行时不读取或保存 provenance、宿主 session、trace、数据库回执、可见回复回查或置信度字段。允许的 intent:`answer`、`approve_product`、`revise_product`、`approve_visual`、`reject_visual`、`switch_scene`、`renderer_revised`。
- - 测试夹具、临时事件和环境变量只能用于自动化测试,禁止写入生产 run、伪造用户回答、产品确认或视觉确认;任何由测试通道产生的确认都不得进入交付状态。
- - 产品文件必须包含 `product_id`、`title`、`facts`、`outcomes`、`work_objects`、`core_flow`、`capabilities`、`recommendation_plan`、`data_policy`、`device_target`(固定为 `responsive_both`)、`design_brief` 和 `boundaries`。`references/product.schema.json` 是宿主提案前对照的产品合同 schema。
- - 教育、课堂和备考任务若声称采用指定教材、真题或考纲,必须登记用户提供或官方可核验的来源;否则只能使用通用内容(`generic_non_claimed`)。
- - `references/scene-capability-starters.json` 与 `references/education-stage-starters.json` 是 starter 内容合同。产品中的 starter 必须来自不可变推荐快照,调用方不得自行删空、替换或伪造。
- - 用户明确提出且需要在模块内长期打卡的周期事项使用 `module_extensions`:每项必须绑定已选模块、真实用户事件证据、标题、结果和 1–7 的星期值,并完整进入理解稿。它与不可变内置内容分层保存,不能靠改内容包或把需求塞进描述文本冒充已实现。
- - blocked 决策必须进入 `unsupported` 边界,不能静默默认。
+ 1. 从 CLI 返回的 16 个领域中选择主场景和最多两个辅助场景;`evidence_spans` 必须逐字摘自用户原话。
+ 2. 用 `start` 建立 run;只询问会改变对象、核心动作、数据边界或验收结果的问题,最多三个,并给出推荐答案。
+ 3. 用 `propose` 展示包含 4–15 个核心模块、内置 starter 和可选模块的完整理解稿;用户确认必须绑定当前理解稿 SHA。
+ 4. 确认后用 `build` 只生成一个推荐候选,再运行 `evaluate --preflight`。环境未就绪时先修复环境。
+ 5. 让用户查看候选;视觉确认或拒绝必须绑定当前候选 SHA。需要改 renderer/CSS 时进入 `renderer_revision_required`,不得空跑重建。
+ 6. 用 `evaluate` 完成静态与浏览器验收;只有完整通过才交付。`--skip-browser` 只是预检,不能形成交付。
- ## 候选数据安全
+ 在 skill 根目录运行 CLI:
- - 导入前必须确认,导入后可立即撤销;清空与删除必须二次确认。
- - 导入文件最大 2 MB,每个模块最多 500 条记录。已知字段按类型归一化,未知字段保守保留在导出文件的 `legacyImport.unmapped` 中。
- - 外部记录 ID 不可信:不符合安全格式时重新生成;所有进入 HTML 属性或 script 的动态值必须转义,禁止把导入内容直接拼进 `innerHTML`。
- - 存储失败时不得丢失表单输入;验收必须先按真实表面填写全部必填字段,再触发保存故障并逐字段比较前后值,不能只填第一个文本框,也不能为了通过测试改变产品主模块。导出、恢复、旧简易 `{value, checked}` 数据兼容和未知字段保留都必须经过浏览器验收。
+ ```bash
+ python scripts/double6.py start --run <run_dir> --request "<用户原话>" --route-file route.json
+ python scripts/double6.py respond --run <run_dir> --event-file event.json
+ python scripts/double6.py propose --run <run_dir> --product-file product.json
+ python scripts/double6.py build --run <run_dir>
+ python scripts/double6.py evaluate --run <run_dir> --preflight
+ python scripts/double6.py evaluate --run <run_dir>
+ ```
- ## 验证
+ ## 必守边界
- 发布门由维护者的治理包执行,不随本 Skill 分发;在维护者项目中的调用方式为:
+ - 交付严格为单个离线 HTML;个人数据仅留在当前设备,并提供导入、导出和恢复。
+ - 儿童、学生、客户、财务、医疗和健康场景默认只用合成或脱敏数据;不得保存 token、密码、Cookie 或会话密钥。
+ - 联网数据、多人协作、账号、消息、支付、下单和公开发布只能标为人工交接或暂不支持,页面不得自行执行。
+ - 每个核心模块必须同时有可立即操作的内置内容和真实交互表面,不能用空表、占位卡或纯说明冒充能力。
+ - 内部 ID、schema 字段和治理术语不得进入用户可见文案;外部导入内容必须限量、转义、可撤销。
+ - 视觉确认、产品确认和候选验收都必须使用当前 run 现读的 SHA,不能复用旧值或伪造确认。
- ```bash
- PYTHONDONTWRITEBYTECODE=1 python -B workflows/double6-workbench-governance/scripts/validate_release.py
- ```
+ ## 按需读取
- 活动门的 60 秒预算只验证核心发布合同:内容包与 starter 完整性、理解稿/产品/候选 SHA 确认链与同 run 重建、儿童教育内容包(题库、口算生成器、星星经济、参考内容包与点读)、PWA 就绪元数据、导航与内部标识符泄漏扫描、周期事项、数据导入导出与完整浏览器交付;逐项明细以治理包测试为准。完整 16 领域浏览器矩阵仅是治理包中的手动诊断,用于内容包大改或专项排障,不阻塞每次发布。
+ - 所有构建:`references/runtime-contract.md`。
+ - 儿童学习:`references/education-rules.md`;内容来源不确定时再读 `references/education-content-research-policy.md`。
+ - Windows、受限宿主、浏览器预检或本机部署:`references/host-integration-playbook.md`。
+ - 产品字段:`references/product.schema.json`;领域、starter、视觉与风险规则使用 `references/` 中对应 JSON 合同。
- 打包、安装目录覆盖、SMB 上传、重启、共享晋升和外部发布都需要用户另行授权。
+ 公开命令与 schema 版本以 `manifest.json` 为准;维护者的安装后发布检查见 `evals/release_sandbox_cases.json`。打包、覆盖安装、共享晋升和外部发布必须由宿主在用户授权后执行。