@namewta/speculo 0.7.4 → 0.7.5

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 (157) hide show
  1. package/README.md +2 -2
  2. package/package.json +1 -1
  3. package/template/canonical/README.md +208 -63
  4. package/template/canonical/canonical-person-steelman-deliberation.md +518 -0
  5. package/template/skills/engineering-standards-builder/README.md +43 -0
  6. package/template/skills/engineering-standards-builder/SKILL.md +233 -0
  7. package/template/skills/engineering-standards-builder/examples/README.md +15 -0
  8. package/template/skills/engineering-standards-builder/examples/fallback/kotlin-gradle/build.gradle.kts +5 -0
  9. package/template/skills/engineering-standards-builder/examples/fallback/kotlin-gradle/expected.json +12 -0
  10. package/template/skills/engineering-standards-builder/examples/fallback/kotlin-gradle/src/main/kotlin/example/App.kt +2 -0
  11. package/template/skills/engineering-standards-builder/examples/go/service/.golangci.yml +3 -0
  12. package/template/skills/engineering-standards-builder/examples/go/service/cmd/api/main.go +3 -0
  13. package/template/skills/engineering-standards-builder/examples/go/service/expected.json +23 -0
  14. package/template/skills/engineering-standards-builder/examples/go/service/go.mod +3 -0
  15. package/template/skills/engineering-standards-builder/examples/go/service/internal/service/service.go +2 -0
  16. package/template/skills/engineering-standards-builder/examples/go/service/internal/service/service_test.go +3 -0
  17. package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/expected.json +22 -0
  18. package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/pom.xml +12 -0
  19. package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/src/main/java/dev/speculo/orders/OrdersApplication.java +7 -0
  20. package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/src/test/java/dev/speculo/orders/OrdersApplicationTest.java +3 -0
  21. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/.github/workflows/ci.yml +11 -0
  22. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/apps/web/package.json +11 -0
  23. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/apps/web/src/App.vue +2 -0
  24. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/apps/web/tsconfig.json +8 -0
  25. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/expected.json +22 -0
  26. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/package.json +11 -0
  27. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/pnpm-workspace.yaml +2 -0
  28. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/orders/pom.xml +12 -0
  29. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/orders/src/main/java/dev/speculo/orders/OrdersApplication.java +7 -0
  30. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/worker/go.mod +3 -0
  31. package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/worker/main.go +2 -0
  32. package/template/skills/engineering-standards-builder/examples/rust/workspace/Cargo.toml +7 -0
  33. package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/cli/Cargo.toml +8 -0
  34. package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/cli/src/main.rs +1 -0
  35. package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/core/Cargo.toml +5 -0
  36. package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/core/src/lib.rs +3 -0
  37. package/template/skills/engineering-standards-builder/examples/rust/workspace/expected.json +14 -0
  38. package/template/skills/engineering-standards-builder/examples/rust/workspace/rust-toolchain.toml +3 -0
  39. package/template/skills/engineering-standards-builder/examples/typescript/react-vite/expected.json +21 -0
  40. package/template/skills/engineering-standards-builder/examples/typescript/react-vite/package.json +20 -0
  41. package/template/skills/engineering-standards-builder/examples/typescript/react-vite/src/App.test.tsx +2 -0
  42. package/template/skills/engineering-standards-builder/examples/typescript/react-vite/src/App.tsx +1 -0
  43. package/template/skills/engineering-standards-builder/examples/typescript/react-vite/src/main.tsx +3 -0
  44. package/template/skills/engineering-standards-builder/examples/typescript/react-vite/tsconfig.json +10 -0
  45. package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/expected.json +22 -0
  46. package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/package.json +21 -0
  47. package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/src/App.test.ts +2 -0
  48. package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/src/App.vue +7 -0
  49. package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/src/main.ts +4 -0
  50. package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/tsconfig.json +11 -0
  51. package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/vite.config.ts +2 -0
  52. package/template/skills/engineering-standards-builder/manifest.txt +112 -0
  53. package/template/skills/engineering-standards-builder/references/go/00-detection-and-scope.md +37 -0
  54. package/template/skills/engineering-standards-builder/references/go/01-language-and-idioms.md +34 -0
  55. package/template/skills/engineering-standards-builder/references/go/02-modules-packages-and-layout.md +34 -0
  56. package/template/skills/engineering-standards-builder/references/go/03-errors-context-and-concurrency.md +38 -0
  57. package/template/skills/engineering-standards-builder/references/go/04-testing-tooling-quality-gates.md +46 -0
  58. package/template/skills/engineering-standards-builder/references/go/README.md +9 -0
  59. package/template/skills/engineering-standards-builder/references/java/00-detection-and-scope.md +40 -0
  60. package/template/skills/engineering-standards-builder/references/java/01-language-packages-and-api.md +35 -0
  61. package/template/skills/engineering-standards-builder/references/java/02-build-modules-and-dependencies.md +39 -0
  62. package/template/skills/engineering-standards-builder/references/java/03-errors-nullability-resources-concurrency.md +36 -0
  63. package/template/skills/engineering-standards-builder/references/java/04-testing-tooling-quality-gates.md +36 -0
  64. package/template/skills/engineering-standards-builder/references/java/README.md +10 -0
  65. package/template/skills/engineering-standards-builder/references/java/frameworks/spring-boot.md +74 -0
  66. package/template/skills/engineering-standards-builder/references/rules/00-governance-and-precedence.md +52 -0
  67. package/template/skills/engineering-standards-builder/references/rules/01-project-discovery.md +79 -0
  68. package/template/skills/engineering-standards-builder/references/rules/02-evidence-topology-and-scope.md +87 -0
  69. package/template/skills/engineering-standards-builder/references/rules/03-interview-and-decisions.md +77 -0
  70. package/template/skills/engineering-standards-builder/references/rules/04-architecture-and-dependency-boundaries.md +58 -0
  71. package/template/skills/engineering-standards-builder/references/rules/05-files-directories-and-naming.md +53 -0
  72. package/template/skills/engineering-standards-builder/references/rules/06-apis-errors-resources-and-concurrency.md +53 -0
  73. package/template/skills/engineering-standards-builder/references/rules/07-documentation-and-comments.md +46 -0
  74. package/template/skills/engineering-standards-builder/references/rules/08-testing-strategy.md +45 -0
  75. package/template/skills/engineering-standards-builder/references/rules/09-security-configuration-and-data.md +44 -0
  76. package/template/skills/engineering-standards-builder/references/rules/10-performance-observability-and-i18n.md +36 -0
  77. package/template/skills/engineering-standards-builder/references/rules/11-tooling-quality-gates-and-ci.md +69 -0
  78. package/template/skills/engineering-standards-builder/references/rules/12-git-review-and-delivery.md +46 -0
  79. package/template/skills/engineering-standards-builder/references/rules/13-adoption-exceptions-and-ratchets.md +60 -0
  80. package/template/skills/engineering-standards-builder/references/rules/14-generation-contract.md +105 -0
  81. package/template/skills/engineering-standards-builder/references/rules/15-validation-contract.md +65 -0
  82. package/template/skills/engineering-standards-builder/references/rules/16-language-adapter-contract.md +55 -0
  83. package/template/skills/engineering-standards-builder/references/rules/README.md +23 -0
  84. package/template/skills/engineering-standards-builder/references/rust/00-detection-and-scope.md +38 -0
  85. package/template/skills/engineering-standards-builder/references/rust/01-language-api-and-safety.md +35 -0
  86. package/template/skills/engineering-standards-builder/references/rust/02-crates-workspaces-and-layout.md +36 -0
  87. package/template/skills/engineering-standards-builder/references/rust/03-errors-ownership-and-concurrency.md +37 -0
  88. package/template/skills/engineering-standards-builder/references/rust/04-testing-tooling-quality-gates.md +44 -0
  89. package/template/skills/engineering-standards-builder/references/rust/README.md +9 -0
  90. package/template/skills/engineering-standards-builder/references/typescript/00-detection-and-scope.md +58 -0
  91. package/template/skills/engineering-standards-builder/references/typescript/01-language-and-type-system.md +49 -0
  92. package/template/skills/engineering-standards-builder/references/typescript/02-modules-packages-and-runtime-boundaries.md +49 -0
  93. package/template/skills/engineering-standards-builder/references/typescript/03-functions-async-errors-resources.md +42 -0
  94. package/template/skills/engineering-standards-builder/references/typescript/04-testing-tooling-quality-gates.md +51 -0
  95. package/template/skills/engineering-standards-builder/references/typescript/README.md +27 -0
  96. package/template/skills/engineering-standards-builder/references/typescript/app-types/cli.md +11 -0
  97. package/template/skills/engineering-standards-builder/references/typescript/app-types/library.md +11 -0
  98. package/template/skills/engineering-standards-builder/references/typescript/frameworks/react.md +71 -0
  99. package/template/skills/engineering-standards-builder/references/typescript/frameworks/vue.md +131 -0
  100. package/template/skills/engineering-standards-builder/references/typescript/runtimes/browser.md +15 -0
  101. package/template/skills/engineering-standards-builder/references/typescript/runtimes/electron.md +25 -0
  102. package/template/skills/engineering-standards-builder/references/typescript/runtimes/node.md +13 -0
  103. package/template/skills/engineering-standards-builder/scripts/discover-project.mjs +957 -0
  104. package/template/skills/engineering-standards-builder/scripts/self-test.mjs +203 -0
  105. package/template/skills/engineering-standards-builder/scripts/sync-manifest.mjs +105 -0
  106. package/template/skills/engineering-standards-builder/scripts/validate-builder.mjs +255 -0
  107. package/template/skills/engineering-standards-builder/scripts/validate-generated-skill.mjs +286 -0
  108. package/template/skills/engineering-standards-builder/templates/README.md +18 -0
  109. package/template/skills/engineering-standards-builder/templates/compatibility/agents-typescript--standards.md +6 -0
  110. package/template/skills/engineering-standards-builder/templates/compatibility/agents-typescript-standards.md +6 -0
  111. package/template/skills/engineering-standards-builder/templates/compatibility/claude-engineering-standards.md +6 -0
  112. package/template/skills/engineering-standards-builder/templates/compatibility/claude-typescript-standards.md +6 -0
  113. package/template/skills/engineering-standards-builder/templates/project-skill/SKILL.md.template +26 -0
  114. package/template/skills/engineering-standards-builder/templates/project-skill/references/project/00-project-profile.md.template +26 -0
  115. package/template/skills/engineering-standards-builder/templates/project-skill/references/project/01-module-map.md.template +27 -0
  116. package/template/skills/engineering-standards-builder/templates/project-skill/references/project/02-decisions-and-exceptions.md.template +31 -0
  117. package/template/skills/engineering-standards-builder/templates/project-skill/references/project/review-checklist.md.template +14 -0
  118. package/template/skills/source-code-zip-skill/SKILL.md +343 -0
  119. package/template/skills/source-code-zip-skill/scripts/zip_source_code.py +638 -0
  120. package/template/workflows/person/INDEX.md +1 -0
  121. package/template/workflows/person/S-steelman-deliberation/S-steelman-deliberation.md +218 -0
  122. package/template/workflows/person/S-steelman-deliberation/_templates/decision-template.md +51 -0
  123. package/template/workflows/person/S-steelman-deliberation/_templates/steelman-dossier-template.md +96 -0
  124. package/template/workflows/person/S-steelman-deliberation/deliberate.md +127 -0
  125. package/template/workflows/person/S-steelman-deliberation/evidence-gate.md +37 -0
  126. package/template/workflows/person/S-steelman-deliberation/judge.md +69 -0
  127. package/template/workflows/person/S-steelman-deliberation/tools/validate-steelman-change.mjs +697 -0
  128. package/template/skills/typescript-standards-builder/README.md +0 -53
  129. package/template/skills/typescript-standards-builder/SKILL.md +0 -245
  130. package/template/skills/typescript-standards-builder/examples/sample-generated-tree.md +0 -30
  131. package/template/skills/typescript-standards-builder/examples/sample-interview-decisions.md +0 -26
  132. package/template/skills/typescript-standards-builder/manifest.txt +0 -29
  133. package/template/skills/typescript-standards-builder/references/00-governance-and-fixed-defaults.md +0 -77
  134. package/template/skills/typescript-standards-builder/references/01-project-discovery.md +0 -100
  135. package/template/skills/typescript-standards-builder/references/02-interview-workflow.md +0 -129
  136. package/template/skills/typescript-standards-builder/references/03-project-architecture-and-directory-layout.md +0 -84
  137. package/template/skills/typescript-standards-builder/references/04-file-directory-and-symbol-naming.md +0 -92
  138. package/template/skills/typescript-standards-builder/references/05-modules-imports-exports-and-dependencies.md +0 -63
  139. package/template/skills/typescript-standards-builder/references/06-typescript-type-system.md +0 -64
  140. package/template/skills/typescript-standards-builder/references/07-functions-async-errors-and-resources.md +0 -42
  141. package/template/skills/typescript-standards-builder/references/08-comments-jsdoc-and-documentation.md +0 -51
  142. package/template/skills/typescript-standards-builder/references/09-testing-strategy.md +0 -58
  143. package/template/skills/typescript-standards-builder/references/10-react-and-frontend.md +0 -39
  144. package/template/skills/typescript-standards-builder/references/11-node-cli-and-cross-platform.md +0 -31
  145. package/template/skills/typescript-standards-builder/references/12-formatting-lint-and-complexity.md +0 -58
  146. package/template/skills/typescript-standards-builder/references/13-configuration-dependencies-and-ci.md +0 -71
  147. package/template/skills/typescript-standards-builder/references/14-security-performance-and-i18n.md +0 -32
  148. package/template/skills/typescript-standards-builder/references/15-git-review-and-delivery.md +0 -28
  149. package/template/skills/typescript-standards-builder/references/16-adoption-exceptions-and-migration.md +0 -61
  150. package/template/skills/typescript-standards-builder/references/17-generation-contract.md +0 -104
  151. package/template/skills/typescript-standards-builder/references/README.md +0 -37
  152. package/template/skills/typescript-standards-builder/templates/agents-compat-skill/SKILL.md +0 -1
  153. package/template/skills/typescript-standards-builder/templates/claude-skill/SKILL.md +0 -1
  154. package/template/skills/typescript-standards-builder/templates/project-skill/SKILL.md.template +0 -34
  155. package/template/skills/typescript-standards-builder/templates/project-skill/references/00-project-profile.md.template +0 -17
  156. package/template/skills/typescript-standards-builder/templates/project-skill/references/10-review-checklist.md +0 -23
  157. package/template/skills/typescript-standards-builder/templates/project-skill/references/11-decisions-and-exceptions.md.template +0 -19
@@ -0,0 +1,58 @@
1
+ # TypeScript / JavaScript:检测、版本与作用域
2
+
3
+ ## 触发信号
4
+
5
+ 至少交叉验证两类信号:
6
+
7
+ - `package.json`、Workspace 配置和锁文件;
8
+ - `tsconfig*.json`、`jsconfig.json`;
9
+ - `.ts`、`.tsx`、`.mts`、`.cts`、`.js`、`.jsx`、`.vue` 源码;
10
+ - CI 中的 package manager、编译、Lint、测试和构建命令;
11
+ - 框架入口、bundler 配置和 package exports。
12
+
13
+ 只有依赖但无源码使用时记为依赖信号。根 `package.json` 不能自动把所有 Workspace package 判定为同一框架或运行时。
14
+
15
+ ## 版本事实
16
+
17
+ 记录而不猜测:
18
+
19
+ - Node/Bun/Deno 等运行时版本来源;
20
+ - TypeScript 版本与 `compilerOptions`;
21
+ - package manager 与锁文件;
22
+ - ESM/CJS 声明;
23
+ - 浏览器、Node、Worker、测试、Electron 等环境分别使用的配置;
24
+ - React/Vue 和构建工具的大版本。
25
+
26
+ 版本来源优先级:锁定工具链配置、CI、manifest、锁文件、文档。不得把 Builder 所在环境版本当作项目版本。
27
+
28
+ ## Scope
29
+
30
+ 常见 scope:
31
+
32
+ ```text
33
+ module:apps/web
34
+ module:packages/sdk
35
+ language:typescript
36
+ runtime:browser
37
+ runtime:node
38
+ framework:vue
39
+ framework:react
40
+ ```
41
+
42
+ `.vue` 中的 TypeScript 属于 Vue 模块;Node 构建脚本不应继承浏览器 DOM 规则;测试配置可有独立编译环境。
43
+
44
+ ## 访谈触发
45
+
46
+ 仅在证据冲突时询问:
47
+
48
+ - JavaScript 存量是否迁移到 TypeScript;
49
+ - strict 提升采用全量、模块阶段还是新代码 Ratchet;
50
+ - 多运行环境是否拆分 tsconfig;
51
+ - ESM/CJS 目标与发布兼容范围;
52
+ - typed linting 的作用域和性能预算。
53
+
54
+ ## 官方依据
55
+
56
+ - [TypeScript TSConfig](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html)
57
+ - [TypeScript Project References](https://www.typescriptlang.org/docs/handbook/project-references.html)
58
+ - [Node.js packages: modules](https://nodejs.org/api/packages.html)
@@ -0,0 +1,49 @@
1
+ # TypeScript / JavaScript:语言与类型系统
2
+
3
+ ## 编译边界
4
+
5
+ - 每个运行环境使用与其全局对象、module resolution 和输出目标一致的配置;必要时以共享 base + 独立 app/test/tooling tsconfig 组织。
6
+ - 新项目默认采用当前版本可支持的严格检查;存量项目先测量,再按模块或错误基线 Ratchet。
7
+ - `skipLibCheck`、宽松选项和声明补丁记录原因、scope 与删除条件。
8
+ - 不为修复局部错误全局降低 strictness。
9
+
10
+ ## 可信边界
11
+
12
+ - 外部 JSON、环境变量、消息、DOM dataset、存储和第三方 SDK 返回值先视为 `unknown`,在边界验证并缩窄。
13
+ - `any` 只允许在无法建模的兼容边界短暂存在;使用位置、风险和替换条件必须明确。
14
+ - 类型断言不能代替运行时验证;双重断言和非空断言只允许有可证明不变量的局部位置。
15
+ - 使用判别联合、精确字面量、泛型约束和领域类型表达非法状态。
16
+ - 不用宽泛索引签名抹去已知字段和错误拼写。
17
+
18
+ ## 类型设计
19
+
20
+ - 类型从 public contract 和领域不变量出发,不为“减少几行”制造晦涩元编程。
21
+ - `interface` 与 `type` 遵循 scope 内主导实践;只有扩展/声明合并等语义差异需要决策,不把偏好升级为 MUST。
22
+ - 公共泛型有明确约束和推断体验;避免让调用者重复提供可推断类型。
23
+ - `readonly`、不可变集合或复制边界用于表达所有权,不无条件深只读全部对象。
24
+ - 枚举选择遵循现有序列化和编译目标;不要在不了解运行时产物时强制切换 `enum`、const object 或 union。
25
+
26
+ ## JavaScript scope
27
+
28
+ 纯 JavaScript 模块仍适用:
29
+
30
+ - 使用 JSDoc、`checkJs` 或 schema 获得边界类型;
31
+ - 不把迁移中的 `.js` 文件假装成已严格类型化;
32
+ - TypeScript 迁移按目录、入口或公共 API 分阶段;
33
+ - package exports 和运行时行为优先于类型表面统一。
34
+
35
+ ## 规则输出示例
36
+
37
+ ```text
38
+ Scope: module:packages/api-client
39
+ Level: MUST
40
+ Source: repository-fact + user-decision
41
+ Rule: 网络响应在 adapter 边界验证,业务层不得直接断言为领域类型。
42
+ Verification: typecheck;响应 schema 测试;review 搜索未经收窄的 unknown/any。
43
+ ```
44
+
45
+ ## 官方依据
46
+
47
+ - [TypeScript `strict`](https://www.typescriptlang.org/tsconfig/strict.html)
48
+ - [TypeScript narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
49
+ - [TypeScript declaration reference](https://www.typescriptlang.org/docs/handbook/declaration-files/by-example.html)
@@ -0,0 +1,49 @@
1
+ # TypeScript / JavaScript:模块、包与运行环境边界
2
+
3
+ ## Package 与公开入口
4
+
5
+ - Workspace package 只通过 `package.json` exports、声明的入口或项目确认的 public barrel 暴露 API。
6
+ - 跨 package 深导入内部路径默认禁止;内部测试若需要白盒入口,应建立显式 test-only contract。
7
+ - `main`、`module`、`types`、`exports`、`imports`、`bin` 与实际构建产物保持一致。
8
+ - package 内部可用相对路径或受控 alias;alias 不得绕过 Workspace 边界或发布时失效。
9
+ - 类型导入在项目工具支持时使用 `import type`,避免意外运行时依赖和循环。
10
+
11
+ ## Barrel
12
+
13
+ barrel 不是通用默认。只有在以下条件成立时采用:
14
+
15
+ - 代表稳定 public surface;
16
+ - 不造成隐藏副作用、初始化顺序问题或循环;
17
+ - bundler、测试和 Node resolution 行为已验证;
18
+ - 不鼓励同 package 内部绕行 public 入口形成自循环。
19
+
20
+ “每个目录都建 `index.ts`”不得作为无证据强制规则。
21
+
22
+ ## ESM / CJS
23
+
24
+ - 依据项目 `type`、扩展名、tsconfig、bundler 和消费者支持范围确定。
25
+ - Node ESM 的路径扩展名、条件 exports 和动态 import 按真实运行环境验证。
26
+ - 库同时发布多格式时,测试每个导出条件和类型解析;避免 dual-package state hazard。
27
+ - 测试工具与生产 runtime 的 module 模式不一致时显式拆分配置。
28
+
29
+ ## 多运行环境
30
+
31
+ 浏览器、Node、Web Worker、Service Worker、Electron main/preload/renderer、测试和构建脚本应拥有清晰边界:
32
+
33
+ - 不共享错误的全局类型;
34
+ - 平台 API 通过 adapter 注入;
35
+ - 环境变量只在对应构建/运行边界读取;
36
+ - 共享包不得隐式依赖 DOM 或 Node globals,除非 contract 明确;
37
+ - 不把 bundler 能解析等同于 Node/消费者能解析。
38
+
39
+ ## 循环与副作用
40
+
41
+ - module 顶层副作用最小化;注册、polyfill 和启动逻辑放在明确入口。
42
+ - 循环依赖先修职责和依赖方向,不依赖打包顺序“碰巧可用”。
43
+ - 构建/测试通过不代表 lazy import、SSR 和生产 chunk 初始化顺序安全;高风险边界增加运行测试。
44
+
45
+ ## 官方依据
46
+
47
+ - [TypeScript modules reference](https://www.typescriptlang.org/docs/handbook/modules/reference.html)
48
+ - [Node.js packages](https://nodejs.org/api/packages.html)
49
+ - [Node.js ECMAScript modules](https://nodejs.org/api/esm.html)
@@ -0,0 +1,42 @@
1
+ # TypeScript / JavaScript:函数、异步、错误与资源
2
+
3
+ ## 函数合同
4
+
5
+ - 参数表达必需输入;可选项较多或布尔组合复杂时使用具名 options。
6
+ - 纯计算与 I/O、状态变更、日志和框架生命周期分离。
7
+ - callback、Promise、stream、iterator 和 event emitter 的失败与取消语义清楚。
8
+ - public function 的返回类型在有助于稳定 API 时显式声明;局部实现优先可靠推断。
9
+
10
+ ## Promise 与取消
11
+
12
+ - 不遗留 floating Promise;明确 `await`、return、批量等待或有监督的后台任务。
13
+ - 并发批处理定义最大并发度、失败策略、顺序需求和部分成功语义。
14
+ - 支持取消的 I/O 优先传播 `AbortSignal`;超时由调用边界定义并保留原始 cause。
15
+ - 忽略过期响应、组件卸载后的写入和竞争覆盖;请求所有者负责清理。
16
+ - `Promise.all`、`allSettled`、race 等按失败合同选择,不为简短牺牲语义。
17
+
18
+ ## Error
19
+
20
+ - 抛出/返回 `Error` 或项目定义错误类型,而不是裸字符串。
21
+ - catch 变量视为 `unknown`;只在能恢复、映射或增加边界上下文时捕获。
22
+ - 使用 `cause` 或项目现有机制保留原始错误。
23
+ - 日志、用户消息、HTTP/CLI 错误码分离;不重复在每一层记录同一错误。
24
+ - Node callback、event emitter `error`、stream 和 process rejection 都有明确处理边界。
25
+
26
+ ## 资源
27
+
28
+ - timer、event listener、subscription、stream、socket、worker、child process、temporary file 和 object URL 都有所有者与清理路径。
29
+ - 使用平台提供的结构化清理能力;`using`/`Disposable` 只有项目编译目标和依赖完整支持时才采用。
30
+ - 测试验证取消、超时、重复关闭、初始化部分失败和进程退出。
31
+
32
+ ## JavaScript interop
33
+
34
+ - 回调式 API 封装为 Promise 时只 settle 一次并正确转发 error。
35
+ - `this`、prototype、Proxy、动态属性和第三方未类型化对象限制在 adapter。
36
+ - 不通过无边界 monkey patch 修改全局或第三方对象。
37
+
38
+ ## 官方依据
39
+
40
+ - [MDN AbortController](https://developer.mozilla.org/docs/Web/API/AbortController)
41
+ - [Node.js error handling](https://nodejs.org/api/errors.html)
42
+ - [TypeScript release notes and resource management](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html)
@@ -0,0 +1,51 @@
1
+ # TypeScript / JavaScript:测试、工具链与质量门禁
2
+
3
+ ## 工具事实
4
+
5
+ 从仓库识别并复用:
6
+
7
+ - package manager 与锁文件;
8
+ - formatter:Prettier、Biome 或其他;
9
+ - lint/static analysis:ESLint、typescript-eslint、Biome、Oxlint 等;
10
+ - typecheck:`tsc`、`vue-tsc`、framework build;
11
+ - unit/component:Vitest、Jest、Node test runner 等;
12
+ - browser/E2E:Playwright、Cypress 等;
13
+ - bundler/build:Vite、Webpack、Rollup、esbuild、framework CLI。
14
+
15
+ 不得仅因为 Builder 熟悉某工具就引入或替换工具。
16
+
17
+ ## Type-aware linting
18
+
19
+ - 先区分 syntax-only 和 type-aware rules;后者更强但有项目加载和性能成本。
20
+ - 使用与 Workspace/tsconfig 架构匹配的 parser project 配置;避免单一巨型 config 意外加载整个 Monorepo。
21
+ - 生成文件、配置脚本和不同 runtime 可有有理由的 override。
22
+ - rule disable 最小化到行或文件,写明 WHY 与删除条件。
23
+
24
+ ## 测试
25
+
26
+ - 纯逻辑单元测试不启动完整框架或浏览器。
27
+ - DOM/组件测试验证公开交互和可访问输出,不读取私有状态。
28
+ - 与 layout、原生事件、浏览器 API 或 hydration 强相关的行为使用真实浏览器测试。
29
+ - package exports、ESM/CJS、SSR 和不同 runtime 使用消费方视角测试。
30
+ - mock timer、network 和 module 时在每个测试后恢复;避免全局泄漏。
31
+
32
+ ## 门禁
33
+
34
+ 项目规范记录真实命令与工作目录,例如:
35
+
36
+ ```text
37
+ format-check
38
+ lint
39
+ [type-aware lint]
40
+ typecheck
41
+ unit/component test
42
+ browser/E2E test
43
+ build/package
44
+ ```
45
+
46
+ 如果命令尚不存在,标记 planned,不伪装为当前门禁。
47
+
48
+ ## 官方依据
49
+
50
+ - [typescript-eslint typed linting](https://typescript-eslint.io/getting-started/typed-linting/)
51
+ - [TypeScript project references](https://www.typescriptlang.org/docs/handbook/project-references.html)
@@ -0,0 +1,27 @@
1
+ # TypeScript / JavaScript 适配器
2
+
3
+ 当 Project Inventory 为某个 scope 识别到 TypeScript 或 JavaScript 时读取本索引。先读语言核心,再按证据选择框架、运行时和应用类型。
4
+
5
+ ## 语言核心
6
+
7
+ - [检测、版本与作用域](00-detection-and-scope.md)
8
+ - [语言与类型系统](01-language-and-type-system.md)
9
+ - [模块、包与运行环境边界](02-modules-packages-and-runtime-boundaries.md)
10
+ - [函数、异步、错误与资源](03-functions-async-errors-resources.md)
11
+ - [测试、工具链与质量门禁](04-testing-tooling-quality-gates.md)
12
+
13
+ ## 框架
14
+
15
+ - [React](frameworks/react.md)
16
+ - [Vue](frameworks/vue.md)
17
+
18
+ ## 运行时
19
+
20
+ - [Browser](runtimes/browser.md)
21
+ - [Node.js](runtimes/node.md)
22
+ - [Electron](runtimes/electron.md)
23
+
24
+ ## 应用类型
25
+
26
+ - [CLI](app-types/cli.md)
27
+ - [发布库 / SDK](app-types/library.md)
@@ -0,0 +1,11 @@
1
+ # TypeScript / JavaScript CLI
2
+
3
+ - 入口只负责参数解析、配置、依赖装配、调用应用服务和映射退出码。
4
+ - 参数、环境和配置文件在边界验证;优先结构化 argv API,不自行拼 shell。
5
+ - stdout 为机器/用户主输出,stderr 为诊断;可脚本化输出提供稳定格式或 `--json`。
6
+ - `--help`、版本、错误示例和非零退出码行为稳定且可测试。
7
+ - 交互提示在非 TTY/CI 中有明确行为;不得永久等待隐藏输入。
8
+ - signal、取消、临时文件、锁、子进程和 stream 在退出前清理。
9
+ - 路径解析在明确 root 内,支持 Windows/macOS/Linux 的项目目标范围。
10
+ - 命令 handler 可单元测试;真实进程测试覆盖 argv、cwd、env、stdio、exit code 和信号。
11
+ - 发布时验证 `bin`、shebang、权限、exports、产物与最低 Node 版本。
@@ -0,0 +1,11 @@
1
+ # TypeScript / JavaScript 发布库与 SDK
2
+
3
+ - public surface 只通过 package exports 和文档入口;内部路径不承诺兼容。
4
+ - 明确支持的 runtime、module format、TypeScript/Node/browser 版本和平台。
5
+ - 类型声明与运行时导出一一对应;使用消费方 fixture 测试解析和 tree-shaking/side effects。
6
+ - package `sideEffects` 声明必须真实;顶层初始化不访问宿主全局或启动后台任务。
7
+ - 依赖分类(dependencies/peer/dev/optional)反映运行时和消费者所有权。
8
+ - 错误类型、取消、重试和 telemetry 默认为可控制;SDK 不静默记录敏感数据。
9
+ - 破坏性 API、类型收窄、序列化与默认行为变化纳入版本和迁移说明。
10
+ - ESM/CJS/条件 exports 仅发布实际验证的组合,避免同一包产生多份状态。
11
+ - README 示例进入编译/运行测试,避免文档漂移。
@@ -0,0 +1,71 @@
1
+ # React 规范适配器
2
+
3
+ 仅对 Project Inventory 明确识别为 React 的 scope 生成。React 与 Vue 共存时必须分别限定模块或路径。
4
+
5
+ ## 版本与应用模型
6
+
7
+ 先识别 React 大版本、客户端/SSR/SSG、framework router、Server/Client Component 边界、编译器和状态工具。不要把特定 Next/Remix/React Router 约定泛化为所有 React 项目。
8
+
9
+ ## 组件与纯净性
10
+
11
+ - 新代码优先函数组件;存量 class component 以风险和迁移计划处理。
12
+ - render 与 Hook 保持纯净:相同输入得到相同 JSX,不在 render 中发起副作用或修改外部状态。
13
+ - props 为明确只读合同;组件不修改传入对象。
14
+ - 展示、领域状态、I/O 编排和平台 adapter 在复杂度出现时分离,而不是按任意行数拆分。
15
+ - component、Hook、context 和 provider 的命名遵循 scope 内一致实践。
16
+
17
+ ## Hook
18
+
19
+ - Hook 只在 React 函数组件或自定义 Hook 顶层调用,不放在条件、循环、普通回调或事件分支。
20
+ - 自定义 Hook 使用 `use` 前缀,公开输入、返回值、订阅、清理和并发语义。
21
+ - 不用 Hook 隐藏不可追踪的全局写入。
22
+ - 遵循项目当前启用的 React Hooks ESLint 规则;例外必须局部且有证明。
23
+
24
+ ## 状态与派生数据
25
+
26
+ - 状态保持最小,能由 props/state 计算的值在 render 中计算或在测量后 memoize。
27
+ - 状态放在拥有它的最小共同祖先;跨树共享才考虑 context 或项目既有 store。
28
+ - reducer 用于多事件、多字段状态机,而不是简单值的仪式化包装。
29
+ - context value 稳定性在有实际重渲染问题时优化;不要无条件包裹所有值。
30
+
31
+ ## Effect
32
+
33
+ - Effect 用于同步外部系统:网络、订阅、DOM/平台 API、计时器、非 React widget。
34
+ - 不用 Effect 计算派生数据、处理可直接在事件中完成的逻辑或同步两个可合并状态。
35
+ - 依赖数组反映实际读取;不通过禁用 lint 隐藏陈旧闭包。
36
+ - cleanup 必须撤销订阅、监听、timer、请求或外部资源;开发严格模式下 setup/cleanup 可重复执行仍正确。
37
+ - 异步结果处理取消、过期响应和 unmount 后写入。
38
+
39
+ ## 性能
40
+
41
+ - 先使用稳定边界、局部状态和纯组件;只在 profiler/指标证明后采用 memoization。
42
+ - `memo`、`useMemo`、`useCallback` 是性能工具,不是语义保证。
43
+ - 大列表采用分页/虚拟化;bundle 和懒加载遵循当前框架能力。
44
+
45
+ ## 可访问性与安全
46
+
47
+ - 优先语义 HTML;交互元素具备键盘、焦点和可访问名称。
48
+ - `dangerouslySetInnerHTML` 只接收经过可信边界处理的内容。
49
+ - 客户端隐藏不能替代服务端授权。
50
+
51
+ ## 测试
52
+
53
+ - 使用项目既有工具,测试用户可观察行为、DOM 和可访问交互。
54
+ - 不以组件实例、私有 Hook 实现或脆弱 snapshot 为主要断言。
55
+ - Effect、订阅和并发行为覆盖 cleanup、失败和竞争路径。
56
+ - SSR/hydration、router 和 browser API 行为按实际运行环境测试。
57
+
58
+ ## 访谈触发
59
+
60
+ - class → function 的迁移 scope;
61
+ - Client/Server Component 和数据获取边界;
62
+ - context 与既有 store 的职责;
63
+ - Effect 债务采用立即修复或 Ratchet;
64
+ - React compiler/memo 策略仅在项目实际采用时。
65
+
66
+ ## 官方依据
67
+
68
+ - [React: Components and Hooks must be pure](https://react.dev/reference/rules/components-and-hooks-must-be-pure)
69
+ - [React: Rules of Hooks](https://react.dev/reference/rules/rules-of-hooks)
70
+ - [React: Synchronizing with Effects](https://react.dev/learn/synchronizing-with-effects)
71
+ - [React: You Might Not Need an Effect](https://react.dev/learn/you-might-not-need-an-effect)
@@ -0,0 +1,131 @@
1
+ # Vue 规范适配器
2
+
3
+ 仅对 Project Inventory 明确识别为 Vue 的 scope 生成。Vue 2、Vue 3、Options API、Composition API、Nuxt 和纯 Vite Vue 的可用 API 不同,必须先识别版本和项目主导实践。
4
+
5
+ Vue 官方 Style Guide 当前标注为需要更新,示例主要基于 Options API,未完整覆盖现代 Composition API 与 `<script setup>`。因此规则来源优先级为:当前 Vue Guide、TypeScript Guide、Composables/Testing/Security/Performance Guide、`eslint-plugin-vue` 官方配置,再把 Style Guide Priority A/B 作为版本适用的默认建议,而不是唯一权威。
6
+
7
+ ## 版本与模式
8
+
9
+ 记录:
10
+
11
+ - Vue 2 或 Vue 3 及精确大/小版本范围;
12
+ - `vue-template-compiler`、`@vue/compiler-sfc`、compat build;
13
+ - Options API、Composition API 或混合迁移;
14
+ - `<script setup>`、普通 `setup()`、JSX/TSX;
15
+ - Vite、Vue CLI、Nuxt 等构建模型;
16
+ - Pinia、Vuex 或其他状态方案;
17
+ - SSR/SSG、hydration 和客户端专属边界。
18
+
19
+ 默认策略:Vue 3 新模块或仓库已占主导时 SHOULD 使用 Composition API 与 `<script setup lang="ts">`;Vue 2 或稳定 Options API 存量模块保持局部一致,通过 Ratchet 迁移,绝不生成不可用 API。
20
+
21
+ ## SFC 与组件边界
22
+
23
+ - 一个 SFC 表达一个主要组件;小型局部辅助渲染逻辑可按项目实践保留。
24
+ - 文件、组件 `name`、模板标签和自动导入约定保持可追踪;无冲突的新项目默认多词业务组件名,根组件和框架特殊文件可例外。
25
+ - props、emits、slots 和 model 是公开合同;父传子、子发事件,组件不得修改 prop 或其不拥有的对象。
26
+ - UI、领域规则、请求编排和平台副作用在复杂度出现时分离;不按机械行数拆成无意义 composable。
27
+
28
+ ## TypeScript 组件合同
29
+
30
+ Vue 3 `<script setup>` 按项目版本使用类型化宏:
31
+
32
+ - `defineProps`:运行时声明和纯类型声明二选一,不混用;外部输入仍需要运行时验证时显式提供 validator/schema。
33
+ - props 默认值使用当前版本支持的 reactive destructure 或 `withDefaults`;生成规则必须匹配项目 Vue/compiler 版本。
34
+ - `defineEmits`:事件名和 payload 精确类型化;不以无约束字符串事件替代合同。
35
+ - `defineSlots`、template refs、`provide/inject` 与 `InjectionKey` 在项目版本支持时建立类型安全。
36
+ - `defineModel` 仅在项目 Vue 版本和约定支持时使用;否则使用明确 `modelValue` / `update:modelValue` 合同。
37
+ - 不用 `as any` 或非空断言隐藏 mount 前 template ref 为空、可选注入或异步数据状态。
38
+
39
+ Options API 模块使用 `defineComponent`、`PropType` 和项目当前推断方式;不为了使用新语法重写稳定组件。
40
+
41
+ ## 响应式状态
42
+
43
+ - `ref` 用于独立值和需要可替换引用的状态;`reactive` 用于稳定对象图;遵循当前 Vue 版本的解构语义。
44
+ - 派生数据使用纯 `computed`,不复制到可变 ref,也不在 computed getter 中写状态或执行 I/O。
45
+ - 模板和脚本中的 ref 解包差异必须被理解;不得依赖偶然自动解包。
46
+ - 外部不可深代理对象、超大不可变结构或第三方实例按需要使用 `shallowRef`、`markRaw` 等,并记录边界理由。
47
+ - state 的所有者明确;局部状态不因“可能复用”提前提升到全局 store。
48
+
49
+ ## watch、watchEffect 与生命周期
50
+
51
+ - `watch` 用于明确源、需要前后值或精确触发控制的副作用;`watchEffect` 用于依赖可由同步执行自然收集的副作用。
52
+ - 可由 `computed` 或事件直接完成的逻辑不使用 watcher。
53
+ - watcher、timer、DOM listener、subscription、observer 和请求必须清理;使用当前版本支持的 cleanup API,并覆盖过期异步结果。
54
+ - 明确 flush timing;依赖更新后 DOM 的逻辑使用适合的 post-flush 或 `nextTick`,不靠任意 timeout。
55
+ - 只能在组件实例存在时运行的副作用放在正确生命周期;SSR 中不在服务端执行浏览器专属 API。
56
+
57
+ ## Composable
58
+
59
+ - 复用有状态逻辑的函数使用 `useXxx`;工厂/纯函数不滥用 `use` 前缀。
60
+ - 需要生命周期注入的 composable 在 `setup()` / `<script setup>` 同步调用,并文档化调用上下文。
61
+ - 输入可变化时接受 ref/getter/MaybeRefOrGetter,并在 reactive effect 中规范化;不要在调用时一次性读取后失去响应性。
62
+ - 默认返回包含 refs 的普通对象,以便解构后保持响应性;返回 reactive object 时明确解构限制。
63
+ - composable 拥有的资源在 scope dispose/unmount 时释放;全局单例资源需有独立生命周期与测试重置机制。
64
+ - composable 不隐藏跨模块写入、路由跳转或 toast 等副作用,除非名称和合同明确。
65
+
66
+ ## 组件通信与状态管理
67
+
68
+ - props down / events up;跨层共享服务使用明确 provide/inject contract,避免字符串 key 冲突。
69
+ - slots/scoped slots 的 slot props 是公开合同;默认内容和必需 slot 行为可测试。
70
+ - Pinia/Vuex 只在项目已采用或用户确认时生成专属规则。Pinia store:state 可序列化边界明确,getter 保持派生,action 表达业务操作,SSR 时隔离请求状态。
71
+ - 不把所有请求缓存、表单草稿和瞬时 UI 状态集中进全局 store。
72
+
73
+ ## Template、可访问性与安全
74
+
75
+ - `v-for` 使用稳定业务 key,不用会变化的 index 代表可重排实体。
76
+ - 避免在同一元素组合 `v-if` 与 `v-for`;先过滤/计算集合或提升条件。
77
+ - `v-if` 用于真实挂载切换,`v-show` 用于高频可见性切换;按成本选择。
78
+ - 事件 modifier、attribute fallthrough 和多根组件行为按组件 contract 使用,不依赖隐式透传。
79
+ - 优先语义 HTML、label、键盘交互、焦点管理和可访问名称。
80
+ - `v-html` 只接受经过可信边界消毒或完全受信任的内容;用户模板、URL、style 和脚本均视为安全边界。
81
+
82
+ ## SSR、hydration 与性能
83
+
84
+ - 服务端 render 必须确定;随机数、时间、浏览器状态和全局单例按请求隔离或在 hydration 后处理。
85
+ - DOM、window、storage、observer 和 browser-only 库放在客户端生命周期/guard 中。
86
+ - 先稳定 props、缩小响应式依赖和组件边界;测量后再采用 shallow API、`v-memo`、虚拟列表或手工缓存。
87
+ - 大组件/路由按现有 bundler 使用异步组件和 code splitting;不因拆包破坏错误与加载状态。
88
+
89
+ ## 测试
90
+
91
+ - 使用项目既有 Vue Test Utils、Vitest/Jest、Testing Library、Playwright/Cypress 等工具。
92
+ - 组件测试断言公开 DOM、emits、slot、可访问交互和用户行为;不依赖 `wrapper.vm` 私有实现作为主要合同。
93
+ - snapshot 只能补充稳定结构,不替代行为断言。
94
+ - composable 的纯逻辑可直接测试;依赖生命周期/provide/inject 的 composable 通过最小宿主组件测试并验证 cleanup。
95
+ - 与 CSS layout、原生浏览器事件、focus、teleport、hydration 或平台 API 强相关的行为使用 browser component/E2E。
96
+ - store 测试隔离 active Pinia/全局状态,覆盖 action 失败、并发和 SSR 污染风险。
97
+
98
+ ## 工具链
99
+
100
+ - ESLint 使用项目版本匹配的 `eslint-plugin-vue` flat/legacy config,至少覆盖对应 Vue 版本的 essential correctness rules;recommended/style 层按项目选择。
101
+ - TypeScript SFC 使用项目当前认可的 parser、language tools 和 `vue-tsc`/framework typecheck;编辑器通过不等于 CI typecheck。
102
+ - formatter 与 template/style block 一致;避免 ESLint 与 formatter 争夺机械格式。
103
+ - 自动导入、宏和类型生成文件必须由 CI 验证 freshness,并从手写规则中排除。
104
+
105
+ ## 访谈触发
106
+
107
+ 仅在证据冲突时询问:
108
+
109
+ - Vue 2/compat → Vue 3 的目标与期限;
110
+ - Options API、Composition API、`<script setup>` 的新增代码策略;
111
+ - Pinia/Vuex 迁移与局部/全局状态边界;
112
+ - `defineModel`、reactive props destructure 等版本相关能力;
113
+ - unit/component/browser/E2E 的责任边界;
114
+ - Nuxt server/client 与 SSR 状态隔离。
115
+
116
+ ## 输出验收
117
+
118
+ Vue scope 的生成规范必须同时覆盖:组件合同、响应式、composable、watch/cleanup、模板安全与可访问性、SSR(如适用)、测试和实际工具链。不得只生成文件命名和 `<script setup>` 偏好。
119
+
120
+ ## 官方依据
121
+
122
+ - [Vue TypeScript with Composition API](https://vuejs.org/guide/typescript/composition-api.html)
123
+ - [Vue Composables](https://vuejs.org/guide/reusability/composables.html)
124
+ - [Vue Watchers](https://vuejs.org/guide/essentials/watchers.html)
125
+ - [Vue Testing](https://vuejs.org/guide/scaling-up/testing.html)
126
+ - [Vue Security](https://vuejs.org/guide/best-practices/security.html)
127
+ - [Vue Performance](https://vuejs.org/guide/best-practices/performance.html)
128
+ - [Vue Accessibility](https://vuejs.org/guide/best-practices/accessibility.html)
129
+ - [Vue Style Guide status](https://vuejs.org/style-guide/)
130
+ - [eslint-plugin-vue user guide](https://eslint.vuejs.org/user-guide/)
131
+ - [Pinia core concepts](https://pinia.vuejs.org/core-concepts/)
@@ -0,0 +1,15 @@
1
+ # Browser 运行时
2
+
3
+ 仅用于明确运行在浏览器、Web Worker 或 Service Worker 的 TypeScript/JavaScript scope。
4
+
5
+ - DOM 查询和操作局限在 UI/platform adapter;框架模块遵循框架生命周期。
6
+ - 网络请求定义取消、超时、重试、认证刷新、离线和过期响应语义。
7
+ - storage、cookie、URL、postMessage 和第三方脚本属于不可信边界。
8
+ - 不在 bundle 中暴露 secret;构建时变量凡进入客户端均视为公开。
9
+ - 事件监听、observer、object URL、worker 和 timer 有清理路径。
10
+ - 用户输入、富文本和 URL 按上下文验证/转义;CSP、Trusted Types 等只在项目采用时生成。
11
+ - 性能以用户指标和 bundle/runtime 测量为依据;大列表虚拟化、图片和 code splitting 按证据采用。
12
+ - 可访问性、键盘和焦点纳入组件与 E2E 门禁。
13
+ - Worker 与 window 使用独立 tsconfig/lib,消息通过类型化且运行时验证的协议。
14
+
15
+ 官方依据:[MDN Web APIs](https://developer.mozilla.org/docs/Web/API)、[OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)。
@@ -0,0 +1,25 @@
1
+ # Electron 运行时
2
+
3
+ 仅在依赖、入口和构建配置明确识别 Electron 时使用。
4
+
5
+ ## 进程边界
6
+
7
+ - main、preload、renderer 使用独立入口和类型/构建环境;renderer 不继承 Node 权限。
8
+ - 默认保持 `contextIsolation`,关闭不必要的 `nodeIntegration`;安全配置以项目 Electron 版本官方建议为准。
9
+ - preload 只暴露最小、具名、类型化 API;不直接暴露 `ipcRenderer`、fs 或任意执行能力。
10
+ - IPC channel 是 public security contract:验证 sender、channel、payload、权限和响应;不信任 renderer 输入。
11
+ - BrowserWindow、tray、session、shortcut、listener 和 child process 有唯一所有者和销毁路径。
12
+
13
+ ## 数据与更新
14
+
15
+ - 文件路径、协议 handler、deep link、下载和外部 URL 均验证;外部导航使用 allowlist。
16
+ - 自动更新、签名、安装权限和回滚按目标平台与发布系统生成,不编造通用命令。
17
+ - main/renderer 共享 schema 或 generated types 时验证生成 freshness 和运行时数据。
18
+
19
+ ## 测试
20
+
21
+ - 纯 IPC handler 和 domain logic 单元测试;
22
+ - preload contract 与 main/renderer 集成测试;
23
+ - 权限、窗口生命周期、安装包和平台差异使用实际 Electron/目标 OS 测试。
24
+
25
+ 官方依据:[Electron Security](https://www.electronjs.org/docs/latest/tutorial/security)、[Electron Context Isolation](https://www.electronjs.org/docs/latest/tutorial/context-isolation)。
@@ -0,0 +1,13 @@
1
+ # Node.js 运行时
2
+
3
+ - Node 版本来自 `engines`、版本文件、CI 或容器;可用 API 与 module 行为必须匹配该版本。
4
+ - 配置在入口读取、验证、冻结并注入;库代码不随处访问 `process.env`。
5
+ - 文件、socket、stream、child process、worker 和 timer 有错误、取消、关闭和进程退出策略。
6
+ - stream 使用 backpressure,pipeline/finished 等结构化机制按项目版本选择。
7
+ - process-level `uncaughtException` / `unhandledRejection` 只用于记录和受控终止,不假装安全恢复未知状态。
8
+ - signal handling、graceful shutdown 和 exit code 属于应用入口合同。
9
+ - 路径以明确根解析,拒绝遍历和 symlink 越界;跨平台处理分隔符、shell 和可执行文件。
10
+ - 服务不得执行未验证 shell 字符串;优先参数化 spawn API。
11
+ - package ESM/CJS、exports 和运行时加载行为通过实际 Node 测试。
12
+
13
+ 官方依据:[Node.js API documentation](https://nodejs.org/api/)、[Node.js package modules](https://nodejs.org/api/packages.html)。