修复脚本复合调用与Promise回调图
限定复合赋值与字面量短路的可调用结果 保留序列表达式函数对象覆盖与删除身份 补齐原生Promise变量回调与直接绑定构造边 新增控制流回归并同步技术方案和决策记录
This commit is contained in:
+505
-42
File diff suppressed because it is too large
Load Diff
@@ -6007,6 +6007,7 @@
|
||||
|
||||
- 受控异步 callback 的 alias 读取按完整 enclosing invocation 链延迟到各层函数同步收尾,最外层再延迟到当前 job 末尾;callback 写入仍不在注册点同步提交。conditional / assignment expression callee 分别在 test / RHS 求值后建立调用边,`new` 同时执行普通 function constructor 及 alias。
|
||||
- 函数对象自有 `.call / .apply / .bind` 覆盖允许以普通对象静态 member callable 作为 RHS,并继续按函数对象身份跨普通 alias 共享。`delete` 自有覆盖后恢复 Function.prototype intrinsic;条件删除合并覆盖与 intrinsic,非 callable 自有值仍视为属性存在并禁止 intrinsic 回退。
|
||||
- callable 运算结果只把普通 `=` 与实际执行分支的 `||= / &&= / ??=` 视为可调用值来源,算术、位运算和移位复合赋值不得直接采用 RHS callable。logical callee 对 boolean / numeric / string / null 字面量先执行真实短路;sequence receiver 的末项保持函数对象身份,用于 `.call / .apply / .bind` own override 与 `delete`。Promise callback 只接受固定 dynamic import、未遮蔽原生 `Promise` 构造 / 静态方法及可证明变量、alias 和连续链,业务 thenable、未知返回值和遮蔽 `Promise` 保持普通成员调用。直接 `new (Fn.bind(...))()` 在 intrinsic bind 仍可能时继承普通 function `Fn` 的 construct target,确定 own override 时不回退。
|
||||
|
||||
- ESM 最终绑定与 occurrence 补充:外部 callable root 只认模块初始化完成时同一 live binding / member 的最后一次直接顶层 assignment,旧 RHS 不得加载;直接 awaited namespace member 在赋值、受控 callback、constructor 和深层静态 member path 中仍按 `(source, occurrence)` 传播并替换首段 export。assignment class expression 的 static / instance member demand 分离。
|
||||
- ESM 初始化与阻塞补充:projection declaration 保持原模块源码顺序,dependency origin 保持 importer 声明顺序;循环 canonical 去重同时删除声明和对应初始化写入。side-effect static import 只联结按 dependency-before-importer 排列的直接 `globalThis / window` 顶层 effect,不暴露 dependency local binding;静态可判定永不完成的 top-level await 至少对未遮蔽全局 `await new Promise(() => {})` 失败关闭,嵌套函数同形 decoy 和可完成 await 保持允许。
|
||||
|
||||
@@ -842,6 +842,7 @@ game-project/
|
||||
- conditional callable 的 consequent / alternate 必须在 test 求值之后分别按自身表达式起点冻结身份;受控 callback 参数也按该参数自身起点解析,使更早参数的 alias 副作用先行生效,同时保持真实 callback 执行边位于注册调用之后。
|
||||
- 异步 callback 的延迟状态必须沿完整 enclosing invocation 链传播:每层闭包读取该函数同步收尾后的局部 alias,越过最外层调用后再读取当前 job 末尾的外层 alias;不能只完成注册函数一层后,又在其调用点冻结更外层状态。conditional expression callee 在 test 完成后解析两支,assignment expression callee 直接调用 RHS 求值结果;`new` 除 class constructor 外也必须调用普通 function 及其 alias。函数对象自有 `.call / .apply / .bind` assignment 的 RHS 可来自普通对象静态 member callable;`delete` 通过任一共享函数 alias 删除这些自有覆盖后恢复 Function.prototype intrinsic,未知条件删除保留覆盖与 intrinsic 两种可能。删除态必须和“自有属性仍存在但值不可调用”分离,后者继续禁止 intrinsic 回退。
|
||||
- callee 求值必须覆盖 sequence、logical expression 与 `||= / &&= / ??=`:sequence 只调用最后一项但保留前项副作用,logical 与 logical assignment 按 callable 的真值 / nullish 事实执行短路,未知状态才合并可运行分支,不能统一退化为 RHS 或把已跳过 RHS 的 decoy 建边。`new` 的 assignment / conditional callee 同样先完成 callee 求值,再冻结 constructor owner;未被 class 自有静态 `bind` 或函数对象 own override 覆盖的 Function.prototype `.bind()` 保留原 class construct target。`delete (((target.call)))` 等任意括号包装必须删除同一函数对象 own `.call/.apply/.bind` 并恢复 intrinsic。固定 dynamic import 返回的 Promise 可沿任意连续 `.then/.catch/.finally` 链传播 callback 可达性,链中每个 `.then` 只取 fulfilled / rejected 两槽,`.catch/.finally` 只取首槽,其余参数保持普通值。
|
||||
- callable 结果判定必须服从运算符真实返回值:普通 `=` 才直接采用 RHS callable,`+= / -= / *= / /= / %= / **= / <<= / >>= / >>>= / &= / ^= / |=` 的结果按 primitive 处理,不能把仅作为值参与运算的 RHS 函数误建成调用边。logical callee 先按 boolean / numeric / string / null 字面量执行 `|| / && / ??` 短路,已跳过的 RHS 不可达;sequence receiver 的最后一项继续保留原函数对象身份,使 `(0, target).call` 一类访问、覆盖安装和 `delete` 都命中同一个 own property。原生 Promise callback 允许从固定 dynamic import、未遮蔽全局 `new Promise`、`Promise.resolve / reject / all / allSettled / any / race` 及其可证明变量 / alias / 连续链建立边;任意业务 thenable、未知返回值和局部遮蔽的 `Promise` 不得仅凭 `.then/.catch/.finally` 同名升级为受控 API。`new (Fn.bind(...))()` 在未被业务静态成员或函数对象 own `bind` 覆盖时,必须直接保留普通 function `Fn` 的 construct target。
|
||||
- 泥点不足是确定性业务中断,不是瞬态 Provider 故障或未知副作用。钱包的 `泥点余额不足` 与 `可消费泥点不足:...` 两种领域文案统一映射为稳定原因 `mud-points-insufficient`,不得自动重试;即使 External Generation durable ledger 已存在,也必须落为 `failed`,不能误入 `needs-reconciliation`。game-chat 顶部状态、持久失败对话与 `【Supervisor 阶段记录】` 统一显示“泥点余额不足,本轮游戏生成已中断。请充值后发送“继续”,系统会从当前项目进度接着完成。”,并禁止透传 operationId、URL、路径、密钥或任意上游正文。
|
||||
- tool-plan 成功响应落账前,对内置 Runtime 原生函数与 legacy wrapper 的合法、无重复 key JSON arguments 按工具 schema 的精确位置做项目路径 canonicalization:`file.*.path`、`project.patchset.changes[*].path`、`project.git_commit.paths[*]`、`command.*.cwd`、`image.inspect.paths[*]` 与 `canvas.asset_generate.outputPath` 若是当前项目根目录内的完整绝对路径,转换为 `/` 分隔的项目相对路径后再校验、持久化并执行;源码/叙述字段、任务产物描述、动态 MCP arguments 和项目外绝对路径不得改写,后两者继续由绝对路径门禁失败关闭。项目根只允许搜索/列举范围与命令 cwd 规范化为 `.`,不能成为文件目标。当前进程与重启恢复都必须从同一份规范化 handoff 重放,禁止分别执行原响应和持久响应。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user