失败时建立四个独立事实:选定源码、声明契约、本地 runtime、可见/可调用 surface。一步绿灯从不蕴含其他步。
快速分诊
| 症状 | 先跑的命令 | 可能层 |
|---|---|---|
| 脚手架缺文件 | 重跑 create;find 树 | Package 源码 |
| DSL 校验失败 | arc dsl validate <dir> | AUP/DSL 源 |
lint 报 format_changed | arc dsl format --write <dir> | 仅格式 |
| profile check 失败 | arc blocklet check --profile <recipe> | 缺 recipe 资产 |
| 端口占用 | 具名实例(自动分配端口)或 --port。不要 stop 你没启动的种子 daemon | 本地 daemon |
| 路径找不到 blocklet | 确认 blocklet.yaml、.aup/ 或约定入口 | 发现 |
| HTTP 非 200 / 空白 host | 使用打印的 Host / ?blocklet= URL | 路由 |
| 构建 OK、页面不对 | 浏览器验收 + 源码路径检查 | Surface,不是 zip |
| 有状态写入失败 | 确认 /instance 绑定;非仅 seed | Instance 数据 |
| 远程发布失败 | 认证、密钥、网络——见发布页 | 发布路径 |
诊断配方
1. Package 身份
arc blocklet inspect ./my-app
arc blocklet list .
cat ./my-app/blocklet.yaml2. 契约
arc dsl validate ./my-app
arc blocklet check ./my-app --profile minimal-app
arc blocklet dev ./my-appdev 报告内容类型与约定 mount,不提供流量。
3. 产物
arc blocklet build ./my-app
ls ./my-app/dist/.afs/manifest.json ./my-app/dist/blocklet.dist.json4. 本地 surface
export ARC_INSTANCES_DIR=/tmp/arc-instances-demo
arc service start --instance demo --home /tmp/arc-home-demo --blocklet ./my-app
arc service url --instance demo --print url
# 探测打印出来的 host/port;不要假定 4900再在真实浏览器打开同一 URL。
5. 服务状态
arc service status --instance demo
arc service stop --instance demo # 仅当你启动的是这个临时具名实例在 2.0.0-beta.28 上观察到的失败模式
| 观察 | 证据 | 文档立场 |
|---|---|---|
arc blocklet run 因端口占用报错 | 种子实例 4900 被占用 | 具名实例(自动端口)或显式 --port。ARC_SERVICE_PORT 只作用于种子实例 |
新 minimal-app 上 arc dsl lint 报 format_changed | 脚手架输出未格式化 DSL | 记录 dsl format --write;不单方面认定 recipe 坏了 |
无 snapshot 密钥时 arc deploy --publish 失败 | 要求 AFS_DID_SPACE_SNAPSHOT_SECRET | 作为本地发布环境前置,不是 Blocklet 源码 bug |
一次隔离试验中 arc deploy <path> 返回 missing 'dir' | CLI 向 /api/blocklets/dirs/add 提交父目录 | 本地验收优先 blocklet run / service start --blocklet;裸 deploy 注册对环境敏感 |
不要得出的结论
| 证据 | 无效结论 |
|---|---|
check 通过 | 用户看到了正确页面 |
build 通过 | 远程部署可用 |
| 本地 HTTP 200 | /instance 写入与认证流可用 |
| 路径里的历史产品名 | 与该产品功能对等 |
相关板
- CLI 手册:arc blocklet
- AFS 检查:本地检查