草案
通过公共契约扩展 Mobazha
选择最窄的类型化扩展机制,并保留 Core 权威、能力门槛、运行隔离、恢复和审计边界。
选择正确的机制
- Port:替换 Core 所需能力的一种实现。
- Module:把经过审核的能力组合进一个发行形态。
- Function:定制有边界且确定性的业务决策。
- Controller:协调外部系统或执行外部 I/O。
- OrderExtension:为订单附加带版本的领域数据和生命周期。
应选择只承担一个职责的最窄机制。一个包可以实现多个角色,但每个公共契约只能有一个权威边界。回调不会自动成为 Port,Module 也不是服务定位器。
保留 Core 权威
扩展只能提交声明、决策、观察或证明。Core 校验身份、授权、模式与契约版本、资源绑定、预期状态、幂等性、新鲜度和策略,然后才创建由 Core 拥有的命令或持久事实。
text
扩展输入
-> Core 校验
-> Core 命令或持久事实
-> Core 状态机
-> 审计,并通过受限适配器执行外部动作- 类型化领域契约可以表达需求时,不增加全局通用 Hook。
- Core 保留发布策略、订单状态、支付验证、结算门槛、审计和密钥托管权威。
- 第三方代码不得导入 internal 包、接收完整 Core 对象或访问原始签名材料。
- 扩展不得写 Core 数据表,也不得直接调用内部状态迁移。
- 支付、退款、争议和结算变化必须重新进入带版本和幂等保护的 Core 命令与状态机。
设计规则
- Ports 为窄小、由 Core 定义的能力提供可替换性。
- Modules 提供不可变的启动期组合,并声明身份、版本、依赖、能力、配置、运行类型和生命周期。
- Functions 有边界且确定性,不获得网络、数据库、密钥、时钟或状态迁移权限。
- Controllers 消费持久 Core 事实来协调外部系统,只返回观察或证明。
- 所有模块遵守统一治理,但业务接口保持窄小、类型化和领域化。
- 新扩展点必须有所有者、模式、权限边界、失败语义、幂等与恢复模型、测试和移除计划。
- 不提供全局命名 Hook 总线、运行时可变注册表或万能 Core 服务定位器。
能力与信任门槛
所有激活门槛通过后,扩展能力才可见。源码存在、标识符已知或代码已经链接,都不等于能力已启用。
text
发行允许列表
∩ 契约兼容
∩ 已安装或静态组合
∩ 已授权
∩ 已配置
∩ 健康- 经审核的第一方模块默认静态链接。
- 独立分发或第三方基础设施默认在进程外运行。
- 商家编写的决策规则在该运行时引入后,应进入 Wasm 等受限沙箱。
- 降低隔离等级需要威胁分析和架构决策。
当前实现边界
静态 Order Extension v1 当前已经校验精确契约名称、不可变启动期组合、依赖与循环、能力和接口的一致性,并在缺失能力时失败关闭。它也已经提供只追加的扩展记录、持久生命周期投递、类型化预留绑定,以及重新进入 Core 结算命令的结算证明。
发行允许列表、按租户授权和配置、结构化模块健康、drain、升级、回滚、第三方进程运行时及 Wasm Function 运行时仍是治理目标,不能描述为已经普遍可用。
Collectibles 首个落地案例
- 签名 NFT 元数据成为由 Collectibles 模块生成、带版本的 OrderExtension 声明。
- Token 或库存分配在创建资金目标前通过模块拥有的 ReservationPort 完成。
- 铸造和交付是由持久扩展事件驱动的 Controller 工作。
- 交付证据成为由模块校验的 SettlementAttestation。
- 卖家收款仍由已有 Core 条件结算命令执行。
- NFT、链、铸造、证书和提供方词汇不进入通用 Core API。
Collectibles 用来证明架构,而不是把 NFT 概念提升为万能 Core 抽象。开发期直接切换已经移除产品专用 Hook、结算命令、队列和 FiatMetadata 镜像。
评审新的扩展点
- 明确领域所有者、业务目的、调用者、声明者和授权者。
- 分别对输入、输出、描述符和兼容行为进行版本管理。
- 定义同步或持久投递、顺序、幂等、超时、重试、死信和对账行为。
- 声明能力门槛、权限、敏感数据以及重新进入 Core 状态机的位置。
- 提供迁移、回滚、移除、可观测性、负向测试和一致性证据。
如果这些答案尚不稳定,应把机制保留为私有实现细节,而不是发布另一个通用扩展点。