From afdec15df81430514e145a909bfbe307d8fcd257 Mon Sep 17 00:00:00 2001 From: loong10k <20489781+loong10k@users.noreply.github.com> Date: Sat, 31 Oct 2026 22:51:53 +0800 Subject: [PATCH] Describe all locked desktop package routes without GUI acceptance claim --- README.md | 2 +- README.zh-CN.md | 2 +- scripts/validate_docs.py | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4ae74af..6ff82f5 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ The native `.ecproj` project is the source of truth. There is no second document ### Prerequisites -- Seven native CLI platform/architecture targets are locked; use the matching pinned artifact. Current acceptance evidence covers macOS arm64 only. Targets outside the lock return `unsupported_platform`; the other locked targets are available for installation but have no equivalent runtime acceptance claim. The owned desktop path supports only the two locked macOS architectures. +- Seven native CLI platform/architecture targets are locked; use the matching pinned artifact. Current acceptance evidence covers macOS arm64 only. Targets outside the lock return `unsupported_platform`; the other locked targets are available for installation but have no equivalent runtime acceptance claim. The owned desktop installer routes two macOS targets through pinned DMG packages and five Linux/Windows targets through pinned native desktop packages. Those locked paths do not establish GUI acceptance; cross-platform GUI acceptance remains `NOT_RUN`. - No preinstalled Python is required for the managed entry: `launch.sh` / `launch.ps1` provisions the pinned isolated Python 3.13.16 and the EffectCraft CLI in the user data directory. - Node.js 24 or newer for the embedded editor MCP server. A Git checkout has no `ui/dist/`; build it per `ui/README.md` first, or install a release bundle that ships it. - First use needs network or pinned archives. `--runtime-home` or `CRAFT_RUNTIME_HOME` relocates the runtime root (`~/.local/share/craft-runtimes` by default). No `sudo`, no `PATH` edits. diff --git a/README.zh-CN.md b/README.zh-CN.md index 82187da..0f2ad8b 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -37,7 +37,7 @@ EffectCraft Use 让编码智能体驱动原生 EffectCraft CLI:从素材规划 ### 前置条件 -- 原生 CLI 已锁定七种平台/架构目标,须使用对应固定制品;当前验收证据仅覆盖 macOS arm64。锁外平台返回 `unsupported_platform`;其余锁内平台可安装,但不据此宣称同等运行验收。受控桌面路径仅支持锁定的两种 macOS 架构。 +- 原生 CLI 已锁定七种平台/架构目标,须使用对应固定制品;当前验收证据仅覆盖 macOS arm64。锁外平台返回 `unsupported_platform`;其余锁内平台可安装,但不据此宣称同等运行验收。受控桌面安装器对两个 macOS 目标使用固定 DMG,对五个 Linux/Windows 目标使用固定原生桌面包。锁定安装路径不代表 GUI 已验收;跨平台 GUI 验收仍为 `NOT_RUN`。 - 受管理入口不需要预装 Python:`launch.sh` / `launch.ps1` 会在用户数据目录准备固定的隔离 Python 3.13.16 与 EffectCraft CLI。 - 内嵌编辑器 MCP 服务需要 Node.js 24 或更新版本。Git 检出没有 `ui/dist/`,需先按 `ui/README.md` 构建,或安装自带该目录的发布包。 - 首次使用需要网络或固定归档。`--runtime-home` 或 `CRAFT_RUNTIME_HOME` 可迁移运行时根目录(默认 `~/.local/share/craft-runtimes`)。不需要 `sudo`,不修改 `PATH`。 diff --git a/scripts/validate_docs.py b/scripts/validate_docs.py index 96a61d5..2c56fd0 100644 --- a/scripts/validate_docs.py +++ b/scripts/validate_docs.py @@ -62,6 +62,11 @@ installed_names = {path.name for path in (ROOT / 'skills').iterdir() if path.is_dir()} if locked_names & local_names or installed_names != locked_names | local_names: errors.append('installed skills differ from locked and plugin-local inventory') +runtime_targets = set(json.loads((ROOT / 'skills/effectcraft-harness/scripts/runtime.lock.json').read_text())['artifacts']) +desktop_targets = set(json.loads((ROOT / 'skills/effectcraft-harness/scripts/desktop-platforms.lock.json').read_text())['artifacts']) +mac_targets = {'darwin-arm64', 'darwin-x86_64'} +if len(runtime_targets) != 7 or len(desktop_targets) != 5 or desktop_targets != runtime_targets - mac_targets: + errors.append('desktop and runtime platform locks differ from documented routes') for filename in ('README.md', 'README.zh-CN.md'): readme = (ROOT / filename).read_text() if 'badge/release-' + manifest['version'].replace('-', '--') + '-1A73E8' not in readme: @@ -70,6 +75,8 @@ errors.append(filename + ': stale skill count badge') if ('outside the lock' if filename == 'README.md' else '锁外平台') not in readme: errors.append(filename + ': platform support scope missing') + if ('five Linux/Windows targets' if filename == 'README.md' else '五个 Linux/Windows 目标') not in readme or ('cross-platform GUI acceptance remains `NOT_RUN`' if filename == 'README.md' else '跨平台 GUI 验收仍为 `NOT_RUN`') not in readme: + errors.append(filename + ': desktop package routes or GUI acceptance scope missing') source_plan = json.loads((ROOT / 'docs/skills-source-plan.json').read_text()) if len(lock['sources']) != 1 or any(source_plan.get(field) != lock['sources'][0].get(key) for field,key in [('package','package'),('sourceRef','ref'),('sourceSha','sha')]): errors.append('source plan identity differs from immutable skill lock')