@namewta/speculo 0.7.3 → 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.
- package/README.md +2 -2
- package/dist/src/migrations.js +190 -39
- package/dist/src/migrations.js.map +1 -1
- package/package.json +1 -1
- package/template/canonical/README.md +208 -63
- package/template/canonical/canonical-person-steelman-deliberation.md +518 -0
- package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +51 -15
- package/template/canonical/canonical-specdev-goal-plan.md +183 -116
- package/template/canonical/canonical-specdev-grill-with-docs.md +51 -15
- package/template/canonical/canonical-specdev-spec.md +61 -21
- package/template/canonical/canonical-specdev-tickets.md +83 -43
- package/template/canonical/canonical-specdev-wayfinder.md +51 -15
- package/template/skills/engineering-standards-builder/README.md +43 -0
- package/template/skills/engineering-standards-builder/SKILL.md +233 -0
- package/template/skills/engineering-standards-builder/examples/README.md +15 -0
- package/template/skills/engineering-standards-builder/examples/fallback/kotlin-gradle/build.gradle.kts +5 -0
- package/template/skills/engineering-standards-builder/examples/fallback/kotlin-gradle/expected.json +12 -0
- package/template/skills/engineering-standards-builder/examples/fallback/kotlin-gradle/src/main/kotlin/example/App.kt +2 -0
- package/template/skills/engineering-standards-builder/examples/go/service/.golangci.yml +3 -0
- package/template/skills/engineering-standards-builder/examples/go/service/cmd/api/main.go +3 -0
- package/template/skills/engineering-standards-builder/examples/go/service/expected.json +23 -0
- package/template/skills/engineering-standards-builder/examples/go/service/go.mod +3 -0
- package/template/skills/engineering-standards-builder/examples/go/service/internal/service/service.go +2 -0
- package/template/skills/engineering-standards-builder/examples/go/service/internal/service/service_test.go +3 -0
- package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/expected.json +22 -0
- package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/pom.xml +12 -0
- package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/src/main/java/dev/speculo/orders/OrdersApplication.java +7 -0
- package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/src/test/java/dev/speculo/orders/OrdersApplicationTest.java +3 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/.github/workflows/ci.yml +11 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/apps/web/package.json +11 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/apps/web/src/App.vue +2 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/apps/web/tsconfig.json +8 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/expected.json +22 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/package.json +11 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/pnpm-workspace.yaml +2 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/orders/pom.xml +12 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/orders/src/main/java/dev/speculo/orders/OrdersApplication.java +7 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/worker/go.mod +3 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/worker/main.go +2 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/Cargo.toml +7 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/cli/Cargo.toml +8 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/cli/src/main.rs +1 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/core/Cargo.toml +5 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/core/src/lib.rs +3 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/expected.json +14 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/rust-toolchain.toml +3 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/expected.json +21 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/package.json +20 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/src/App.test.tsx +2 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/src/App.tsx +1 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/src/main.tsx +3 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/tsconfig.json +10 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/expected.json +22 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/package.json +21 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/src/App.test.ts +2 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/src/App.vue +7 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/src/main.ts +4 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/tsconfig.json +11 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/vite.config.ts +2 -0
- package/template/skills/engineering-standards-builder/manifest.txt +112 -0
- package/template/skills/engineering-standards-builder/references/go/00-detection-and-scope.md +37 -0
- package/template/skills/engineering-standards-builder/references/go/01-language-and-idioms.md +34 -0
- package/template/skills/engineering-standards-builder/references/go/02-modules-packages-and-layout.md +34 -0
- package/template/skills/engineering-standards-builder/references/go/03-errors-context-and-concurrency.md +38 -0
- package/template/skills/engineering-standards-builder/references/go/04-testing-tooling-quality-gates.md +46 -0
- package/template/skills/engineering-standards-builder/references/go/README.md +9 -0
- package/template/skills/engineering-standards-builder/references/java/00-detection-and-scope.md +40 -0
- package/template/skills/engineering-standards-builder/references/java/01-language-packages-and-api.md +35 -0
- package/template/skills/engineering-standards-builder/references/java/02-build-modules-and-dependencies.md +39 -0
- package/template/skills/engineering-standards-builder/references/java/03-errors-nullability-resources-concurrency.md +36 -0
- package/template/skills/engineering-standards-builder/references/java/04-testing-tooling-quality-gates.md +36 -0
- package/template/skills/engineering-standards-builder/references/java/README.md +10 -0
- package/template/skills/engineering-standards-builder/references/java/frameworks/spring-boot.md +74 -0
- package/template/skills/engineering-standards-builder/references/rules/00-governance-and-precedence.md +52 -0
- package/template/skills/engineering-standards-builder/references/rules/01-project-discovery.md +79 -0
- package/template/skills/engineering-standards-builder/references/rules/02-evidence-topology-and-scope.md +87 -0
- package/template/skills/engineering-standards-builder/references/rules/03-interview-and-decisions.md +77 -0
- package/template/skills/engineering-standards-builder/references/rules/04-architecture-and-dependency-boundaries.md +58 -0
- package/template/skills/engineering-standards-builder/references/rules/05-files-directories-and-naming.md +53 -0
- package/template/skills/engineering-standards-builder/references/rules/06-apis-errors-resources-and-concurrency.md +53 -0
- package/template/skills/engineering-standards-builder/references/rules/07-documentation-and-comments.md +46 -0
- package/template/skills/engineering-standards-builder/references/rules/08-testing-strategy.md +45 -0
- package/template/skills/engineering-standards-builder/references/rules/09-security-configuration-and-data.md +44 -0
- package/template/skills/engineering-standards-builder/references/rules/10-performance-observability-and-i18n.md +36 -0
- package/template/skills/engineering-standards-builder/references/rules/11-tooling-quality-gates-and-ci.md +69 -0
- package/template/skills/engineering-standards-builder/references/rules/12-git-review-and-delivery.md +46 -0
- package/template/skills/engineering-standards-builder/references/rules/13-adoption-exceptions-and-ratchets.md +60 -0
- package/template/skills/engineering-standards-builder/references/rules/14-generation-contract.md +105 -0
- package/template/skills/engineering-standards-builder/references/rules/15-validation-contract.md +65 -0
- package/template/skills/engineering-standards-builder/references/rules/16-language-adapter-contract.md +55 -0
- package/template/skills/engineering-standards-builder/references/rules/README.md +23 -0
- package/template/skills/engineering-standards-builder/references/rust/00-detection-and-scope.md +38 -0
- package/template/skills/engineering-standards-builder/references/rust/01-language-api-and-safety.md +35 -0
- package/template/skills/engineering-standards-builder/references/rust/02-crates-workspaces-and-layout.md +36 -0
- package/template/skills/engineering-standards-builder/references/rust/03-errors-ownership-and-concurrency.md +37 -0
- package/template/skills/engineering-standards-builder/references/rust/04-testing-tooling-quality-gates.md +44 -0
- package/template/skills/engineering-standards-builder/references/rust/README.md +9 -0
- package/template/skills/engineering-standards-builder/references/typescript/00-detection-and-scope.md +58 -0
- package/template/skills/engineering-standards-builder/references/typescript/01-language-and-type-system.md +49 -0
- package/template/skills/engineering-standards-builder/references/typescript/02-modules-packages-and-runtime-boundaries.md +49 -0
- package/template/skills/engineering-standards-builder/references/typescript/03-functions-async-errors-resources.md +42 -0
- package/template/skills/engineering-standards-builder/references/typescript/04-testing-tooling-quality-gates.md +51 -0
- package/template/skills/engineering-standards-builder/references/typescript/README.md +27 -0
- package/template/skills/engineering-standards-builder/references/typescript/app-types/cli.md +11 -0
- package/template/skills/engineering-standards-builder/references/typescript/app-types/library.md +11 -0
- package/template/skills/engineering-standards-builder/references/typescript/frameworks/react.md +71 -0
- package/template/skills/engineering-standards-builder/references/typescript/frameworks/vue.md +131 -0
- package/template/skills/engineering-standards-builder/references/typescript/runtimes/browser.md +15 -0
- package/template/skills/engineering-standards-builder/references/typescript/runtimes/electron.md +25 -0
- package/template/skills/engineering-standards-builder/references/typescript/runtimes/node.md +13 -0
- package/template/skills/engineering-standards-builder/scripts/discover-project.mjs +957 -0
- package/template/skills/engineering-standards-builder/scripts/self-test.mjs +203 -0
- package/template/skills/engineering-standards-builder/scripts/sync-manifest.mjs +105 -0
- package/template/skills/engineering-standards-builder/scripts/validate-builder.mjs +255 -0
- package/template/skills/engineering-standards-builder/scripts/validate-generated-skill.mjs +286 -0
- package/template/skills/engineering-standards-builder/templates/README.md +18 -0
- package/template/skills/engineering-standards-builder/templates/compatibility/agents-typescript--standards.md +6 -0
- package/template/skills/engineering-standards-builder/templates/compatibility/agents-typescript-standards.md +6 -0
- package/template/skills/engineering-standards-builder/templates/compatibility/claude-engineering-standards.md +6 -0
- package/template/skills/engineering-standards-builder/templates/compatibility/claude-typescript-standards.md +6 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/SKILL.md.template +26 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/references/project/00-project-profile.md.template +26 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/references/project/01-module-map.md.template +27 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/references/project/02-decisions-and-exceptions.md.template +31 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/references/project/review-checklist.md.template +14 -0
- package/template/skills/migrate-runtime-state/references/migration-contract.md +3 -3
- package/template/skills/migrate-runtime-state/scripts/migrate-runtime-state.mjs +94 -12
- package/template/skills/source-code-zip-skill/SKILL.md +343 -0
- package/template/skills/source-code-zip-skill/scripts/zip_source_code.py +638 -0
- package/template/workflows/person/INDEX.md +1 -0
- package/template/workflows/person/S-steelman-deliberation/S-steelman-deliberation.md +218 -0
- package/template/workflows/person/S-steelman-deliberation/_templates/decision-template.md +51 -0
- package/template/workflows/person/S-steelman-deliberation/_templates/steelman-dossier-template.md +96 -0
- package/template/workflows/person/S-steelman-deliberation/deliberate.md +127 -0
- package/template/workflows/person/S-steelman-deliberation/evidence-gate.md +37 -0
- package/template/workflows/person/S-steelman-deliberation/judge.md +69 -0
- package/template/workflows/person/S-steelman-deliberation/tools/validate-steelman-change.mjs +697 -0
- package/template/workflows/specdev/I-implement/I-implement.md +27 -26
- package/template/workflows/specdev/I-implement/evidence-template.md +18 -12
- package/template/workflows/specdev/I-implement/execution-preflight.md +11 -9
- package/template/workflows/specdev/I-init-setup/I-init-setup.md +2 -2
- package/template/workflows/specdev/I-init-setup/change-status-template.json +3 -3
- package/template/workflows/specdev/I-init-setup/config-template.json +5 -2
- package/template/workflows/specdev/INDEX.md +6 -6
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +16 -16
- package/template/workflows/specdev/P-goal-plan/completion-control.md +8 -8
- package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +20 -14
- package/template/workflows/specdev/P-goal-plan/lead-orchestration.md +5 -5
- package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +13 -13
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +27 -15
- package/template/workflows/specdev/P-prototype/ui-prototype.md +1 -1
- package/template/workflows/specdev/T-tickets/T-tickets.md +4 -4
- package/template/workflows/specdev/T-tickets/ticket-readiness.md +3 -3
- package/template/workflows/specdev/T-tickets/ticket-template.md +6 -6
- package/template/workflows/specdev/T-tickets/tickets-map-template.md +2 -2
- package/template/workflows/specdev/common/README.md +1 -1
- package/template/workflows/specdev/common/rules/change-completion.md +2 -2
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +10 -6
- package/template/workflows/specdev/common/rules/path-ownership.md +4 -4
- package/template/workflows/specdev/common/schemas/change-status.schema.json +31 -4
- package/template/workflows/specdev/common/schemas/config.schema.json +12 -6
- package/template/workflows/specdev/common/schemas/goal-plan.schema.json +15 -6
- package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +3 -3
- package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +1 -1
- package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +4 -4
- package/template/workflows/specdev/common/skills/subagent-delivery/references/external-web-subagent.md +1 -1
- package/template/workflows/specdev/common/skills/subagent-delivery/references/native-subagent.md +4 -4
- package/template/workflows/specdev/common/tools/README.md +2 -1
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +261 -66
- package/template/skills/typescript-standards-builder/README.md +0 -53
- package/template/skills/typescript-standards-builder/SKILL.md +0 -245
- package/template/skills/typescript-standards-builder/examples/sample-generated-tree.md +0 -30
- package/template/skills/typescript-standards-builder/examples/sample-interview-decisions.md +0 -26
- package/template/skills/typescript-standards-builder/manifest.txt +0 -29
- package/template/skills/typescript-standards-builder/references/00-governance-and-fixed-defaults.md +0 -77
- package/template/skills/typescript-standards-builder/references/01-project-discovery.md +0 -100
- package/template/skills/typescript-standards-builder/references/02-interview-workflow.md +0 -129
- package/template/skills/typescript-standards-builder/references/03-project-architecture-and-directory-layout.md +0 -84
- package/template/skills/typescript-standards-builder/references/04-file-directory-and-symbol-naming.md +0 -92
- package/template/skills/typescript-standards-builder/references/05-modules-imports-exports-and-dependencies.md +0 -63
- package/template/skills/typescript-standards-builder/references/06-typescript-type-system.md +0 -64
- package/template/skills/typescript-standards-builder/references/07-functions-async-errors-and-resources.md +0 -42
- package/template/skills/typescript-standards-builder/references/08-comments-jsdoc-and-documentation.md +0 -51
- package/template/skills/typescript-standards-builder/references/09-testing-strategy.md +0 -58
- package/template/skills/typescript-standards-builder/references/10-react-and-frontend.md +0 -39
- package/template/skills/typescript-standards-builder/references/11-node-cli-and-cross-platform.md +0 -31
- package/template/skills/typescript-standards-builder/references/12-formatting-lint-and-complexity.md +0 -58
- package/template/skills/typescript-standards-builder/references/13-configuration-dependencies-and-ci.md +0 -71
- package/template/skills/typescript-standards-builder/references/14-security-performance-and-i18n.md +0 -32
- package/template/skills/typescript-standards-builder/references/15-git-review-and-delivery.md +0 -28
- package/template/skills/typescript-standards-builder/references/16-adoption-exceptions-and-migration.md +0 -61
- package/template/skills/typescript-standards-builder/references/17-generation-contract.md +0 -104
- package/template/skills/typescript-standards-builder/references/README.md +0 -37
- package/template/skills/typescript-standards-builder/templates/agents-compat-skill/SKILL.md +0 -1
- package/template/skills/typescript-standards-builder/templates/claude-skill/SKILL.md +0 -1
- package/template/skills/typescript-standards-builder/templates/project-skill/SKILL.md.template +0 -34
- package/template/skills/typescript-standards-builder/templates/project-skill/references/00-project-profile.md.template +0 -17
- package/template/skills/typescript-standards-builder/templates/project-skill/references/10-review-checklist.md +0 -23
- package/template/skills/typescript-standards-builder/templates/project-skill/references/11-decisions-and-exceptions.md.template +0 -19
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# 工具链、质量门禁与 CI
|
|
2
|
+
|
|
3
|
+
## 稳定职责
|
|
4
|
+
|
|
5
|
+
每个项目模块应通过现有构建系统提供稳定职责,具体命令按生态决定:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
format / format-check
|
|
9
|
+
lint / static-analysis
|
|
10
|
+
compile / typecheck
|
|
11
|
+
unit-test
|
|
12
|
+
integration-test
|
|
13
|
+
build / package
|
|
14
|
+
security / dependency-audit
|
|
15
|
+
check
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
这些是职责分类,不是跨语言命令名。生成规范必须记录各模块构建系统中的真实命令、任务或生命周期。
|
|
19
|
+
|
|
20
|
+
## 门禁来源
|
|
21
|
+
|
|
22
|
+
按可信度:
|
|
23
|
+
|
|
24
|
+
1. CI 实际执行;
|
|
25
|
+
2. package/build 文件定义;
|
|
26
|
+
3. Agent/贡献文档;
|
|
27
|
+
4. 本地约定;
|
|
28
|
+
5. 用户确认的新目标。
|
|
29
|
+
|
|
30
|
+
脚本存在但 CI 不执行时,记录为本地工具而非合并门禁。
|
|
31
|
+
|
|
32
|
+
## 格式与静态检查
|
|
33
|
+
|
|
34
|
+
- 机械风格由 formatter 决定,review 不重复争论;
|
|
35
|
+
- Lint/静态分析聚焦缺陷、API 和边界;
|
|
36
|
+
- 类型感知或全程序检查的性能成本按模块评估;
|
|
37
|
+
- 规则禁用最小化、解释 WHY,并有删除条件;
|
|
38
|
+
- 生成代码采用独立配置或排除,不能与手写代码混淆。
|
|
39
|
+
|
|
40
|
+
## CI 设计
|
|
41
|
+
|
|
42
|
+
- 锁定工具链和依赖解析;
|
|
43
|
+
- 缓存不得影响正确性;
|
|
44
|
+
- 快速、独立检查可并行;
|
|
45
|
+
- 失败输出足以复现;
|
|
46
|
+
- 慢测试和平台矩阵按风险分层;
|
|
47
|
+
- 合并门禁不依赖开发者本地隐式状态;
|
|
48
|
+
- 代码生成结果若需提交,CI 验证 freshness;
|
|
49
|
+
- 任何自动修复在 CI 中默认只检查,不静默改写提交。
|
|
50
|
+
|
|
51
|
+
## 禁止绕过
|
|
52
|
+
|
|
53
|
+
不得为获得绿色状态而:
|
|
54
|
+
|
|
55
|
+
- 删除或长期跳过失败测试;
|
|
56
|
+
- 文件级关闭核心安全、并发、类型或生命周期规则;
|
|
57
|
+
- 全局放宽编译配置解决单个文件;
|
|
58
|
+
- 排除关键模块以提高覆盖率;
|
|
59
|
+
- 忽略生成、打包或发布失败;
|
|
60
|
+
- 将失败命令改成始终退出 0。
|
|
61
|
+
|
|
62
|
+
## 新门禁采用
|
|
63
|
+
|
|
64
|
+
存量仓库先测量基线,再采用:
|
|
65
|
+
|
|
66
|
+
- 仅新代码/变更文件;
|
|
67
|
+
- 错误数量 Ratchet;
|
|
68
|
+
- 模块分阶段;
|
|
69
|
+
- 明确到期的临时 allowlist。
|
package/template/skills/engineering-standards-builder/references/rules/12-git-review-and-delivery.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Git、评审与交付
|
|
2
|
+
|
|
3
|
+
## 变更边界
|
|
4
|
+
|
|
5
|
+
- 提交和 PR 聚焦一个逻辑主题;
|
|
6
|
+
- 不混入无关全仓格式化或自动生成差异;
|
|
7
|
+
- 重构与行为变化在可行时分离;
|
|
8
|
+
- public API、schema、协议和迁移变化显式标记;
|
|
9
|
+
- 生成文件变化可追溯到生成命令和源文件。
|
|
10
|
+
|
|
11
|
+
## PR 说明
|
|
12
|
+
|
|
13
|
+
至少包含:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
背景/问题
|
|
17
|
+
方案与关键权衡
|
|
18
|
+
影响模块与兼容性
|
|
19
|
+
风险与回滚
|
|
20
|
+
验证命令和结果
|
|
21
|
+
截图/录屏(UI 变化)
|
|
22
|
+
迁移/发布注意事项
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
提交格式遵循仓库事实;无约定时可建议 Conventional Commits,但不是跨项目硬规则。
|
|
26
|
+
|
|
27
|
+
## 评审重点
|
|
28
|
+
|
|
29
|
+
按风险检查:
|
|
30
|
+
|
|
31
|
+
- 需求和边界是否正确;
|
|
32
|
+
- 错误、取消、资源和并发路径;
|
|
33
|
+
- 安全、权限、数据与隐私;
|
|
34
|
+
- public API 和向后兼容;
|
|
35
|
+
- 测试层级是否匹配风险;
|
|
36
|
+
- 依赖方向和生成代码;
|
|
37
|
+
- 性能、可观测性、国际化和可访问性;
|
|
38
|
+
- 部署、迁移、回滚与跨平台。
|
|
39
|
+
|
|
40
|
+
## 交付
|
|
41
|
+
|
|
42
|
+
- 发布产物从可复现构建产生;
|
|
43
|
+
- 版本、changelog 和兼容策略遵循项目事实;
|
|
44
|
+
- 数据/配置迁移有顺序与回滚;
|
|
45
|
+
- feature flag 有所有者和清理日期;
|
|
46
|
+
- 发布后监控和失败恢复责任明确。
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 采用、例外与 Ratchet
|
|
2
|
+
|
|
3
|
+
## 当前状态与目标状态分离
|
|
4
|
+
|
|
5
|
+
项目规范同时记录:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
Current: 当前可运行事实
|
|
9
|
+
Target: 新代码或最终目标
|
|
10
|
+
Migration: 从 Current 到 Target 的阶段
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
不得把尚未落地的目标描述成“仓库已经如此”。
|
|
14
|
+
|
|
15
|
+
## Ratchet
|
|
16
|
+
|
|
17
|
+
适用于存量问题:
|
|
18
|
+
|
|
19
|
+
- 新代码必须满足目标规则;
|
|
20
|
+
- 修改旧代码不得扩大违规;
|
|
21
|
+
- 每次触及时降低一项可量化问题;
|
|
22
|
+
- CI 阻止新增违规,而非一次性阻塞全部历史;
|
|
23
|
+
- 基线文件可生成,但必须有所有者和减少趋势;
|
|
24
|
+
- 达标后删除基线和兼容例外。
|
|
25
|
+
|
|
26
|
+
可 Ratchet 的信号包括 lint 错误、复杂度、文件大小、覆盖率、深导入、不安全类型、依赖漏洞和废弃 API。
|
|
27
|
+
|
|
28
|
+
## 例外格式
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
Exception ID:
|
|
32
|
+
Scope:
|
|
33
|
+
Rule:
|
|
34
|
+
Owner:
|
|
35
|
+
Reason:
|
|
36
|
+
Risk:
|
|
37
|
+
Compensation:
|
|
38
|
+
Created:
|
|
39
|
+
Expires or removal condition:
|
|
40
|
+
Verification:
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
永久例外也要解释为什么与通用规则不适用。临时例外没有 owner 或删除条件则无效。
|
|
44
|
+
|
|
45
|
+
## Merge/Refresh
|
|
46
|
+
|
|
47
|
+
已存在 generated Skill 时:
|
|
48
|
+
|
|
49
|
+
1. 读取全部项目 profile、决策和例外;
|
|
50
|
+
2. 将仓库事实重新扫描;
|
|
51
|
+
3. 区分用户维护内容与旧生成模板;
|
|
52
|
+
4. 生成 diff 计划;
|
|
53
|
+
5. 保留仍适用的项目特有规则;
|
|
54
|
+
6. 不用新默认覆盖用户决定;
|
|
55
|
+
7. 删除不再有触发技术栈的规则;
|
|
56
|
+
8. 报告规则来源变化。
|
|
57
|
+
|
|
58
|
+
## 完成条件
|
|
59
|
+
|
|
60
|
+
每个存量偏差都有立即强制、Ratchet、迁移阶段或有效例外之一;没有无限期“以后处理”。
|
package/template/skills/engineering-standards-builder/references/rules/14-generation-contract.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# 项目规范生成合同
|
|
2
|
+
|
|
3
|
+
## Canonical 路径
|
|
4
|
+
|
|
5
|
+
唯一正式规范:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
.agents/skills/engineering-standards/
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
推荐树:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
SKILL.md
|
|
15
|
+
references/
|
|
16
|
+
project/
|
|
17
|
+
00-project-profile.md
|
|
18
|
+
01-module-map.md
|
|
19
|
+
02-decisions-and-exceptions.md
|
|
20
|
+
rules/
|
|
21
|
+
architecture-and-boundaries.md
|
|
22
|
+
files-and-naming.md
|
|
23
|
+
api-errors-resources.md
|
|
24
|
+
testing.md
|
|
25
|
+
security-and-data.md
|
|
26
|
+
quality-gates.md
|
|
27
|
+
review-and-delivery.md
|
|
28
|
+
typescript/...
|
|
29
|
+
java/...
|
|
30
|
+
go/...
|
|
31
|
+
rust/...
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
只创建有内容并被入口路由的目录。未使用语言目录不得存在。
|
|
35
|
+
|
|
36
|
+
## 主入口
|
|
37
|
+
|
|
38
|
+
使用 `templates/project-skill/SKILL.md.template`。主入口必须:
|
|
39
|
+
|
|
40
|
+
- frontmatter `name: engineering-standards`;
|
|
41
|
+
- 描述适用项目与触发分支;
|
|
42
|
+
- 先读取 project profile 和 module map;
|
|
43
|
+
- 根据当前变更 scope 路由到最小 references;
|
|
44
|
+
- 要求实现前检查边界、实现后运行真实门禁;
|
|
45
|
+
- 不复制详细语言规范。
|
|
46
|
+
|
|
47
|
+
## 项目 References
|
|
48
|
+
|
|
49
|
+
使用模板:
|
|
50
|
+
|
|
51
|
+
- `00-project-profile.md.template`
|
|
52
|
+
- `01-module-map.md.template`
|
|
53
|
+
- `02-decisions-and-exceptions.md.template`
|
|
54
|
+
- `review-checklist.md.template`
|
|
55
|
+
|
|
56
|
+
生成规则统一格式:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
### <Rule ID> <Title>
|
|
60
|
+
Scope:
|
|
61
|
+
Level: MUST | SHOULD | MAY
|
|
62
|
+
Source:
|
|
63
|
+
Applies when:
|
|
64
|
+
Rule:
|
|
65
|
+
Rationale:
|
|
66
|
+
Verification:
|
|
67
|
+
Exception:
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
不是每个轻量建议都要展开九个字段,但所有 MUST/SHOULD 必须至少有 Scope、Level、Source、Rule、Verification。
|
|
71
|
+
|
|
72
|
+
## 选择性生成
|
|
73
|
+
|
|
74
|
+
- 通用规则按项目风险裁剪,但安全、错误、资源、测试和门禁不能被无理由删除;
|
|
75
|
+
- TypeScript 项目才生成 `typescript/`;
|
|
76
|
+
- React/Vue 分别按模块生成,混合仓库分别限定 scope;
|
|
77
|
+
- Java/Spring Boot、Go、Rust 同理;
|
|
78
|
+
- 未支持语言生成通用规则与明确 fallback,不伪造专属语法规范。
|
|
79
|
+
|
|
80
|
+
## 命令
|
|
81
|
+
|
|
82
|
+
生成规范只记录:
|
|
83
|
+
|
|
84
|
+
- manifest/build/CI 中已存在的命令;
|
|
85
|
+
- 用户明确确认要新增的命令;
|
|
86
|
+
- 对尚未实现的目标命令标记 `planned`,不能当作当前可执行门禁。
|
|
87
|
+
|
|
88
|
+
## 兼容入口
|
|
89
|
+
|
|
90
|
+
兼容文件只有一句单向路由,使用 `templates/compatibility/`。创建条件:
|
|
91
|
+
|
|
92
|
+
- 仓库已有旧路径;
|
|
93
|
+
- 用户要求;
|
|
94
|
+
- `.claude` 或其他 Agent 目录实际存在并需要入口。
|
|
95
|
+
|
|
96
|
+
不得让 `.agents/skills/engineering-standards` 指回兼容路径。
|
|
97
|
+
|
|
98
|
+
## 写入安全
|
|
99
|
+
|
|
100
|
+
- create:目标已存在时停止或转 merge;
|
|
101
|
+
- merge/refresh:先读取、备份或通过版本控制保护,再原子替换;
|
|
102
|
+
- dry-run:只输出计划和内容摘要,不写文件;
|
|
103
|
+
- 不覆盖目标根外路径;
|
|
104
|
+
- 不修改生成代码或 Vendor;
|
|
105
|
+
- 不删除未在计划中声明的用户文件。
|
package/template/skills/engineering-standards-builder/references/rules/15-validation-contract.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# 验证合同
|
|
2
|
+
|
|
3
|
+
## 静态验证
|
|
4
|
+
|
|
5
|
+
运行:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
node <skill-root>/scripts/validate-generated-skill.mjs \
|
|
9
|
+
--root <project-root> \
|
|
10
|
+
--strict
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
必须确认:
|
|
14
|
+
|
|
15
|
+
- canonical 路径和 `SKILL.md` 存在;
|
|
16
|
+
- frontmatter 合法且 `name: engineering-standards`;
|
|
17
|
+
- 所有相对 Markdown 引用可解析;
|
|
18
|
+
- 没有未替换模板变量;
|
|
19
|
+
- project profile、module map、decisions/exceptions 存在;
|
|
20
|
+
- 每条 MUST/SHOULD 规则有 scope、source 和 verification;
|
|
21
|
+
- 未使用语言/框架目录没有生成;
|
|
22
|
+
- compatibility wrapper 仅一句且单向;
|
|
23
|
+
- 没有 wrapper 循环;
|
|
24
|
+
- canonical 内容只有一份。
|
|
25
|
+
|
|
26
|
+
## 语义验证
|
|
27
|
+
|
|
28
|
+
人工检查:
|
|
29
|
+
|
|
30
|
+
- 模块地图与仓库事实一致;
|
|
31
|
+
- 每个命令来自 manifest/CI/用户决策;
|
|
32
|
+
- React/Vue、Java/Spring、Go、Rust 规则只应用于正确 scope;
|
|
33
|
+
- current/target/migration 没有混写;
|
|
34
|
+
- 用户决定和仍有效例外被保留;
|
|
35
|
+
- 没有将 Builder 默认伪装为仓库事实;
|
|
36
|
+
- 不存在通用规则中的语言专属目录硬编码。
|
|
37
|
+
|
|
38
|
+
## 项目门禁
|
|
39
|
+
|
|
40
|
+
只运行已授权且项目真实存在的命令。记录:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
command
|
|
44
|
+
working directory
|
|
45
|
+
exit code
|
|
46
|
+
result
|
|
47
|
+
unverified impact
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
失败时保留原始失败,不通过改配置、删测试或扩大排除获取通过。
|
|
51
|
+
|
|
52
|
+
## 幂等性
|
|
53
|
+
|
|
54
|
+
对 generated Skill 重新执行同一输入时应产生零无意义 diff。若时间戳会变化,应从生成内容中删除时间戳或使用稳定的源版本字段。
|
|
55
|
+
|
|
56
|
+
## 报告
|
|
57
|
+
|
|
58
|
+
结果分为:
|
|
59
|
+
|
|
60
|
+
- passed;
|
|
61
|
+
- failed;
|
|
62
|
+
- not-run;
|
|
63
|
+
- not-applicable。
|
|
64
|
+
|
|
65
|
+
“未运行”不能报告为通过。
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# 语言适配器与未内置语言 Fallback
|
|
2
|
+
|
|
3
|
+
## 适配器组成
|
|
4
|
+
|
|
5
|
+
新增语言或框架支持必须同时提供:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
references/<language>/00-detection-and-scope.md
|
|
9
|
+
references/<language>/... language rules
|
|
10
|
+
examples/<language>/<fixture>/
|
|
11
|
+
discover-project.mjs detection signals
|
|
12
|
+
self-test.mjs assertions
|
|
13
|
+
SKILL.md routing pointer
|
|
14
|
+
manifest entry
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
框架、运行时和应用类型放在语言目录下的 `frameworks/`、`runtimes/`、`app-types/`,不要污染通用规则。
|
|
18
|
+
|
|
19
|
+
## Detection
|
|
20
|
+
|
|
21
|
+
检测至少交叉使用两类信号:
|
|
22
|
+
|
|
23
|
+
- manifest/build/toolchain;
|
|
24
|
+
- 源文件与入口;
|
|
25
|
+
- CI/build 命令;
|
|
26
|
+
- 框架依赖或注解;
|
|
27
|
+
- 官方目录/模块配置。
|
|
28
|
+
|
|
29
|
+
仅文件扩展名通常为 medium confidence;manifest + 源码入口可为 high confidence。
|
|
30
|
+
|
|
31
|
+
## 语言规则最小覆盖
|
|
32
|
+
|
|
33
|
+
- 模块/package/crate 与 public API;
|
|
34
|
+
- 命名和目录;
|
|
35
|
+
- 类型/错误/资源/并发;
|
|
36
|
+
- 测试布局和工具;
|
|
37
|
+
- formatter、lint/static analysis、build;
|
|
38
|
+
- 版本与兼容策略;
|
|
39
|
+
- 官方依据;
|
|
40
|
+
- 语言专属访谈触发条件。
|
|
41
|
+
|
|
42
|
+
## 未内置语言
|
|
43
|
+
|
|
44
|
+
发现 Python、Kotlin、C#、C/C++ 或其他语言而没有内置适配器时:
|
|
45
|
+
|
|
46
|
+
1. 仍生成通用规则;
|
|
47
|
+
2. 从仓库事实提取真实 formatter/linter/test/build 命令;
|
|
48
|
+
3. 保留现有目录和语言惯例;
|
|
49
|
+
4. 将语言专属规则标记为 `pending-adapter`;
|
|
50
|
+
5. 不把 TypeScript、Java、Go 或 Rust 模式套用;
|
|
51
|
+
6. 必要时按本合同构建新适配器。
|
|
52
|
+
|
|
53
|
+
## 完成条件
|
|
54
|
+
|
|
55
|
+
适配器能被发现、选择、生成和测试;无触发项目不会加载它;其 examples 被 self-test 实际使用。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 通用规则索引
|
|
2
|
+
|
|
3
|
+
`references/rules/` 只描述跨语言成立的目标、证据和治理合同。语言、框架、运行时的具体实现必须进入对应适配器。
|
|
4
|
+
|
|
5
|
+
按运行阶段读取:
|
|
6
|
+
|
|
7
|
+
- [治理、级别与冲突优先级](00-governance-and-precedence.md)
|
|
8
|
+
- [项目发现合同](01-project-discovery.md)
|
|
9
|
+
- [证据、拓扑与 Scope](02-evidence-topology-and-scope.md)
|
|
10
|
+
- [自适应访谈与决策](03-interview-and-decisions.md)
|
|
11
|
+
- [架构与依赖边界](04-architecture-and-dependency-boundaries.md)
|
|
12
|
+
- [文件、目录与命名](05-files-directories-and-naming.md)
|
|
13
|
+
- [API、错误、资源与并发](06-apis-errors-resources-and-concurrency.md)
|
|
14
|
+
- [文档与注释](07-documentation-and-comments.md)
|
|
15
|
+
- [测试策略](08-testing-strategy.md)
|
|
16
|
+
- [安全、配置与数据](09-security-configuration-and-data.md)
|
|
17
|
+
- [性能、可观测性与国际化](10-performance-observability-and-i18n.md)
|
|
18
|
+
- [工具链、质量门禁与 CI](11-tooling-quality-gates-and-ci.md)
|
|
19
|
+
- [Git、评审与交付](12-git-review-and-delivery.md)
|
|
20
|
+
- [采用、例外与 Ratchet](13-adoption-exceptions-and-ratchets.md)
|
|
21
|
+
- [项目规范生成合同](14-generation-contract.md)
|
|
22
|
+
- [验证合同](15-validation-contract.md)
|
|
23
|
+
- [语言适配器与 Fallback](16-language-adapter-contract.md)
|
package/template/skills/engineering-standards-builder/references/rust/00-detection-and-scope.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Rust:检测、版本与作用域
|
|
2
|
+
|
|
3
|
+
## 信号
|
|
4
|
+
|
|
5
|
+
- `Cargo.toml`、`Cargo.lock`、workspace members;
|
|
6
|
+
- `rust-toolchain.toml`、`rust-version`、edition;
|
|
7
|
+
- `src/lib.rs`、`src/main.rs`、`src/bin/`、`tests/`、`benches/`、`examples/`;
|
|
8
|
+
- features、build script、proc-macro、FFI、`unsafe`;
|
|
9
|
+
- CI 中 fmt、Clippy、test、doc、audit、target matrix。
|
|
10
|
+
|
|
11
|
+
每个 Cargo package 是 crate scope;virtual workspace root 不应被误当成 library/application crate。
|
|
12
|
+
|
|
13
|
+
## 版本
|
|
14
|
+
|
|
15
|
+
记录:
|
|
16
|
+
|
|
17
|
+
- edition;
|
|
18
|
+
- MSRV(`rust-version`、toolchain、CI/文档);
|
|
19
|
+
- stable/beta/nightly 与 required components/targets;
|
|
20
|
+
- Cargo feature resolver;
|
|
21
|
+
- supported targets 和 no_std/alloc/std;
|
|
22
|
+
- unsafe/FFI/async runtime。
|
|
23
|
+
|
|
24
|
+
不得把 Builder 的最新 Rust 语法写入低 MSRV 项目。
|
|
25
|
+
|
|
26
|
+
## 访谈触发
|
|
27
|
+
|
|
28
|
+
- MSRV 与 CI/toolchain 冲突;
|
|
29
|
+
- public crate 和 internal crate 边界;
|
|
30
|
+
- unsafe policy;
|
|
31
|
+
- Clippy warning level 与存量基线;
|
|
32
|
+
- feature combinations/MSRV testing;
|
|
33
|
+
- async runtime、FFI 或 no_std 支持范围。
|
|
34
|
+
|
|
35
|
+
## 官方依据
|
|
36
|
+
|
|
37
|
+
- [Cargo manifest](https://doc.rust-lang.org/cargo/reference/manifest.html)
|
|
38
|
+
- [Cargo workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)
|
package/template/skills/engineering-standards-builder/references/rust/01-language-api-and-safety.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Rust:语言、API 与安全
|
|
2
|
+
|
|
3
|
+
## API 设计
|
|
4
|
+
|
|
5
|
+
- public API 最小化,名称、trait、generic bound、ownership 和 lifetime 表达使用方式。
|
|
6
|
+
- 接受借用或通用 trait 只有在改善调用者且不制造复杂错误时;返回拥有值/iterator/borrow 按生命周期合同选择。
|
|
7
|
+
- newtype 表达领域单位、验证状态和 orphan-rule 边界。
|
|
8
|
+
- `#[non_exhaustive]`、sealed trait、feature-gated API 和 semver 影响按发布策略使用。
|
|
9
|
+
- public type 不泄漏不希望承诺的内部依赖类型。
|
|
10
|
+
- `Default`、builder 和 conversion trait 只在语义自然且失败行为清楚时实现。
|
|
11
|
+
|
|
12
|
+
## 所有权与数据
|
|
13
|
+
|
|
14
|
+
- clone 是所有权决定,不是借用错误的默认修复;热点 clone 通过 profiler/benchmark 验证。
|
|
15
|
+
- interior mutability (`Cell`/`RefCell`/mutex 等) 限定在所有权边界,并文档化 panic/blocking 语义。
|
|
16
|
+
- `Cow`, smart pointer 和 arena 只在生命周期/性能需求证明时采用。
|
|
17
|
+
- 不把 `String`/`Vec<u8>` 用作所有外部协议的无约束模型;边界解析为精确类型。
|
|
18
|
+
|
|
19
|
+
## Unsafe
|
|
20
|
+
|
|
21
|
+
- 默认禁止或最小化;项目允许时每个 unsafe block/module 有 SAFETY 注释,说明调用前提与保持的不变量。
|
|
22
|
+
- safe wrapper 必须阻止调用者构造 UB;FFI、raw pointer、aliasing、layout 和线程安全有专门测试/工具。
|
|
23
|
+
- 不用 `unsafe` 规避借用设计或微优化,除非基准和审查证明。
|
|
24
|
+
- 是否采用 `unsafe_op_in_unsafe_fn`、deny lint 等匹配 edition/MSRV 和项目策略。
|
|
25
|
+
|
|
26
|
+
## 文档
|
|
27
|
+
|
|
28
|
+
- public item 使用 rustdoc,包含错误、panic、safety、线程安全和示例;
|
|
29
|
+
- 示例作为 doc test(适用时)保持可编译;
|
|
30
|
+
- hidden/ignored doc test 有具体平台或依赖理由。
|
|
31
|
+
|
|
32
|
+
## 官方依据
|
|
33
|
+
|
|
34
|
+
- [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/)
|
|
35
|
+
- [Rustonomicon](https://doc.rust-lang.org/nomicon/)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Rust:Crate、Workspace 与目录
|
|
2
|
+
|
|
3
|
+
## Workspace
|
|
4
|
+
|
|
5
|
+
- crate 围绕独立 API、编译/发布边界和所有权拆分,不用大量微 crate 代替模块设计。
|
|
6
|
+
- workspace package metadata、dependencies、lints 和 profiles 由实际 Cargo 能力集中管理;不覆盖成员必要差异。
|
|
7
|
+
- dependency graph 单向;proc-macro、build dependency 和 dev dependency 也纳入供应链与循环检查。
|
|
8
|
+
- virtual manifest 与 root package 区分;release/versioning 策略明确。
|
|
9
|
+
|
|
10
|
+
## Crate 与 Module
|
|
11
|
+
|
|
12
|
+
- library 逻辑优先放 `lib.rs`,binary 入口保持薄;多个命令使用 `src/bin` 或显式配置。
|
|
13
|
+
- module tree 表达领域和可见性;`pub(crate)`/private 优先,`pub` 只用于 contract。
|
|
14
|
+
- `mod.rs` 与同名文件风格遵循项目 edition/现有实践,不进行无价值全量改名。
|
|
15
|
+
- integration tests 位于 `tests/` 并以外部消费者视角编译;共享 test support 不意外成为独立测试 crate。
|
|
16
|
+
- examples/benches/build.rs 只有实际用途并由门禁覆盖。
|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
- feature 是 additive capability;避免同一 feature 改变 public 类型语义或互斥组合而无检查。
|
|
21
|
+
- default features、optional dependencies 和 feature unification 对消费者影响明确。
|
|
22
|
+
- CI 测试最低、默认、全部和关键组合;组合爆炸时列出风险驱动矩阵。
|
|
23
|
+
- platform cfg 与 feature 分离;无效组合尽早 compile_error 或清晰失败。
|
|
24
|
+
|
|
25
|
+
## 依赖与构建
|
|
26
|
+
|
|
27
|
+
- `Cargo.lock` 是否提交按 application/library 和仓库策略;
|
|
28
|
+
- build script 输出、rerun 条件、环境和 generated artifacts 可重现;
|
|
29
|
+
- FFI/native dependency 的 target、link 和 license 明确;
|
|
30
|
+
- workspace dependency 更新审查 public API、MSRV、feature 和安全影响。
|
|
31
|
+
|
|
32
|
+
## 官方依据
|
|
33
|
+
|
|
34
|
+
- [Cargo package layout](https://doc.rust-lang.org/cargo/guide/project-layout.html)
|
|
35
|
+
- [Cargo workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)
|
|
36
|
+
- [Cargo features](https://doc.rust-lang.org/cargo/reference/features.html)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Rust:错误、所有权与并发
|
|
2
|
+
|
|
3
|
+
## Error
|
|
4
|
+
|
|
5
|
+
- library 返回结构化 error,application 边界决定展示、日志和退出码。
|
|
6
|
+
- `Result` 的 error type 表达调用者需要的分类;动态 error/context 只在应用编排或插件边界使用。
|
|
7
|
+
- `?` 传播同时保留足够上下文;不要每层重复相同消息。
|
|
8
|
+
- `unwrap`/`expect` 仅用于已证明不变量、测试或不可恢复初始化;`expect` 说明为何不可能失败。
|
|
9
|
+
- panic 不跨 FFI/线程/任务边界泄漏,除非 contract 明确处理。
|
|
10
|
+
|
|
11
|
+
## 所有权与资源
|
|
12
|
+
|
|
13
|
+
- RAII owner 明确;Drop 不执行可能 panic 的复杂业务逻辑。
|
|
14
|
+
- 锁 guard、文件、连接、transaction、临时目录和子进程的持有范围最小。
|
|
15
|
+
- async 代码不跨 `.await` 持有非必要锁/borrow;阻塞 I/O 不运行在 async executor worker 上。
|
|
16
|
+
- cancellation safety 明确:future 被 drop 时是否会留下部分写入、锁或协议状态。
|
|
17
|
+
|
|
18
|
+
## 并发与 Async
|
|
19
|
+
|
|
20
|
+
- thread/task 有 owner、join/abort/shutdown 和 error propagation。
|
|
21
|
+
- `Send`/`Sync` bound 是 API contract,不用 unsafe 强制实现掩盖状态。
|
|
22
|
+
- channel 容量与 backpressure 明确;无界 channel 需要负载证明和保护。
|
|
23
|
+
- shared state 选择 message passing、mutex/rwlock/atomics 的最简单正确模型;原子 ordering 有注释和测试/模型依据。
|
|
24
|
+
- async runtime、timer、I/O trait 和测试工具遵循项目既有 runtime,不混合运行时。
|
|
25
|
+
- 超时和取消在调用边界定义;spawned task 不继承无法满足的借用/请求生命周期。
|
|
26
|
+
|
|
27
|
+
## FFI
|
|
28
|
+
|
|
29
|
+
- ABI、layout、ownership、allocator、nullability、threading 和 unwind contract 明确;
|
|
30
|
+
- 输入在 safe boundary 验证;
|
|
31
|
+
- resource free function 与 error mapping 有集成测试。
|
|
32
|
+
|
|
33
|
+
## 官方依据
|
|
34
|
+
|
|
35
|
+
- [The Rust Programming Language: error handling](https://doc.rust-lang.org/book/ch09-00-error-handling.html)
|
|
36
|
+
- [Async Book](https://rust-lang.github.io/async-book/)
|
|
37
|
+
- [Rustonomicon FFI](https://doc.rust-lang.org/nomicon/ffi.html)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Rust:测试、工具链与质量门禁
|
|
2
|
+
|
|
3
|
+
## Formatter 与 Clippy
|
|
4
|
+
|
|
5
|
+
- `cargo fmt --check` / rustfmt 配置为机械格式合同;
|
|
6
|
+
- Clippy lint group 和 level 匹配 MSRV、crate 类型和存量基线;不无差别启用 nursery/restriction 全集。
|
|
7
|
+
- lint allow 限定最小 scope,写明 reason;workspace lints 与成员覆盖可追溯。
|
|
8
|
+
- 编译 warnings 是否 deny 由项目确认并采用 Ratchet,避免依赖升级突然阻塞全部模块。
|
|
9
|
+
|
|
10
|
+
## 测试
|
|
11
|
+
|
|
12
|
+
- unit tests 与私有实现同 module;integration tests 从 public API 视角;doc tests 保持示例有效。
|
|
13
|
+
- property/fuzz 用于 parser、codec、unsafe 和状态机;失败 corpus 固化。
|
|
14
|
+
- 并发/async 测试控制时间、runtime 和调度假设;覆盖取消、panic、shutdown。
|
|
15
|
+
- FFI、数据库、文件和网络资源使用临时/隔离环境并清理。
|
|
16
|
+
- feature、target、MSRV 和 no_std 组合按支持矩阵测试。
|
|
17
|
+
|
|
18
|
+
## 其他门禁
|
|
19
|
+
|
|
20
|
+
根据仓库事实选择:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
cargo check --workspace --all-targets
|
|
24
|
+
cargo test ...
|
|
25
|
+
cargo fmt --check
|
|
26
|
+
cargo clippy ... -- -D warnings
|
|
27
|
+
cargo doc --no-deps
|
|
28
|
+
cargo audit / deny / vet
|
|
29
|
+
cargo miri / sanitizer / loom
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
每个命令的 features、target、toolchain 与 working directory 必须明确;planned 工具不得报告为当前门禁。
|
|
33
|
+
|
|
34
|
+
## Benchmark 与性能
|
|
35
|
+
|
|
36
|
+
- benchmark 只用于有测量目标的热点;固定输入、环境和比较方法;
|
|
37
|
+
- 优化 unsafe/alloc/clone 前保留基线和回归阈值;
|
|
38
|
+
- microbenchmark 不替代端到端 latency/throughput 指标。
|
|
39
|
+
|
|
40
|
+
## 官方依据
|
|
41
|
+
|
|
42
|
+
- [rustfmt](https://github.com/rust-lang/rustfmt)
|
|
43
|
+
- [Clippy documentation](https://doc.rust-lang.org/clippy/)
|
|
44
|
+
- [Cargo tests](https://doc.rust-lang.org/cargo/commands/cargo-test.html)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Rust 适配器
|
|
2
|
+
|
|
3
|
+
当 Project Inventory 识别到 Cargo package/workspace 或 Rust 源码时读取:
|
|
4
|
+
|
|
5
|
+
- [检测、版本与作用域](00-detection-and-scope.md)
|
|
6
|
+
- [语言、API 与安全](01-language-api-and-safety.md)
|
|
7
|
+
- [Crate、Workspace 与目录](02-crates-workspaces-and-layout.md)
|
|
8
|
+
- [错误、所有权与并发](03-errors-ownership-and-concurrency.md)
|
|
9
|
+
- [测试、工具链与质量门禁](04-testing-tooling-quality-gates.md)
|