Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`。
Expand Down
7 changes: 7 additions & 0 deletions scripts/validate_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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')
Expand Down
Loading