# MakeLore 发布与提交审批要求 这份文件是本插件版本对 MakeLore 一键提交合同的说明,供发布前检查和失败归因使用。MakeLore 客户端实际执行的源码打包、固定构建、双视口预检、上传以及平台返回结果始终是唯一权威。若本说明与当前客户端不一致,必须报告差异并以客户端结果为准。 ## 正确区分四类结果 - **必须具备**:缺失或格式不符会直接阻断发布。 - **直接阻断**:项目当前存在已知会被本地发布链拒绝的内容或状态。 - **打包排除**:文件可以留在项目里,但不会进入源码归档。存在本身不等于违规;只有把构建或运行必需内容放在这些位置才会造成问题。 - **运行时或平台确认**:仅凭静态文件不能下结论,必须由 MakeLore 一键提交实际运行后确认。 静态检查没有阻断项时,只能得出“可进入一键提交,仍需运行期验证”,不能称为“发布通过”或“审批通过”。 ## 必须具备的发布输入 ### 项目身份 - 项目目录必须存在且可读。 - `.makelore/project.json` 必须是 MakeLore 可读取的完整 schema v2 项目配置;不仅 `projectType`,配置中的版本、项目身份、初始化状态、知识目录、Agent 和时间字段也必须保持有效。不要手工缩减为只有项目类型的 JSON。 - 新项目的 `projectType` 必须是 `interactive_ai_app`。已有项目中的 `mini_game` 或 `mini_program` 会在读取时归一化为同一个“交互式 AI 应用”类型;`custom`、缺失配置和无效配置都不能发布。 ### 根目录构建输入 - `package.json`、`package-lock.json` 和 `index.html` 必须位于项目根目录,且都是普通文件而非符号链接。 - `package.json` 和 `package-lock.json` 必须分别是有效 JSON 对象,不能是数组、字符串或其他 JSON 值。 - `package.json` 的 `dependencies.vite` 或 `devDependencies.vite` 必须是非空字符串。 - `packageManager` 可以省略;若存在,必须是以 `npm@` 开头的字符串。 - `package-lock.json.lockfileVersion` 必须是整数 `2` 或 `3`。 - 源 `index.html` 去除空白后必须非空。 - 当前插件脚手架以 npm 11.6.2 生成锁文件;实际发布仍以当前 MakeLore 客户端随附的固定 npm 运行时为准。 ### 固定构建合同 - 发布器在隔离的源码快照中执行 `npm ci --ignore-scripts --no-audit --no-fund --prefer-offline`,不会运行依赖安装生命周期脚本。项目不得依赖 `preinstall`、`install`、`postinstall` 等脚本生成发布必需文件。 - 随后使用锁文件实际安装出的项目 Vite 执行构建,并强制 `--base ./`、独立输出目录和清空输出目录。项目根目录已有的 `dist/` 或 `build/` 不会被直接发布。 - Vite 配置及其插件会以当前桌面用户权限执行;这个构建步骤不是代码沙箱,也不是可信性证明。 - 最终构建产物根目录必须包含普通、非空、有效 UTF-8 的 `index.html`。 ### 数量与大小上限 - 源码归档最多 2,000 个文件,其中包括发布器生成的 `niancode.yml`,因此用户源码最多占其余名额。 - 纳入源码包的文件总量最多 200 MiB;生成的源码 ZIP 最多 50 MiB。 - `package.json` 最大 2 MiB,`package-lock.json` 最大 50 MiB,根 `index.html` 最大 10 MiB。 - 构建产物最多 2,000 个文件,总量最多 50 MiB。 ## 会直接阻断发布的内容或状态 ### 源项目与路径 - 项目配置缺失、无效、类型为 `custom`,或项目目录不存在/不可读。 - 必需根文件缺失、不是普通文件、超过单文件上限、JSON 结构无效、未声明 Vite、声明了非 npm `packageManager`、锁文件版本不受支持,或 `index.html` 为空。 - 未被排除的任意符号链接、目录链接、socket、设备文件等非普通文件类型。 - 相对归档路径为空,含反斜杠、空段、`.`、`..`、冒号,或任一路径段以空格或点结尾。 - 任一路径段是 Windows 保留名 `CON`、`PRN`、`AUX`、`NUL`、`COM1`–`COM9`、`LPT1`–`LPT9`,包括这些名称带扩展名的形式。 - 在大小写不敏感比较下重复的归档路径,例如同时存在 `Logo.png` 与 `logo.png`。 - 源码扫描、读取或写入归档期间文件或目录发生变化。 - 超出源码文件数、源码字节数或源码 ZIP 上限。 ### 构建与产物 - 固定 npm 运行时不可用、`npm ci` 失败、Vite 不可用、Vite 构建失败、构建超时或被取消。 - 构建输出包含符号链接或其他非普通文件。 - 构建输出超过 2,000 个文件或 50 MiB。 - 构建产物根目录缺少 `index.html`,该文件为空或不是有效 UTF-8。 - 构建产物根目录包含大小写不限的 `release.json`。这里禁止的是**最终构建产物的根文件**;源码中同名文件只有在最终被输出到该位置时才会阻断。 ### 页面运行预检 - 构建首页未能在 1280×720 和 390×844 两个视口中全部加载完成并显示可见文字、背景、有效图片/视频、SVG 或尺寸合理的 Canvas。 - 未捕获异常、`console.error`、Chromium Log error、非取消的资源加载失败、渲染进程故障或任意 HTTP 响应状态大于等于 400。 - 预检期间实际发起到本地预览 origin 以外的 HTTP/HTTPS 请求,或页面最终跳转离开精确预览 URL。源码里仅出现 URL 字符串还不能证明会触发该阻断。 - 两个视口共用的 30 秒预检时限耗尽。每个视口加载后只等待短暂稳定时间,因此首屏不能依赖长时间后台任务才出现。 新窗口会被预检环境拒绝打开;项目不应依赖弹窗才能展示首屏或完成启动。 ## 会从源码归档排除、但存在本身不阻断的内容 以下匹配均不区分大小写。目录规则按任意层级的目录名匹配;文件名规则按任意层级的 basename 匹配。 ### 排除目录名 `.cache`、`.git`、`.gnupg`、`.idea`、`.kube`、`.next`、`.makelore`、`.niancode`、`.opencode`、`.project-docs`、`.turbo`、`.vite`、`.vscode`、`.aws`、`.docker`、`.ssh`、`build`、`coverage`、`deploy`、`dist`、`knowledge`、`node_modules`、`secrets`。 ### 排除文件名 `.dockerignore`、`.ds_store`、`.git-credentials`、`.netrc`、`.npmrc`、`art_guide.md`、`asset_plan.md`、`credentials.json`、`debug.log`、`dockerfile`、`docker-compose.yaml`、`docker-compose.yml`、`findings.md`、`gdd.md`、`nginx.conf`、`niancode.yml`、`_netrc`、`id_dsa`、`id_ecdsa`、`id_ed25519`、`id_rsa`、`product_overview.md`、`progress.md`、`release.md`、`task_plan.md`、`tasks.md`、`thumbs.db`、`version.md`、`works-cloud-deploy.json`、`works-deploy-check.json`、`works-publish.json`、`部署报告.md`。 ### 排除模式 - 文件名以 `.env` 开头。 - 文件名以 `.crt`、`.jks`、`.key`、`.keystore`、`.log`、`.p12`、`.pem`、`.pfx`、`.p8`、`.ppk`、`.tfstate` 或 `.tfvars` 结尾。 - 文件名任意位置包含 `.tfstate` 或 `.tfvars`。 - JSON 文件名去掉非字母数字字符后包含 `serviceaccount`、`firebaseadmin` 或 `applicationdefaultcredentials`。 - 项目根相对路径以 `works-` 开头的文件,包括这类顶层目录中的文件。 排除规则的后果: - 不要把项目自己编写的源代码、首屏素材或构建配置只放在上述位置;发布快照看不到它们。 - `node_modules/` 被排除是正常行为,发布器会根据根 `package-lock.json` 重新安装依赖。 - `.npmrc` 被排除,发布器还会显式使用空的临时 npm 配置;项目不能依赖本机或仓库 `.npmrc` 才能安装。 - 项目里的 `niancode.yml` 被排除,发布器会生成自己的固定清单。 - `VERSION.md` 不是必需文件。若它是 64 KiB 以内的稳定普通文件,`Current:` 后不超过 80 字符的值可用于版本名;否则发布器自动生成版本名。无论哪种情况,该文件都不进入源码归档。 - 源码中已有 `dist/` 和 `build/` 不会被上传;最终发布的是固定流程本次生成的构建产物。 不要因为检查发现排除项就要求删除它们。应报告哪些路径被排除,以及是否有证据表明构建或运行依赖这些路径。 ## 首次提交必须提供的平台资料 当前 MakeLore 界面合同要求: - 项目名称:必填,最多 160 个字符。 - 项目简介:必填,最多 2,000 个字符。 - 发布者姓名:必填,最多 160 个字符。 - 发布者年龄:必填,为 1–150 的整数。 - 项目封面:首次提交必填,仅支持 PNG、JPEG 或 WebP,必须非空、内容签名与声明格式相符,最大 10 MiB。 - 详细介绍可选,最多 10,000 个字符。 - 适龄范围和难度可选,各最多 40 个字符。 作品 `app_id` 和类别由当前项目生成,不要求用户另造。若平台已存在状态为 `draft` 或 `published` 的该作品,当前流程只提交新构建版本,并保留平台上的名称、简介、作者信息和封面。窗口打开后平台状态发生变化会产生资料冲突,本次不会覆盖或继续提交。 ## 只能由一键提交和平台确认 - 当前账号是否已登录,登录态是否仍有效。 - 当前本地项目是否仍存在,以及本机固定 Node/npm 发布运行时、npm 缓存和依赖来源是否可用。 - `npm ci`、项目 Vite 配置/插件、实际构建输出和双视口页面运行是否通过。 - 当前账号是否拥有目标作品,平台资料状态是否与发布窗口一致。 - 同一项目是否已有本地构建占用,以及平台是否因现有构建、版本或审核状态拒绝新版本。 - 平台是否接受首次作品资料、封面、源码归档、构建归档和版本化产物合同。 - 云端构建最终是成功、失败、取消还是状态未知,以及运营审核最终是通过还是拒绝。 本 Skill 的静态检查不会安装依赖、执行 Vite 配置、启动浏览器预检、上传归档或提交审核。用户明确发起一键提交后,以该流程返回的错误码、构建状态和平台审核状态为准。 ## 项目检查时的输出顺序 对具体项目做发布就绪检查时,按以下顺序报告,不打分: 1. **结论**:只能使用 Skill 工作流定义的三种结论之一。 2. **阻断项**:仅列有当前证据的直接阻断,并附项目相对路径和观察值。 3. **打包排除影响**:列出实际命中的排除路径及其可能丢失的必需内容;若没有依赖证据,明确写“存在但不阻断”。 4. **待权威流程验证**:列出本次没有也不能静态证明的构建、浏览器、账号和平台项。 5. **已通过静态项**:列出已读取并确认的必要输入,不把未检查项写成通过。