Skip to content

serve 对「bare defineStack config + objects、无 dist artifact」的形态启动失败:Service 'manifest' is async - use await #3887

Description

@os-zhuang

一句话说明

一个只有 objectstack.config.ts(defineStack + objects)、没有 dist/objectstack.json 的工程,objectstack serve 启动失败,报 ✗ Service 'manifest' is async - use await。这是 #3886 做 stashed-baseline 对照实验时发现的预存问题(基线与改动后逐字节同样失败),按 PD#10 记录。

复现

mkdir demo && cd demo   # 需在 @objectstack/spec 可解析的目录下
cat > objectstack.config.ts <<'TS'
import { defineStack } from '@objectstack/spec';
export default defineStack({
  manifest: { id: 'com.test.cfgload', name: 'CfgLoad', type: 'app', version: '1.0.0' },
  objects: [{ name: 'cfg_note', label: 'Note', fields: { title: { type: 'text' } } }],
});
TS
OS_DATABASE_URL=memory://x objectstack serve -p 38746

输出:

[StandaloneStack] artifact read FAILED: path='.../dist/objectstack.json' error=ENOENT ...
  ✗ Service 'manifest' is async - use await

事实核实

报错文案指向 kernel 的 service factory 异步检测(Service 'X' is async - use await),大概率是某处对 getService('manifest') 的同步调用在此形态下撞上了 async factory —— 没有继续深挖,避免在 #3886 里扩 scope。

影响

新手最自然的动作之一(「写个 config 直接 serve」)在无 artifact 时启动失败,且报错与真实原因(缺 artifact?manifest 服务时序?)相距很远。

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions