feat: add migration framework and error-guided project advancement model
This commit is contained in:
341
GOAL.md
Normal file
341
GOAL.md
Normal file
@@ -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:从证据继续循环
|
||||
|
||||
迁移和复杂修复靠循环推进,不靠一次性猜完整方案。
|
||||
|
||||
每一轮都应能说明:
|
||||
|
||||
- 目标是什么。
|
||||
- 当前信号是什么。
|
||||
- 信号代表什么责任。
|
||||
- 责任归谁拥有。
|
||||
- 当前动作为什么朝真实目标前进。
|
||||
- 本轮范围为什么足够小。
|
||||
- 验证结果证明了什么。
|
||||
- 验证结果没有证明什么。
|
||||
- 下一步最小动作是什么。
|
||||
|
||||
让下一轮由真实信号驱动,而不是由预设方案驱动。
|
||||
|
||||
## 抽象反模式
|
||||
|
||||
以下不是具体错例,而是需要被识别和拒绝的通用错误形态。
|
||||
|
||||
### 目标偷换
|
||||
|
||||
把真实目标替换成更容易证明的目标。
|
||||
|
||||
识别信号:
|
||||
|
||||
- 验证更容易通过,但真实入口、真实数据流或真实行为来源没有被使用。
|
||||
- 改动让局部路径成立,却无法说明它如何支撑最终状态。
|
||||
- 成功标准从“行为成立”滑向“错误消失”。
|
||||
|
||||
防止原则:
|
||||
|
||||
- 每次行动前重述真实目标。
|
||||
- 明确不可替换的行为来源。
|
||||
- 只接受能让真实目标更成立的改动。
|
||||
|
||||
### 信号表面化
|
||||
|
||||
把错误的表面形式当成根因。
|
||||
|
||||
识别信号:
|
||||
|
||||
- 只根据报错文本选择修复位置。
|
||||
- 只解决读取、导入、解析、类型或启动问题,却没有解释对象的真实用途。
|
||||
- 改动能消除当前错误,但不能说明它解决了哪项系统责任。
|
||||
|
||||
防止原则:
|
||||
|
||||
- 先追踪使用链,再判断责任。
|
||||
- 先问“这个东西承担什么语义”,再问“怎么让它通过当前工具”。
|
||||
- 对所有表面错误做责任解释。
|
||||
|
||||
### 平台语义忽略
|
||||
|
||||
把运行时能力差异误当成代码适配问题。
|
||||
|
||||
识别信号:
|
||||
|
||||
- 只处理构建或依赖问题,却没有判断目标环境是否具备同等执行语义。
|
||||
- 原环境能力被包装、绕过或静态化,但没有等价承载方式。
|
||||
- 验证证明对象可被加载,却没有证明对象可被正确执行。
|
||||
|
||||
防止原则:
|
||||
|
||||
- 先列出责任依赖的运行时能力。
|
||||
- 判断目标环境是否提供同等语义。
|
||||
- 没有同等语义时,先设计承载方式,再做代码适配。
|
||||
|
||||
### 行为来源替换
|
||||
|
||||
用新的、更简单的逻辑来源替代必须保护的真实行为来源。
|
||||
|
||||
识别信号:
|
||||
|
||||
- 出现第二套入口、第二套流程或第二套判断逻辑。
|
||||
- 原有复杂行为被压缩成局部替身。
|
||||
- 验证通过依赖替代路径,而不是原路径迁移成立。
|
||||
|
||||
防止原则:
|
||||
|
||||
- 明确真实行为来源只能被迁移、隔离或重建,不能被伪装替换。
|
||||
- 新抽象必须服务于原行为来源,而不是绕开它。
|
||||
- 若必须重建,先声明语义等价边界。
|
||||
|
||||
### 验证越界
|
||||
|
||||
把验证结果解释成它没有证明的结论。
|
||||
|
||||
识别信号:
|
||||
|
||||
- 构建通过被解释为运行正确。
|
||||
- 启动成功被解释为业务正确。
|
||||
- 局部测试通过被解释为整体迁移完成。
|
||||
- 依赖模拟或替身的验证被解释为真实路径成立。
|
||||
|
||||
防止原则:
|
||||
|
||||
- 每次验证后写清“证明了什么”和“没有证明什么”。
|
||||
- 只根据验证覆盖范围声明结论。
|
||||
- 当验证证明的是替代目标时,先校准验证入口。
|
||||
|
||||
## 一句话版本
|
||||
|
||||
先锚定真实目标和不可替换的行为来源;再观察当前信号,解释它代表的系统责任,判断责任是否属于目标环境。只处理当前证据支持、且朝真实目标前进的最小责任。验证通过只是证据,不是目标本身;每次验证都必须说明它证明了什么,以及没有证明什么。
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user