dootask/CLAUDE.md
kuaifan 782ba4a151 docs: optimize CLAUDE.md — remove discoverable content, add critical gotchas
Remove self-description header, 38-line command listing, directory trees,
and standard Laravel patterns that Claude can infer from code.

Add 6 project-specific gotchas Claude would get wrong: non-REST routing
(InvokeController), custom response envelope (Base::retSuccess/retError),
AbstractModel::createInstance, Doo::userId auth, manual validation (no
FormRequest), and Swoole Task (not Laravel Queue).

122 lines → 46 lines.
2026-03-13 10:49:03 +00:00

2.4 KiB
Raw Blame History

项目概述

Laravel 8 (LaravelS/Swoole) + Vue 2 (Vite) + Electron。开源任务/项目管理系统。

开发命令

所有命令通过 ./cmd 脚本执行(不要直接运行 php artisan 等):

  • ./cmd dev — 前端开发服务器Node.js 20+
  • ./cmd prod — 构建前端生产版本
  • ./cmd artisan ... / ./cmd composer ... / ./cmd php ... — PHP 相关命令

Gotchas

LaravelS/Swoole

  • 避免在静态属性、单例、全局变量中存储请求级状态——请求间共享进程,会导致数据串联和内存泄漏
  • 构造函数、服务提供者、boot() 方法不会在每个请求重新执行
  • 配置/路由变更需要 ./cmd php restart 或容器重启才能生效
  • 长生命周期逻辑WebSocket、定时器应复用现有模式避免阻塞协程/事件循环

后端

  • 非 REST 路由:所有 API 通过 Route::any('api/{resource}/{method}') 路由到 InvokeControllerURL 段映射为控制器方法(如 api/project/listslists(),带 action 则用双下划线:api/project/invite/joininvite__join()
  • 响应格式:统一使用 Base::retSuccess($msg, $data) / Base::retError($msg),返回 {"ret": 1, "msg": "...", "data": {...}}——不要用 response()->json()
  • 业务异常通过 App\Exceptions\ApiException 抛出,不要用通用 Exception
  • 模型继承 AbstractModel,使用 Model::createInstance($params) 创建——不要用 new Model()Model::create()
  • 认证使用 Doo::userId()——不要用 auth()->user()
  • 参数校验在控制器方法中手动进行——不要创建 FormRequest 类
  • 异步任务使用 Swoole Taskapp/Tasks/)——不要用 Laravel Queue
  • app/Module/ 存放跨控制器/跨模型的业务逻辑(非标准 Laravel 目录)
  • 所有表结构变更必须通过 Laravel migration禁止直接改库

前端

  • API 调用使用 store.dispatch("call", params),不要在组件中直接 axios/fetch
  • $A.modalXXX$A.messageXXX$A.noticeXXX 内部自动处理 $L 翻译,调用方不要额外包 $L。仅当传入 language: false 时由调用方自行处理翻译

交互规范

  • 提问时附带建议:当需要向用户提问或请求澄清时,应同时提供具体的建议选项或推荐方案,帮助用户快速决策,而非仅抛出开放式问题

语言偏好

  • 技术总结和关键结论优先使用简体中文,除非用户明确要求其他语言