-
生成前门禁 (pregen,强制)
执行校验时,若使用当前 Cowork 工作目录(与 frontend-design 等技能一致),必须传入 --workspace-root;若使用应用默认工作目录则可不传。示例(工作目录为默认 ~/idbots/project 时):
node metabot-create-metaapp/scripts/validate_metaapp_checklist.js --phase pregen --project ~/idbots/project/<project_name>
若 Cowork 会话的工作目录为自定义路径 <workspace_root>,则必须传入:
node metabot-create-metaapp/scripts/validate_metaapp_checklist.js --phase pregen --project <workspace_root>/<project_name> --workspace-root <workspace_root>
通过条件:目标目录位于允许的工作目录下、模板/基线文件完整、开发指南文件存在。
-
交付前门禁 (predeliver,强制)
执行(--project 为实际生成的项目绝对路径,无需 --workspace-root):
node metabot-create-metaapp/scripts/validate_metaapp_checklist.js --phase predeliver --project <workspace_root>/<project_name>
通过条件:最小可运行文件集齐全、index.html 核心脚本与 id-connect-button 渲染存在、app.js 基础命令注册齐全、登录核心文件与 idframework/ 基线对齐、无上级运行依赖引用。
-
启动验收门禁 (smoke test,强制)
在通过 predeliver 后,必须执行”可启动 + 控制台无报错”验收,未通过不得交付:
- 在当前工作目录(即生成项目所在根目录,与 frontend-design 一致;默认未设置时为
~/idbots/project)下启动本地服务:
npx http-server . -a 127.0.0.1 -p 5602 -o /<project_name>/index.html -c-1
- 打开页面后执行首屏验证:页面能正常渲染、
id-connect-button 显示正常、业务主组件可见。
- 打开浏览器控制台检查:不得出现会影响运行的错误(如
No command registered for event: ...、模块加载失败、脚本 404、未定义对象异常等)。
- 若发现报错:必须先定位并修复(例如补齐
app.js 命令注册、补齐缺失文件引用、修正加载顺序),然后重复 1)-3) 直到控制台无阻塞性错误。
- 仅当
predeliver + smoke test 均通过,才允许告知用户本地启动命令并交付。
-
打包门禁联动 (强制)
scripts/package_metaapp.js 已内置 predeliver 硬检查;若检查失败,打包必须中止。
-
前置阅读 (Critical): 开发前必须读取并理解 references/MetaApp-Development-Guide.md。
-
脚手架基线 (强制): 必须以 templates/ 作为生成基线,不允许绕过模板从零散文件拼装生成。
-
项目目录位置 (强制): 使用 metabot-create-metaapp 生成 MetaApp 时,目标项目目录必须创建在当前 Cowork 工作目录下(与 frontend-design 等技能一致)。若用户未设置 Cowork 工作目录,则使用应用默认目录(通常为 ~/idbots/project/,即 macOS/Linux 下 $HOME/idbots/project/,Windows 下 %USERPROFILE%\idbots\project\)。禁止将生成产物放在仓库目录内或 metabot-create-metaapp/ 目录内。示例:工作目录为默认时生成到 ~/idbots/project/Simple-ID-Buzz/;工作目录为 ~/my-apps 时生成到 ~/my-apps/Simple-ID-Buzz/。调用 pregen 门禁时,若使用自定义工作目录,必须传入 --workspace-root <工作目录>。
-
index.html 基线继承 (强制): 目标项目 index.html 必须以 templates/index.html 为基础生成,默认应完整保留其中与登录态初始化、localStorage 持久化、Metalet 事件监听、App/WebView 兼容处理相关的核心逻辑;仅允许做业务区块插入或必要配置调整,禁止删改导致这些能力失效。
-
依赖独立化 (强制): 基于 idframework 生成 MetaApp 时,所有运行依赖文件(idframework.js、utils/idconfig.js、utils/idutils.js、vendors/metaid.js、vendors/crypto.js、vendors/socket-client.js、commands/、components/、stores/ 等)必须放置在目标项目目录内并使用项目内相对路径引用。禁止通过 ../ 或其它上级目录路径引用 metabot-create-metaapp 下文件作为运行依赖。
-
多 MetaApp 并存隔离 (强制): 当本地同时存在多个 MetaApp 项目时,生成器必须保证每个项目为“完全独立版”。运行时依赖只允许来自当前目标项目目录,严禁引用任意其它 MetaApp 目录文件(例如 ../Snake-Score-MetaApp/*、../IDChat/*、../<other-metaapp>/*)。若发现跨项目引用,视为生成失败,必须改为将所需文件复制到当前项目内并改为项目内相对路径。
-
最小可运行文件集 (强制): 生成任何 MetaApp 至少应包含并正确接线以下文件:index.html、app.css、app.js、idframework.js、utils/idconfig.js、utils/idutils.js、bootstrap-stores.js、app-env-compat.js、components/id-connect-button.js、commands/FetchUserCommand.js、commands/CheckWebViewBridgeCommand.js、commands/CheckBtcAddressSameAsMvcCommand.js。缺少任一项视为生成不合格。
-
按业务白名单引入 (强制): 除“最小可运行文件集”外,其余 commands/、components/、stores/ 文件必须根据当前业务需求按需引入,禁止整包复制模板样例。
-
默认禁带无关业务模块 (强制): 生成某一具体业务 MetaApp(例如 Snake)时,若需求未涉及 Buzz/Chat/支付审批,不得默认引入或注册 FetchBuzzCommand.js、PostBuzzCommand.js、SendChatMessageCommand.js、GetPinDetailCommand.js、components/id-buzz-list.js、components/id-post-buzz.js、components/id-chat-input-box.js、stores/chat/useApprovedStore.js 等无关模块。
-
命令注册时序防竞态 (强制): app.js 中所有基础命令与业务命令(至少包含 fetchUser、checkWebViewBridge、checkBtcAddressSameAsMvc 及业务新增命令)必须在模块加载阶段完成注册(例如顶层立即注册或“框架就绪后立即重试注册”);禁止仅在 DOMContentLoaded 内延后注册,避免首屏阶段出现 No command registered for event: ...。
-
早期 dispatch 保护 (强制): 若 components/* 或 app-env-compat.js 在 connectedCallback/首屏初始化期间会触发 IDFramework.dispatch(...),必须先确保对应命令已注册(例如轮询 IDController.commands.has(cmd)、封装 waitForCommand),再执行 dispatch。
-
目录结构对齐 (强制): 生成结果必须对齐 templates/ 的目录组织(入口文件 + commands/ + components/,以及按需 stores/)。禁止生成与模板结构明显不一致的“扁平化”或“缺目录”项目。
-
基线文件强一致 (强制): 凡使用 metabot-create-metaapp/ 下文件开发 MetaApp 业务(包括但不限于 idframework.js、commands/FetchUserCommand.js、components/id-connect-button.js、bootstrap-stores.js、app-env-compat.js 等),目标项目实现必须与 metabot-create-metaapp/ 对应基线文件保持能力与行为一致;禁止由 LLM 自主决策进行阉割、简化、删减关键流程或弱化异常处理。
-
核心依赖基线强制代码平移 (最高优先级): 生成任意 MetaApp 时,以下 6 个文件必须从 metabot-create-metaapp/idframework/ 同路径文件进行强制性代码平移(作为唯一真值来源),app-env-compat.js 必须从 templates/ 平移;只允许在其上做增量扩展,不允许任何删减/阉割/简化:
idframework.js、bootstrap-stores.js、commands/FetchUserCommand.js、commands/CheckWebViewBridgeCommand.js、commands/CheckBtcAddressSameAsMvcCommand.js、components/id-connect-button.js;另含 templates/app-env-compat.js。
若业务无需某些扩展逻辑,可保持与基线一致;但不得以“精简版/改写版”替代。
-
核心依赖基线交付前验收 (强制): 交付前必须完成并通过以下自检:
- 目标项目上述 7 个基线文件均存在,且路径与命名完全一致;
app.js 已注册 fetchUser、checkWebViewBridge、checkBtcAddressSameAsMvc 三个基础命令;
index.html 已按基线引入 bootstrap-stores.js、idframework.js、components/id-connect-button.js、app-env-compat.js;
- 基线文件能力完整,不存在删除关键流程、删除异常处理、删除监听链路等“减配”行为(允许新增,但不允许减少);
任一未通过即视为不合格,不得交付。
-
命令注册时序交付验收 (强制): 交付前必须确认:
app.js 可在不依赖 DOMContentLoaded 的情况下完成命令注册(包含基础命令与业务命令);
- 首屏初始化链路(含
app-env-compat.js、业务组件 connectedCallback)中所有 dispatch 的命令均已可用;
- 浏览器控制台不得出现
No command registered for event: ...。
-
架构模式:
- View:
components/*.js (Web Components + Alpine.js)。禁止在组件内写业务逻辑。
- Logic:
commands/*.js (Command Pattern)。所有 API 调用、状态变更必须在此完成。
- Core:
idframework.js (MVC 核心) + app.js (配置与注册)。
**注意: ** MetaApp 是运行在 MetaWeb 上的去中心化应用,代码质量直接决定用户资产安全。MetaBot 必须确保逻辑严密,并优先使用 commands/ 封装业务。