diff --git a/GOAL.md b/GOAL.md new file mode 100644 index 000000000..fb8882ce7 --- /dev/null +++ b/GOAL.md @@ -0,0 +1,341 @@ +# 目标锚定的可迁移判断框架 + +## 定位 + +这个文件不是任务记录、执行日志或事故复盘,而是一个可迁移的判断框架。 + +它的用途是:在面对迁移、重构、平台切换、复杂修复或验证失败时,防止把真实目标偷换成更容易完成的局部目标。 + +它只沉淀能跨任务复用的抽象原则: + +- 如何锚定真实目标。 +- 如何把错误理解为系统责任信号。 +- 如何判断责任归属和平台能力差异。 +- 如何限制每轮行动范围。 +- 如何解释验证结果的证明边界。 + +它不记录: + +- 单次失败过程。 +- 具体错例细节。 +- 聊天上下文。 +- 某个命令的执行历史。 +- 某个技术栈的临时绕法。 +- 为了让一次验证通过而采取的局部手段。 + +## 执行摘要 + +真实目标不是让某个验证动作变绿,而是让目标环境中的真实行为成立。 + +先识别并保护真实行为来源。不要用更容易运行的替代入口、空实现、代理层、模拟行为或第二套逻辑来源替换它。 + +每个错误都先解释其代表的系统责任,再决定动作。不要把资源解析、依赖导入、打包失败、启动失败、类型失败或测试失败等表面信号直接当成根因。 + +如果错误背后依赖某种运行时能力,必须先判断目标环境是否提供同等语义;没有同等语义时,先选择等价承载方式,再处理代码、配置或打包问题。 + +每轮只处理一个责任,并用同一个验证入口读取下一个真实信号。验证通过只说明当前验证覆盖的范围成立,不代表整体目标已经完成。 + +## 核心循环 + +Anchor -> Observe -> Interpret -> Classify -> Direction Check -> Decide -> Limit -> Verify -> Verification Check -> Iterate + +每一步行动前都必须经过这个循环。循环的目的不是制造流程负担,而是防止在压力下把“消除当前错误”误认为“推进真实目标”。 + +## 0. Anchor:锚定真实目标 + +在观察错误和设计方案之前,先固定当前任务的真实目标。 + +问: + +- 用户真正要求的最终状态是什么? +- 哪个现有行为来源必须被保留? +- 哪些行为是业务语义,哪些只是旧环境实现细节? +- 什么样的结果会是假进展? +- 什么东西不能为了让验证通过而被替换? + +禁止: + +- 把“验证通过”当成最终目标。 +- 用空实现、假入口、模拟行为或简化替身替换真实行为来源。 +- 在没有说明责任归属前,先删除、绕开或替换复杂依赖。 +- 创建第二套行为来源来证明一个更容易证明的目标。 + +判断标准: + +一个改动只有在让真实目标更成立时才算前进。只让当前错误消失,但没有解决它代表的责任,就是方向错误。 + +## 1. Observe:观察信号 + +先读取系统已经暴露的事实,不要提前设计答案。 + +问: + +- 系统已经告诉了我什么? +- 当前可见状态是什么? +- 第一个真实信号是什么? +- 这个信号来自哪个入口、边界、配置、依赖或运行时? +- 是否存在比当前表面错误更早、更直接的信号? + +要求: + +- 基于当前证据判断,不用记忆替代观察。 +- 先看入口、配置、依赖关系、错误输出和验证方式。 +- 不跳过观察直接实现。 +- 不把最显眼的报错位置直接当成最应该修改的位置。 + +## 2. Interpret:解释责任 + +信号不是孤立信息。每个信号都代表系统中的某种责任。 + +问: + +- 这个信号代表什么系统责任? +- 这个责任在原环境里解决了什么问题? +- 它属于入口、启动、配置、依赖、资源加载、业务行为、持久化、并发、后台任务、外部服务、平台能力,还是验证机制? +- 它是行为来源,还是运行时承载方式? +- 报错对象的真实用途是什么? +- 它依赖的执行语义是什么? +- 目标环境是否提供同等语义? + +要求: + +- 不只按错误表面格式判断。 +- 不把“报错位置”直接等同于“修复位置”。 +- 不把文件类型、导入方式、构建错误或类型错误当成责任本身。 +- 先沿调用链和使用链找到真实用途,再判断责任归属。 +- 先解释责任,再谈修复。 + +## 3. Classify:分类所有权 + +识别责任后,先判断它应该由谁拥有,再决定是否迁移、替换、隔离或延后。 + +问: + +- 目标环境是否应该拥有这个责任? +- 这个责任能否直接翻译到目标环境? +- 它依赖的原环境能力在目标环境中是否存在? +- 如果目标环境没有同等能力,是否需要用目标环境原生能力重新建模? +- 这是原环境实现细节,还是必须保护的行为语义? +- 这是当前最小切片应该处理的问题,还是后续层的问题? +- 当前证据是否不足,需要继续观察? + +分类: + +- `目标环境责任`:应该翻译或重建为目标环境能力。 +- `原环境细节`:应该隔离在当前边界之外。 +- `真实行为来源`:应该保留,不能用简化替身替换。 +- `平台能力差异`:应该用等价能力承接,不能只修表面错误。 +- `基础设施语义缺失`:必须先设计承载方式,再处理代码适配。 +- `验证机制问题`:验证入口本身需要校准,不能用它证明错误目标。 +- `未知责任`:继续取证,不急于改。 + +## 4. Direction Check:方向检查 + +在决定动作前,先检查这个动作是否真的朝真实目标前进。 + +问: + +- 这个动作是否让用户要求的最终状态更真实? +- 我是在解决责任,还是只是在移除错误信号? +- 我是否只让代码更容易通过验证,却保留了目标环境无法执行的假设? +- 我是否替换了真实行为来源? +- 我是否创建了第二套逻辑来证明局部成功? +- 这个动作会不会让验证通过,但证明的是错误目标? +- 如果用户只看改动结果,是否会认为它在规避问题? + +拒绝: + +- 用更简单的入口替代真实入口。 +- 用演示级路径替代真实系统路径。 +- 删除或绕开复杂依赖,却没有解释这些依赖代表的责任。 +- 把平台能力缺失包装成资源、依赖或配置问题。 +- 让验证通过依赖模拟行为、空行为或替代行为来源。 + +只有通过方向检查后,才可以进入决策。 + +## 5. Decide:选择动作类型 + +只在分类和方向检查之后决定动作。 + +可选动作: + +- `翻译`:把原环境中的必要责任表达为目标环境可执行的形式。 +- `重建`:当目标环境没有同等机制时,用目标环境原生能力重新建模同类语义。 +- `隔离`:把不属于当前切片的责任留在边界之外,并保持边界明确。 +- `替换`:用等价能力承接同类责任,而不是替换真实行为来源。 +- `保留`:保护现有行为来源,不创建第二套逻辑。 +- `延后`:证据不足或不属于当前切片时先不处理。 +- `校准`:当验证入口证明范围错误时,先修正验证方式。 + +要求: + +- 不把“消除错误”误认为“方向正确”。 +- 不一次处理多个不同责任。 +- 不为了当前验证通过而破坏行为来源。 +- 不在承载方式尚未确定时处理表层适配。 + +## 6. Limit:限制范围 + +每一轮只处理当前证据支持的最小问题。 + +问: + +- 这一步是否由当前信号证明为必要? +- 我是否引入了未经证明的假设? +- 我是否过早处理了后续层? +- 我是否同时改了多个责任? +- 我是否创建了第二个行为来源? +- 这个最小动作是否仍然使用真实行为来源? + +要求: + +- 范围控制优先于速度。 +- 最小动作必须仍然朝真实目标前进。 +- 小不等于假;最小切片也必须保护真实语义。 +- 如果一个小改动只能证明替代目标,它不是好切片。 + +## 7. Verify:验证并读取下一个信号 + +改动后回到同一个验证动作,读取新的真实信号。 + +问: + +- 上一个阻塞是否消失? +- 新的第一个阻塞是什么? +- 新阻塞属于哪类责任? +- 验证结果是否推翻了之前的判断? +- 分类或方向是否需要调整? + +要求: + +- 验证不是为了宣布正确,而是为了收集下一个真实信号。 +- 失败不是坏结果,失败是下一轮分类的输入。 +- 通过也不等于完成,只证明当前验证覆盖的内容成立。 +- 验证入口必须尽量贴近真实目标,不能证明一个更窄的替代目标。 + +## 8. Verification Check:验证证明范围检查 + +每次验证后,必须说明验证结果证明了什么,以及没有证明什么。 + +问: + +- 这个结果具体证明了什么? +- 它没有证明什么? +- 它验证的是用户的真实目标,还是一个更窄的替代目标? +- 这个结果是否依赖模拟、空实现或行为替身? +- 它是否只证明了构建、类型、启动或局部路径,而没有证明业务语义? +- 下一轮应该读取哪个真实信号? + +判断标准: + +- 绿色结果是证据,不是成功本身。 +- 如果验证通过是因为真实行为被替换掉了,那不是进展。 +- 如果验证只覆盖构建、类型或启动,不能声称业务迁移完成。 +- 如果验证只证明某个对象能被读取,不能证明它背后的执行语义已迁移。 + +## 9. Iterate:从证据继续循环 + +迁移和复杂修复靠循环推进,不靠一次性猜完整方案。 + +每一轮都应能说明: + +- 目标是什么。 +- 当前信号是什么。 +- 信号代表什么责任。 +- 责任归谁拥有。 +- 当前动作为什么朝真实目标前进。 +- 本轮范围为什么足够小。 +- 验证结果证明了什么。 +- 验证结果没有证明什么。 +- 下一步最小动作是什么。 + +让下一轮由真实信号驱动,而不是由预设方案驱动。 + +## 抽象反模式 + +以下不是具体错例,而是需要被识别和拒绝的通用错误形态。 + +### 目标偷换 + +把真实目标替换成更容易证明的目标。 + +识别信号: + +- 验证更容易通过,但真实入口、真实数据流或真实行为来源没有被使用。 +- 改动让局部路径成立,却无法说明它如何支撑最终状态。 +- 成功标准从“行为成立”滑向“错误消失”。 + +防止原则: + +- 每次行动前重述真实目标。 +- 明确不可替换的行为来源。 +- 只接受能让真实目标更成立的改动。 + +### 信号表面化 + +把错误的表面形式当成根因。 + +识别信号: + +- 只根据报错文本选择修复位置。 +- 只解决读取、导入、解析、类型或启动问题,却没有解释对象的真实用途。 +- 改动能消除当前错误,但不能说明它解决了哪项系统责任。 + +防止原则: + +- 先追踪使用链,再判断责任。 +- 先问“这个东西承担什么语义”,再问“怎么让它通过当前工具”。 +- 对所有表面错误做责任解释。 + +### 平台语义忽略 + +把运行时能力差异误当成代码适配问题。 + +识别信号: + +- 只处理构建或依赖问题,却没有判断目标环境是否具备同等执行语义。 +- 原环境能力被包装、绕过或静态化,但没有等价承载方式。 +- 验证证明对象可被加载,却没有证明对象可被正确执行。 + +防止原则: + +- 先列出责任依赖的运行时能力。 +- 判断目标环境是否提供同等语义。 +- 没有同等语义时,先设计承载方式,再做代码适配。 + +### 行为来源替换 + +用新的、更简单的逻辑来源替代必须保护的真实行为来源。 + +识别信号: + +- 出现第二套入口、第二套流程或第二套判断逻辑。 +- 原有复杂行为被压缩成局部替身。 +- 验证通过依赖替代路径,而不是原路径迁移成立。 + +防止原则: + +- 明确真实行为来源只能被迁移、隔离或重建,不能被伪装替换。 +- 新抽象必须服务于原行为来源,而不是绕开它。 +- 若必须重建,先声明语义等价边界。 + +### 验证越界 + +把验证结果解释成它没有证明的结论。 + +识别信号: + +- 构建通过被解释为运行正确。 +- 启动成功被解释为业务正确。 +- 局部测试通过被解释为整体迁移完成。 +- 依赖模拟或替身的验证被解释为真实路径成立。 + +防止原则: + +- 每次验证后写清“证明了什么”和“没有证明什么”。 +- 只根据验证覆盖范围声明结论。 +- 当验证证明的是替代目标时,先校准验证入口。 + +## 一句话版本 + +先锚定真实目标和不可替换的行为来源;再观察当前信号,解释它代表的系统责任,判断责任是否属于目标环境。只处理当前证据支持、且朝真实目标前进的最小责任。验证通过只是证据,不是目标本身;每次验证都必须说明它证明了什么,以及没有证明什么。 diff --git a/GOALV2.md b/GOALV2.md new file mode 100644 index 000000000..96a46d406 --- /dev/null +++ b/GOALV2.md @@ -0,0 +1,5 @@ +# 错误引导项目推进思维模型 + + +## 核心目标 +通过报错信息来推断进度,目的不是消灭报错 diff --git a/server/wrangler.jsonc b/server/wrangler.jsonc index 3ed25b164..cc6176159 100644 --- a/server/wrangler.jsonc +++ b/server/wrangler.jsonc @@ -6,6 +6,15 @@ "compatibility_flags": [ "nodejs_compat" ], + "rules": [ + { + "type": "Text", + "globs": [ + "**/*.lua" + ], + "fallthrough": true + } + ], "observability": { "enabled": true, "head_sampling_rate": 1 @@ -32,4 +41,4 @@ "SUPABASE_URL": "", "SVIX_API_KEY": "" } -} \ No newline at end of file +}