@namewta/speculo 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +3 -2
  2. package/package.json +1 -1
  3. package/template/skills/typescript-engineering-standards/README.md +36 -0
  4. package/template/skills/typescript-engineering-standards/SKILL.md +158 -0
  5. package/template/skills/typescript-engineering-standards/examples/comment-patterns.md +47 -0
  6. package/template/skills/typescript-engineering-standards/examples/naming-patterns.md +42 -0
  7. package/template/skills/typescript-engineering-standards/examples/project-layouts.md +75 -0
  8. package/template/skills/typescript-engineering-standards/examples/review-output-example.md +25 -0
  9. package/template/skills/typescript-engineering-standards/examples/type-modeling-patterns.md +66 -0
  10. package/template/skills/typescript-engineering-standards/manifest.txt +33 -0
  11. package/template/skills/typescript-engineering-standards/references/00-standard-levels-and-precedence.md +51 -0
  12. package/template/skills/typescript-engineering-standards/references/01-project-architecture-and-directory-layout.md +105 -0
  13. package/template/skills/typescript-engineering-standards/references/02-file-directory-and-symbol-naming.md +117 -0
  14. package/template/skills/typescript-engineering-standards/references/03-modules-imports-exports-and-dependencies.md +111 -0
  15. package/template/skills/typescript-engineering-standards/references/04-typescript-type-system.md +150 -0
  16. package/template/skills/typescript-engineering-standards/references/05-functions-async-errors-and-resources.md +142 -0
  17. package/template/skills/typescript-engineering-standards/references/06-comments-jsdoc-and-documentation.md +104 -0
  18. package/template/skills/typescript-engineering-standards/references/07-testing-strategy.md +84 -0
  19. package/template/skills/typescript-engineering-standards/references/08-react-and-frontend.md +91 -0
  20. package/template/skills/typescript-engineering-standards/references/09-node-cli-and-cross-platform.md +92 -0
  21. package/template/skills/typescript-engineering-standards/references/10-formatting-lint-and-complexity.md +107 -0
  22. package/template/skills/typescript-engineering-standards/references/11-configuration-dependencies-and-ci.md +86 -0
  23. package/template/skills/typescript-engineering-standards/references/12-security-performance-and-i18n.md +65 -0
  24. package/template/skills/typescript-engineering-standards/references/13-git-review-and-delivery.md +79 -0
  25. package/template/skills/typescript-engineering-standards/references/14-adoption-exceptions-and-migration.md +84 -0
  26. package/template/skills/typescript-engineering-standards/references/15-orca-derived-observations.md +54 -0
  27. package/template/skills/typescript-engineering-standards/references/README.md +45 -0
  28. package/template/skills/typescript-engineering-standards/templates/.editorconfig +12 -0
  29. package/template/skills/typescript-engineering-standards/templates/AGENTS.typescript.md +21 -0
  30. package/template/skills/typescript-engineering-standards/templates/code-review-checklist.md +37 -0
  31. package/template/skills/typescript-engineering-standards/templates/package-scripts.json +11 -0
  32. package/template/skills/typescript-engineering-standards/templates/prettier.json +6 -0
  33. package/template/skills/typescript-engineering-standards/templates/pull-request-template.md +37 -0
  34. package/template/skills/typescript-engineering-standards/templates/tsconfig.base.json +17 -0
  35. package/template/skills/typescript-engineering-standards/templates/tsconfig.project-references.json +8 -0
