Skip to content

Delivery:代码区块通过类型化 outputs/inputs 完成 Tab/Page 联动 #1395

Description

@JAVA-LW

Issue 元数据

纵向交付结果

页面作者可以把区块 A 的结构化 BlockResult.outputs 暴露为类型化端口,并把它绑定到区块 B 的 ctx.inputs;Tab 内默认联动,跨 Tab 时显式选择 Page scope。一次成功运行原子提交全部 outputs,依赖图有界调度下游,环形依赖在 V1 被明确拒绝。

本 Delivery 必须交付“声明端口 → 连接两个区块 → 运行生产者 → 原子发布 → 调度消费者 → UI 更新”的完整纵向结果。

结算的 Root AC

  • AC-006:两个区块通过类型化 outputs → ctx.inputs 完成 Tab/Page 联动。
  • AC-007:Signal 原子提交、单写多读、拒绝环;Event Bus 与共享状态分离。

范围与所有权

范围内

  • Page Document input/output port Schema、source block/output identity、本地 input alias、Tab/Page scope。
  • BlockContext<TInputs>.inputsBlockResult<TOutputs>.outputs 的编译、运行和 Schema 校验。
  • 成功运行后 outputs 原子提交;编译/运行/Schema 失败时保留上一成功快照或明确无值,不发布半成品。
  • Signal 单生产者、多消费者;Tab 默认,Page 显式;页面会话级生命周期。
  • Runtime Coordinator 依赖图、拓扑调度、同批更新合并、stale run 隔离、V1 环检测和拒绝。
  • 端口连接 UI、类型兼容提示、断开/重连、删除生产者/端口后的失效状态。
  • Event Bus 多发布/多订阅与 Signal 状态语义分离。
  • 设计模式和 Draft Run 变量观测所需的 Signal snapshot/trace contract。
  • [Root] Frontstage 代码区块浏览器运行时编排与加载体验 #1382 coordinator 串行集成,保持其可视优先、并发、取消和预算语义。

非目标

  • Page Signal 持久化、跨页面/跨应用共享或数据库写入。
  • 多生产者可变共享状态、last-write-wins 全局池。
  • maxEventChainDepth 掩盖依赖环。
  • Event replay、durable event log 或消息队列。
  • 自动从任意 TypeScript AST 推断运行时 Port Schema;Page Document 是 Schema 真值。
  • 本 Delivery 不重做 Draft Run Console/Window UI,只暴露 Delivery 3 所需观测 contract。

独占模块 / 集成边界

  • Page Document port/binding contract、Block Context/Result generics 的 Signal 消费部分。
  • Frontstage Runtime Coordinator 的依赖图、Signal store、调度与生命周期。
  • Canvas/Studio 的端口连线与输入输出设置。
  • 依赖 Delivery 1 交付的新 BlockModule/BlockResult/BlockContext 基础 contract。
  • [Root] Frontstage 代码区块浏览器运行时编排与加载体验 #1382 的 scheduler/coordinator 路径有高写冲突风险,必须从最新 assembly 串行装配,不并行修改同一路径。
  • Delivery 3 只读消费 Signal snapshot/trace,不拥有 Signal 语义。

验收证据

编号 可观察结果 证据
D2-AC-01 区块 A 暴露 total:number,区块 B 绑定后可通过 ctx.inputs.total 渲染更新 Page Document/runtime + Playwright
D2-AC-02 默认 Tab scope 不泄漏到其他 Tab;显式 Page scope 后跨 Tab 可读取,切换 Tab 值保留 scope fixtures + browser
D2-AC-03 刷新或离开页面后 Page Signal 清空,不产生隐式持久化 lifecycle fixture
D2-AC-04 一次 run 的多个 outputs 要么全部提交,要么全部不提交;Schema 不符不污染上一成功值 controlled success/failure
D2-AC-05 一个 output 可被多个消费者读取;第二生产者不能注册同一 Signal identity registry negative
D2-AC-06 A→B→C 按依赖顺序更新并合并同批变更;旧 run 晚到不覆盖新快照 deterministic scheduler fixture
D2-AC-07 A→B→A 在保存/激活前被拒绝并给出可定位依赖路径 cycle negative + UI
D2-AC-08 events.emit 不产生可读取当前值;Signal 更新也不伪装为 Event protocol/runtime assertions
D2-AC-09 删除生产者、端口或跨 scope 移动后,消费者显示正式失效状态且不会读取陈旧绑定 document mutation/browser
D2-AC-10 #1382 的优先级、并发、取消和预算组合后仍满足双方 AC assembly integration scenario

