en un clic
core-discipline
写/改任何代码前必读。约束 AI 避免造假 API、过度工程、大范围乱改。
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
写/改任何代码前必读。约束 AI 避免造假 API、过度工程、大范围乱改。
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
做 Cocos Creator 多机型/多分辨率适配时使用。Canvas、Widget、安全区。
Cocos Creator 用 AssetBundle 做分包/远程资源时使用。加载、释放、依赖、缓存。
优化 Cocos Creator 渲染性能时使用。合批、图集、动静分离、Label。
给 Cocos Creator 原生包做热更新时使用。version manifest、增量、校验、回滚。
写 Cocos Creator 动效/动画时使用。tween、Animation、Spine、性能与清理。
做 Cocos Creator 大量条目列表时使用。虚拟列表、节点复用。
| name | core-discipline |
| description | 写/改任何代码前必读。约束 AI 避免造假 API、过度工程、大范围乱改。 |
| category | discipline |
| tags | ["纪律","api","yagni"] |
规则: 只调用真实存在的库函数、类、字段——不确定就先查文档或读源码,禁止凭记忆编造。
为什么: AI 的训练数据存在截止日期,且会在不同库之间混淆接口。常见事故:把 pandas 的方法名张冠李戴到 polars,把 Node.js v16 已删除的 API 当作现行 API 调用,编造根本不存在的 requests.get(...).json_body 字段。这类代码在 review 时看起来合理,跑起来立刻抛 AttributeError / TypeError,且错误定位成本很高。
怎么做:
help()、IDE 补全、或直接读源码确认。print / console.log 或写一个小测试确认再用。# TODO: 请核实此 API 是否存在,不要默默造假。规则: 只改与当前任务直接相关的代码行,不顺手触碰无关部分。
为什么: AI 极容易在"顺手"时引入意外回归:重排 import 导致循环依赖,格式化改动污染 git blame,重命名变量破坏下游引用。改动面越大,reviewer 越难判断哪些变化是必要的,哪些是噪音,review 成本指数级上升。
怎么做:
规则: 只实现当前需求的最小方案,不预留"将来可能用到"的抽象或扩展点(YAGNI)。
为什么: AI 倾向于生成"通用"、"可扩展"的代码——Strategy 模式、插件系统、多层配置——即使需求只是"把这个数字加一"。这些提前抽象几乎从不被用到,却带来维护负担、理解成本,以及因过度复杂而埋下的 bug。
怎么做:
规则: 动手前列出关键假设;假设有歧义先问清楚,不闷头猜。
为什么: AI 在上下文不足时会悄悄做假设并写进代码:假设某字段不会为 null、假设列表非空、假设调用方已鉴权。这些假设在 happy path 下不报错,在边界场景下造成生产事故,且事后难以溯源(代码里看不到这个"决策"是在哪里做出的)。
怎么做:
假设:
- user.profile 在此处一定非 null(由上游鉴权中间件保证)
- items 列表至少有 1 条(调用方已校验)
assert / TypeScript 类型守卫 / Zod schema 在代码中显式检查。规则: 修改任何文件前先完整读一遍,理解现有约定再动手。
为什么: AI 经常在没读完文件的情况下就开始写代码,结果:重复定义已有的工具函数、违反项目既有的错误处理约定、用与周围代码不同的命名风格引入风格割裂。这些问题单独看不严重,积累起来会让代码库越来越难维护。
怎么做:
# 反例 — AI 凭记忆编造了 httpx 不存在的 .json_body 属性
import httpx
resp = httpx.get("https://api.example.com/data")
payload = resp.json_body # ❌ AttributeError: 'Response' object has no attribute 'json_body'
user_id = payload["id"]
# 正例 — 查过文档,使用真实存在的 .json() 方法
import httpx
resp = httpx.get("https://api.example.com/data")
payload = resp.json() # ✅ httpx.Response.json() 是真实 API
user_id = payload["id"]
# 需求:给用户名加前缀 "user_"
# 反例 — AI 预留了"将来可能需要不同策略"的扩展点
from abc import ABC, abstractmethod
class PrefixStrategy(ABC):
@abstractmethod
def apply(self, name: str) -> str: ...
class UserPrefixStrategy(PrefixStrategy):
def apply(self, name: str) -> str:
return f"user_{name}"
class PrefixFactory:
_registry: dict = {}
@classmethod
def register(cls, key: str, strategy: PrefixStrategy):
cls._registry[key] = strategy
@classmethod
def get(cls, key: str) -> PrefixStrategy:
return cls._registry[key]
PrefixFactory.register("user", UserPrefixStrategy())
def format_username(name: str, strategy_key: str = "user") -> str:
return PrefixFactory.get(strategy_key).apply(name) # ❌ 三层间接,零复用
# 正例 — 最小实现,直接满足需求
def format_username(name: str) -> str:
return f"user_{name}" # ✅ 清晰、可测、够用