@@ -0,0 +1,91 @@
1
+ # React 与前端规范
2
+
3
+ ## 组件职责
4
+
5
+ 组件输入由 Props 明确表达,渲染尽量纯粹。复杂功能按需拆分:
6
+
7
+ - 数据获取与缓存。
8
+ - 业务状态编排。
9
+ - 领域交互。
10
+ - 视觉展示。
11
+
12
+ 组件名称使用具体领域语义:
13
+
14
+ - `WorkspaceReconnectDialog`
15
+ - `TerminalPermissionBanner`
16
+ - `PaymentMethodPanel`
17
+
18
+ 避免 `DataComponent`、`CommonModal`、`GenericPanel`。
19
+
20
+ ## Props
21
+
22
+ ```ts
23
+ type WorkspaceCardProps = {
24
+ workspace: WorkspaceSummary
25
+ isSelected: boolean
26
+ onSelect(workspaceId: string): void
27
+ }
28
+ ```
29
+
30
+ 要求:
31
+
32
+ - 使用 `XxxProps`。
33
+ - 布尔 Props 使用 `is`、`has`、`can`、`should`。
34
+ - 事件 Props 使用 `onXxx`。
35
+ - 避免大型万能对象和多个隐式控制模式的布尔值。
36
+ - 复杂互斥状态使用联合类型。
37
+ - 是否使用 `React.FC` 按仓库统一规则,不混用。
38
+
39
+ ## Hook
40
+
41
+ - 自定义 Hook 以 `use` 开头。
42
+ - 一个 Hook 处理一个可命名职责。
43
+ - Effect 依赖完整,不通过关闭规则规避。
44
+ - Effect 创建资源时返回清理函数。
45
+ - 返回多个独立值时优先具名对象;稳定二元关系可用元组。
46
+ - 避免把普通纯函数包装成 Hook。
47
+
48
+ ## 状态管理
49
+
50
+ - 状态尽量靠近使用位置。
51
+ - 只有多个远距离调用方共享时才提升。
52
+ - Store 按领域切片,不创建单一巨型 Store。
53
+ - Selector 尽量窄,避免组件订阅整个状态树。
54
+ - 派生数据优先计算,不重复存储。
55
+ - 服务端状态与本地 UI 状态分开管理。
56
+
57
+ ## Effect
58
+
59
+ Effect 用于与外部系统同步,不用于替代普通计算。检查:
60
+
61
+ - 是否可在渲染时直接派生。
62
+ - 是否需要取消旧请求。
63
+ - 是否存在竞态和过期响应。
64
+ - 是否清理监听器、Timer 和订阅。
65
+ - 是否因对象引用变化导致无意义重复执行。
66
+
67
+ ## 性能
68
+
69
+ - 不因为“可能更快”滥用 `memo`、`useMemo`、`useCallback`。
70
+ - 优化针对已识别瓶颈。
71
+ - 长列表使用虚拟化。
72
+ - 高频事件使用调度、批处理、节流或防抖。
73
+ - 避免在热渲染路径创建昂贵对象。
74
+ - 关键优化应有测试、测量或简短原因说明。
75
+
76
+ ## 可访问性
77
+
78
+ - 优先语义化 HTML。
79
+ - 交互元素支持键盘。
80
+ - 图标按钮有可访问名称。
81
+ - 表单控件有 Label 和错误关联。
82
+ - 焦点管理可预测。
83
+ - 不用颜色作为唯一状态表达。
84
+ - 弹窗、菜单和提示遵守相应 ARIA 交互模式。
85
+
86
+ ## 浏览器边界
87
+
88
+ - 验证 URL、消息、Storage 和第三方脚本输入。
89
+ - 避免不安全原始 HTML。
90
+ - 不把秘密放入前端 Bundle。
91
+ - 浏览器代码不导入 Node 专属模块,除非平台明确提供安全桥接。
@@ -0,0 +1,92 @@
1
+ # Node.js、CLI 与跨平台规范
2
+
3
+ ## Node 内置模块
4
+
5
+ 使用 `node:` 前缀:
6
+
7
+ ```ts
8
+ import { readFile } from 'node:fs/promises'
9
+ import path from 'node:path'
10
+ ```
11
+
12
+ ## 路径
13
+
14
+ 使用 `node:path` 组合和归一化路径,不手工拼接分隔符:
15
+
16
+ ```ts
17
+ const configPath = path.join(rootPath, 'config', 'app.json')
18
+ ```
19
+
20
+ 涉及安全或相等判断时考虑:
21
+
22
+ - Windows 盘符和分隔符。
23
+ - UNC 路径。
24
+ - 大小写敏感差异。
25
+ - 符号链接。
26
+ - 相对路径和路径遍历。
27
+ - 规范化前后的边界检查顺序。
28
+
29
+ ## CLI 分层
30
+
31
+ 推荐拆分:
32
+
33
+ - `parse-cli-arguments.ts`
34
+ - `validate-cli-options.ts`
35
+ - `run-export-command.ts`
36
+ - `render-cli-error.ts`
37
+
38
+ 要求:
39
+
40
+ - 参数解析与业务执行分离。
41
+ - 正常机器输出写 `stdout`,错误写 `stderr`。
42
+ - 明确定义退出码。
43
+ - 支持 `--help` 和 `--version`。
44
+ - 底层领域代码不直接调用 `process.exit()`。
45
+ - 信号处理和资源清理集中管理。
46
+
47
+ ## 环境变量
48
+
49
+ 在启动边界一次解析、验证和标准化:
50
+
51
+ ```ts
52
+ type AppEnvironment = {
53
+ port: number
54
+ logLevel: LogLevel
55
+ }
56
+
57
+ export function loadEnvironment(
58
+ source: NodeJS.ProcessEnv
59
+ ): AppEnvironment {
60
+ // ...
61
+ }
62
+ ```
63
+
64
+ 业务代码不应在各处直接读取 `process.env`。
65
+
66
+ ## 子进程
67
+
68
+ - 优先使用参数数组,不拼接 Shell 字符串。
69
+ - 必须拼接时按目标 Shell 正确转义。
70
+ - 处理超时、取消、退出码、信号和输出上限。
71
+ - 避免将不可信输入直接作为命令或参数。
72
+ - 明确清理孤儿进程。
73
+
74
+ ## 文件和流
75
+
76
+ - 大文件优先流式处理。
77
+ - 关闭文件句柄和流。
78
+ - 处理背压。
79
+ - 临时文件使用隔离目录并在失败路径清理。
80
+ - 写关键文件时考虑原子替换和崩溃恢复。
81
+
82
+ ## 跨平台
83
+
84
+ 跨平台逻辑应集中在适配器中。测试至少覆盖:
85
+
86
+ - 路径和换行符。
87
+ - Shell 参数引用。
88
+ - 文件权限和可执行位。
89
+ - 信号差异。
90
+ - 大小写和文件锁行为。
91
+
92
+ 不要把平台判断散落在整个业务代码中。
@@ -0,0 +1,107 @@
1
+ # 格式化、Lint 与复杂度
2
+
3
+ ## 工具统一风格
4
+
5
+ 格式由 Prettier、Oxfmt、Biome 或仓库选定工具自动完成。代码评审不讨论工具已能确定的空格、换行和引号偏好。
6
+
7
+ 常见基线:
8
+
9
+ ```json
10
+ {
11
+ "singleQuote": true,
12
+ "semi": false,
13
+ "printWidth": 100,
14
+ "trailingComma": "none"
15
+ }
16
+ ```
17
+
18
+ 具体值可不同,但必须全项目一致并在 CI 检查。
19
+
20
+ ## 通用格式规则
21
+
22
+ - 2 空格缩进,除非仓库明确不同。
23
+ - 文件使用 LF 和末尾换行。
24
+ - 控制结构始终使用花括号。
25
+ - 不手工用空格对齐列。
26
+ - 避免将功能修改与全仓库格式化混在同一变更。
27
+ - 生成文件由生成器维护,不人工格式化修改。
28
+
29
+ ## Lint 覆盖
30
+
31
+ ### 正确性
32
+
33
+ - 未使用变量和导入。
34
+ - 浮动 Promise。
35
+ - 不可达代码、重复分支。
36
+ - React Hooks 规则。
37
+ - 意外赋值或错误比较。
38
+ - 无效正则和转义。
39
+
40
+ ### TypeScript
41
+
42
+ - 显式 `any`。
43
+ - 类型导入一致性。
44
+ - 无意义断言。
45
+ - Switch 穷尽检查。
46
+ - `@ts-ignore`。
47
+ - 不安全成员访问和调用;在性能允许时启用类型感知规则。
48
+
49
+ ### 架构与维护
50
+
51
+ - 循环依赖。
52
+ - 禁止跨层导入。
53
+ - 文件大小。
54
+ - 函数复杂度和嵌套。
55
+ - 重复导入。
56
+ - 无意义 Barrel。
57
+
58
+ ## 禁用规则
59
+
60
+ 禁用必须:
61
+
62
+ - 精确到单行或最小块。
63
+ - 指明规则名。
64
+ - 说明无法通过设计消除的原因。
65
+ - 有退出条件时附跟踪编号。
66
+
67
+ ```ts
68
+ // eslint-disable-next-line no-await-in-loop -- Server requires ordered writes.
69
+ await sendBatch(batch)
70
+ ```
71
+
72
+ 禁止文件级关闭核心类型安全、Hooks 或 Promise 规则来掩盖问题。
73
+
74
+ ## 文件大小预算
75
+
76
+ 建议触发审查的阈值:
77
+
78
+ | 文件 | 软上限 |
79
+ |---|---:|
80
+ | 普通 `.ts` | 300 行 |
81
+ | React `.tsx` | 400 行 |
82
+ | 测试 | 600~800 行 |
83
+ | 构建/生成脚本 | 600 行 |
84
+ | 函数 | 40~60 行 |
85
+
86
+ 行数不是唯一指标。还应考虑:
87
+
88
+ - 分支和圈复杂度。
89
+ - 依赖数量。
90
+ - 状态数量。
91
+ - 修改频率。
92
+ - 是否混合多个抽象层级。
93
+
94
+ ## 拆分方向
95
+
96
+ - 解析与验证。
97
+ - 领域规则与 I/O。
98
+ - 状态定义与 Selector。
99
+ - UI 容器与展示组件。
100
+ - 平台无关逻辑与平台适配器。
101
+ - 公共契约与内部实现。
102
+
103
+ 拆分后文件名必须具体,不得产生新的 `helpers.ts`。
104
+
105
+ ## 遗留文件
106
+
107
+ 对历史超限文件采用 Ratchet:不要求一次全部重写,但新修改不应继续扩大;每次触及时降低复杂度或提取一项明确职责。
@@ -0,0 +1,86 @@
1
+ # 配置、依赖与 CI
2
+
3
+ ## TypeScript 配置
4
+
5
+ - 不同运行环境使用独立配置或项目引用。
6
+ - 共享基线放在 `tsconfig.base.json`。
7
+ - 根配置只负责组合时可使用 `files: []` 和 `references`。
8
+ - 浏览器和 Node 的 `lib`、`types`、模块解析应隔离。
9
+ - 不通过放宽配置掩盖单个文件问题。
10
+
11
+ ## `package.json` 脚本
12
+
13
+ 提供稳定命令名,使开发者和 CI 不依赖具体工具:
14
+
15
+ ```json
16
+ {
17
+ "scripts": {
18
+ "format": "prettier --write .",
19
+ "format:check": "prettier --check .",
20
+ "lint": "eslint .",
21
+ "typecheck": "tsc --noEmit",
22
+ "test": "vitest run",
23
+ "build": "tsc -b",
24
+ "check": "pnpm format:check && pnpm lint && pnpm typecheck && pnpm test && pnpm build"
25
+ }
26
+ }
27
+ ```
28
+
29
+ 实际工具可以替换,但脚本职责保持稳定。
30
+
31
+ ## 依赖分类
32
+
33
+ - 运行时需要的包放 `dependencies`。
34
+ - 构建、测试、类型和格式工具放 `devDependencies`。
35
+ - 锁文件必须提交。
36
+ - `packageManager` 固定包管理器及版本。
37
+ - 新依赖评估维护状态、体积、许可证、安全和平台兼容性。
38
+ - 不为一个简单函数引入大型依赖。
39
+ - 同一能力避免并存多个库。
40
+
41
+ ## 配置边界
42
+
43
+ 配置在入口处解析并转换为只读、类型安全对象。区分:
44
+
45
+ - 构建时配置。
46
+ - 启动时环境配置。
47
+ - 用户配置。
48
+ - 动态远端配置。
49
+
50
+ 业务代码通过依赖或上下文接收配置,不到处读取全局变量。
51
+
52
+ ## CI 门禁
53
+
54
+ 推荐顺序:
55
+
56
+ ```text
57
+ install
58
+ → format:check
59
+ → lint
60
+ → typecheck
61
+ → unit tests
62
+ → build
63
+ → integration/e2e
64
+ ```
65
+
66
+ 按项目增加:
67
+
68
+ - 依赖边界检查。
69
+ - 文件大小和复杂度检查。
70
+ - 安全扫描。
71
+ - 许可证检查。
72
+ - 本地化键检查。
73
+ - 包体积或性能预算。
74
+
75
+ ## 本地钩子
76
+
77
+ 提交前钩子可仅处理暂存文件,保证快速反馈;完整类型检查、测试和构建必须由 CI 执行。
78
+
79
+ ## 禁止的“通过”方式
80
+
81
+ - 删除或长期跳过失败测试。
82
+ - 关闭核心 Lint 规则。
83
+ - 扩大 `any` 或强制断言。
84
+ - 放宽 TypeScript 配置而无迁移计划。
85
+ - 降低测试范围以隐藏回归。
86
+ - 忽略构建警告或生成失败。
@@ -0,0 +1,65 @@
1
+ # 安全、性能与国际化
2
+
3
+ ## 输入安全
4
+
5
+ 所有外部输入必须验证,包括 API、IPC、消息、配置、文件、URL 和用户输入。
6
+
7
+ - 路径防止目录穿越。
8
+ - SQL 使用参数化查询。
9
+ - Shell 使用参数数组并正确转义。
10
+ - HTML 默认转义,谨慎使用原始 HTML。
11
+ - URL、重定向和文件类型需要校验。
12
+ - 跨窗口、跨进程消息校验来源和结构。
13
+
14
+ ## 敏感信息
15
+
16
+ 禁止:
17
+
18
+ - 日志记录密码、Token、Cookie、私钥。
19
+ - 将秘密打包到浏览器代码。
20
+ - 提交 `.env`、证书或生产配置。
21
+ - 向最终用户泄露内部堆栈、路径和未脱敏请求。
22
+ - 把用户输入直接作为命令、查询或文件路径执行。
23
+
24
+ 日志应使用结构化字段并在边界脱敏。
25
+
26
+ ## 权限
27
+
28
+ - 默认最小权限。
29
+ - 权限判断集中在策略或 Guard 中。
30
+ - UI 隐藏按钮不能替代服务端鉴权。
31
+ - 高风险操作有确认、审计和幂等保护。
32
+ - 不依赖客户端可篡改字段作最终安全决策。
33
+
34
+ ## 性能原则
35
+
36
+ - 优化以前先测量。
37
+ - 优先改进算法复杂度、I/O 次数和数据复制。
38
+ - 大文件、日志和列表使用流式、分页、窗口化或虚拟化。
39
+ - 避免热路径重复解析配置、创建正则、序列化大型对象或读取磁盘。
40
+ - 定时器、监听器、队列和缓存必须有上限和清理。
41
+
42
+ ## 缓存
43
+
44
+ 缓存需要明确:
45
+
46
+ - 键和命名空间。
47
+ - 容量上限。
48
+ - 淘汰策略。
49
+ - 过期和主动失效。
50
+ - 一致性要求。
51
+ - 是否缓存错误或空结果。
52
+
53
+ 非直观优化应有基准、回归测试或简短原因说明。
54
+
55
+ ## 国际化
56
+
57
+ 有多语言需求时:
58
+
59
+ - 用户可见文本不散落为硬编码字符串。
60
+ - 文案键按领域语义命名,不按屏幕位置命名。
61
+ - 插值使用具名参数。
62
+ - 不拼接自然语言句子。
63
+ - 日期、数字、货币和复数使用国际化 API。
64
+ - 用户提示和开发日志分离。
65
+ - CI 检查缺失键、未使用键和占位符不一致。
@@ -0,0 +1,79 @@
1
+ # Git、代码评审与交付
2
+
3
+ ## 分支命名
4
+
5
+ 推荐:
6
+
7
+ - `feat/workspace-search`
8
+ - `fix/session-timeout-race`
9
+ - `refactor/terminal-state-split`
10
+ - `perf/large-log-rendering`
11
+ - `test/payment-retry-policy`
12
+ - `docs/typescript-style-guide`
13
+ - `chore/upgrade-vitest`
14
+
15
+ 避免 `update`、`changes`、`fix-stuff` 等无语义名称。
16
+
17
+ ## 提交信息
18
+
19
+ 可采用 Conventional Commits:
20
+
21
+ ```text
22
+ feat(auth): add device authorization flow
23
+ fix(terminal): prevent duplicate process cleanup
24
+ refactor(store): split workspace selectors
25
+ test(cli): cover empty shell argument
26
+ ```
27
+
28
+ 提交应:
29
+
30
+ - 聚焦一个逻辑变化。
31
+ - 不混入无关格式化。
32
+ - 能通过基本检查。
33
+ - 不包含秘密、构建产物和本地配置。
34
+ - 说明改变的目的,而不仅是文件列表。
35
+
36
+ ## Pull Request
37
+
38
+ PR 应包含:
39
+
40
+ - 背景和问题。
41
+ - 方案和关键取舍。
42
+ - 风险、兼容性和迁移影响。
43
+ - 验证方式。
44
+ - UI 变化的截图或录屏。
45
+ - 缺陷修复的回归测试。
46
+ - 未完成项和后续工作。
47
+
48
+ ## 审查优先级
49
+
50
+ 1. 正确性、安全、数据完整性。
51
+ 2. 类型边界和运行时验证。
52
+ 3. 资源生命周期、并发、错误处理。
53
+ 4. 架构边界和公共 API。
54
+ 5. 测试缺口。
55
+ 6. 可维护性与命名。
56
+ 7. 风格。
57
+
58
+ ## 审查意见格式
59
+
60
+ 一条有效意见应尽量说明:
61
+
62
+ - 具体位置。
63
+ - 真实风险。
64
+ - 触发条件。
65
+ - 建议修复方向。
66
+ - 是否阻塞合并。
67
+
68
+ 不要只写“这里不好”“建议重构”。
69
+
70
+ ## 交付检查
71
+
72
+ - 格式检查通过。
73
+ - Lint 通过。
74
+ - 类型检查通过。
75
+ - 相关测试通过。
76
+ - 构建通过。
77
+ - 文档和配置同步。
78
+ - 没有无关改动。
79
+ - 已评估跨平台、安全、性能和兼容性。
@@ -0,0 +1,84 @@
1
+ # 落地、例外与迁移
2
+
3
+ ## 例外原则
4
+
5
+ 规范允许例外,但不允许无记录的例外。例外必须:
6
+
7
+ 1. 有具体技术原因。
8
+ 2. 范围尽可能小。
9
+ 3. 在代码、配置或 PR 中说明。
10
+ 4. 不破坏核心安全与类型边界。
11
+ 5. 临时例外有退出条件和跟踪任务。
12
+ 6. 经代码评审确认。
13
+
14
+ ## 例外示例
15
+
16
+ ```ts
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ // Why: Vendor callback type is incorrect; remove after SDK-481 is fixed.
19
+ function normalizeVendorPayload(payload: any): NormalizedPayload {
20
+ return vendorPayloadSchema.parse(payload)
21
+ }
22
+ ```
23
+
24
+ 该例外仍在边界进行运行时验证,不让 `any` 传播。
25
+
26
+ ## 遗留项目迁移
27
+
28
+ 不要一次性重写全部代码。推荐阶段:
29
+
30
+ ### 阶段 1:建立事实和门禁
31
+
32
+ - 固定包管理器和锁文件。
33
+ - 增加稳定的 `format:check`、`lint`、`typecheck`、`test`、`build` 命令。
34
+ - CI 先报告问题,再逐步改为阻塞。
35
+
36
+ ### 阶段 2:阻止新增债务
37
+
38
+ - 新文件遵守命名和大小规则。
39
+ - 新 API 不使用 `any`。
40
+ - 新外部输入必须验证。
41
+ - 新缺陷修复补回归测试。
42
+
43
+ ### 阶段 3:按触及范围治理
44
+
45
+ - 修改旧文件时降低复杂度。
46
+ - 拆出纯逻辑并补测试。
47
+ - 清理循环依赖和万能工具文件。
48
+ - 缩小公共 API。
49
+
50
+ ### 阶段 4:专项迁移
51
+
52
+ - 分模块开启更严格的 TypeScript 选项。
53
+ - 按领域迁移目录。
54
+ - 引入项目引用和依赖边界检查。
55
+ - 清理临时规则禁用和类型断言。
56
+
57
+ ## Ratchet 策略
58
+
59
+ 对无法立即达标的指标采用“只降不升”:
60
+
61
+ - 文件行数不能继续增长。
62
+ - `any` 数量不能增加。
63
+ - 循环依赖数量不能增加。
64
+ - 被跳过测试数量不能增加。
65
+ - Lint 警告基线只能下降。
66
+
67
+ ## 自动生成代码
68
+
69
+ 生成代码可以豁免部分格式、大小和命名规则,但必须:
70
+
71
+ - 明确标识生成来源。
72
+ - 不手工修改。
73
+ - 将生成目录排除在不适用检查外。
74
+ - 对生成器本身进行测试和审查。
75
+
76
+ ## 大规模重命名
77
+
78
+ 只有在用户明确要求或迁移收益充分时进行。应:
79
+
80
+ - 单独 PR。
81
+ - 不混入功能变化。
82
+ - 使用自动化重构工具。
83
+ - 检查大小写敏感文件系统和 Git 重命名。
84
+ - 验证导入、测试、文档和构建。
@@ -0,0 +1,54 @@
1
+ # 从 Orca 项目提炼的工程习惯
2
+
3
+ 本文件记录从 Orca 类型项目实践中抽象出的可迁移经验。它不是要求其他项目复制 Electron 目录,也不是 Orca 上游规范的逐字镜像。
4
+
5
+ ## 1. 运行环境边界优先
6
+
7
+ Orca 一类 Electron 项目天然包含主进程、预加载、渲染器、共享代码和命令行等不同运行环境。可迁移经验是:
8
+
9
+ - 运行能力不同的代码应物理隔离。
10
+ - 每个环境使用适合自己的 TypeScript 配置和依赖范围。
11
+ - 跨边界接口显式化,而不是随意互相导入。
12
+
13
+ ## 2. 领域内部局部平铺
14
+
15
+ Orca 的工程习惯体现出:同一明确职责区域不必为每个实现再加一层目录。可迁移经验是:
16
+
17
+ - 小型领域优先平铺。
18
+ - 文件名承担定位职责。
19
+ - 只有形成稳定子域后再增加目录。
20
+
21
+ ## 3. 文件名具体
22
+
23
+ 相较 `utils.ts`、`helpers.ts`,具体动作和领域名称更利于搜索、审查和拆分。例如清理、解析、引用、状态选择、平台适配等职责可以直接进入文件名。
24
+
25
+ ## 4. 控制文件体积
26
+
27
+ 对普通 TypeScript、React 文件和测试设置不同的大小预算,可以提前暴露职责混合。数字应视为审查触发器,而非机械规则。
28
+
29
+ ## 5. 注释关注 WHY
30
+
31
+ 简短解释兼容性、性能、安全和平台差异,比逐行描述实现更有价值。注释不能替代清晰命名和模块拆分。
32
+
33
+ ## 6. 工具链形成门禁
34
+
35
+ Orca 类现代项目通常将格式化、Lint、类型检查、测试和 Git/CI 检查组合起来。可迁移经验是:
36
+
37
+ - 规范应尽量机器可执行。
38
+ - 命令名保持稳定,底层工具可替换。
39
+ - 不允许通过关闭规则或删除测试绕过门禁。
40
+
41
+ ## 7. 测试靠近实现
42
+
43
+ 单元测试和实现共置,便于发现、移动和维护;集成和 E2E 测试则按跨模块边界集中管理。
44
+
45
+ ## 8. 不机械复制
46
+
47
+ 不应直接复制:
48
+
49
+ - Electron 专属目录到普通 Node 或 Web 项目。
50
+ - 某个具体格式工具的全部选项。
51
+ - 某个仓库的行数阈值作为绝对标准。
52
+ - 某个框架生成目录的特殊命名。
53
+
54
+ 应复制的是背后的目的:边界清晰、职责具体、类型严格、质量自动化、修改可验证。
@@ -0,0 +1,45 @@
1
+ # Reference Index
2
+
3
+ 本目录保存 TypeScript 工程规范的详细知识模块。`SKILL.md` 是唯一主入口;执行具体任务时只读取必要模块。
4
+
5
+ ## 分类
6
+
7
+ ### 治理与决策
8
+
9
+ - `00-standard-levels-and-precedence.md`:规则级别、冲突处理、事实优先。
10
+ - `14-adoption-exceptions-and-migration.md`:例外、遗留项目、渐进迁移。
11
+ - `15-orca-derived-observations.md`:从 Orca 工程实践中抽象出的可迁移经验。
12
+
13
+ ### 架构与代码组织
14
+
15
+ - `01-project-architecture-and-directory-layout.md`
16
+ - `02-file-directory-and-symbol-naming.md`
17
+ - `03-modules-imports-exports-and-dependencies.md`
18
+
19
+ ### 语言与实现
20
+
21
+ - `04-typescript-type-system.md`
22
+ - `05-functions-async-errors-and-resources.md`
23
+ - `06-comments-jsdoc-and-documentation.md`
24
+
25
+ ### 平台与测试
26
+
27
+ - `07-testing-strategy.md`
28
+ - `08-react-and-frontend.md`
29
+ - `09-node-cli-and-cross-platform.md`
30
+
31
+ ### 工程化与交付
32
+
33
+ - `10-formatting-lint-and-complexity.md`
34
+ - `11-configuration-dependencies-and-ci.md`
35
+ - `12-security-performance-and-i18n.md`
36
+ - `13-git-review-and-delivery.md`
37
+
38
+ ## 读取原则
39
+
40
+ - 单文件命名问题:读取 `02`,通常无需读取其他文件。
41
+ - 类型错误或 API 设计:读取 `04`,涉及异步时再读 `05`。
42
+ - 新领域目录设计:读取 `01`、`02`、`03`。
43
+ - React 组件重构:读取 `08`,并按需补充 `04`、`05`、`07`。
44
+ - 全仓库审计:从 `00` 开始,再按仓库技术栈选择相关模块。
45
+ - 制定团队规范:先读 `00`、`01`、`02`、`04`、`10`、`11`、`13`,其余按技术栈补充。