Scout Evidence

  • Page Document 当前 block 只有 props/presentation/layout/runtime,没有 interface/port Schema;binding 被塞在 props.dataBinding。
  • Page Runtime/Frontstage 已有 [Root] Frontstage 代码区块浏览器运行时编排与加载体验 #1382 的可视 demand、有界并发、stale session key、成功 snapshot cache 与 visibility lifecycle,必须作为唯一 coordinator 基线。
  • Worker 当前只返回 UI schema;P2 将先提供 BlockResult.outputs 与 ctx.inputs contract。
  • 当前 Event effect 只进入 mediator/trace,没有共享当前值,适合继续保持瞬时事件语义。
  • 正式 inventory 冻结为 P5~P7;若 Signal 必须建立第二 scheduler 或 Port Schema 不能由 Page Document 独占,停止回 Root。

Work Packet Ledger

ID 具体代码结果 Input SHA / 依赖 Owned paths Owner / worktree AC / fixture 状态 / commit
P5 Port Schema + scoped Signal graph/store P2+P3 assembly page-document + new page-signals lib + tests D2 developer AC-006~007;scope/type/atomic/cycle ready
P6 outputs/inputs 接入唯一 runtime coordinator P5 assembly + #1382 baseline runtime sessions/run-plan/demand/signal adapter + tests D2 developer AC-006~007、011;stale/lifecycle/event separation ready
P7 Port/Signal 作者连线与失效反馈 UI P6 assembly;串行消费 P4 ResourcePanel Frontstage port/signal components/Canvas/Studio/i18n/tests D2 developer AC-006~007;connect/disconnect/tab/page/deleted source ready

Test Batch

  • Page Document/Protocol:端口 schema、alias、scope、save/load/delete/move。
  • Signal pure/runtime:单写多读、原子 commit、类型拒绝、拓扑批次、环、stale、Tab/Page lifecycle、Event 分离。
  • [Root] Frontstage 代码区块浏览器运行时编排与加载体验 #1382 组合:可视 demand + 依赖 demand、并发/取消/visibility/cache 不回归。
  • Frontstage/Browser:双区块 Tab 联动、显式 Page 跨 Tab、失效绑定与 390px。
  • 执行时机:Root 冻结 assembly 后唯一 fresh QA 集中执行。

停止与上报条件

  • 需要 Signal 持久化、跨页面共享或多生产者覆盖。
  • Page Document 无法成为 Port Schema 唯一真值,需要依赖 TypeScript 运行时猜测。
  • [Root] Frontstage 代码区块浏览器运行时编排与加载体验 #1382 coordinator 无法在一个 owner 中串行整合。
  • 循环只能靠运行深度/次数限制而不能在依赖图阶段拒绝。
  • 新 contract 改变 Root AC 或需要新增 Delivery。

完成条件

全部 Work Packet 进入 Root assembly,D2-AC-01~10 在集中 Test Batch 有证据,Root fresh QA 通过,结果合入 protected baseline,Root #1393 账本已更新。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:backendBackend API, service, repository, or runtime workarea:frontendFrontend UI or interaction workarea:runtimeRuntime and execution behaviorchild-issueChild implementation issuecontractContract or API semantics changegrade:g3Cross-domain decision or implementation workneeds-backendNeeds backend workneeds-frontendNeeds frontend workneeds-qaNeeds QA or acceptance validationphase:readyIssue is shaped and ready for implementationplan:treeLong plan with one Root and vertical Delivery issuesrisk:highHigh risk if implemented incorrectlysize:lLarge implementation and review sizetype:featureFeature or new capability

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions