# 公司统一配置 > 第一层级配置(权重: 25),作用于全公司所有 AI 系统。定义公司级安全红线、技术选型原则、编码底线和沟通协作规范,是所有项目必须遵守的最低标准。 > > **设计原则**:安全红线为只读不可覆盖;技术选型和编码底线可被 L2/L3 覆盖。语言/框架相关的详细规范由 `language/` 文件夹下按语言分类的子目录(java/、python/、vue/)负责。 --- ## 一、安全红线(不可违反,只读规则) > ⚠️ 以下规则为**强制性的、不可被任何层级覆盖的安全底线** ### 1.1 敏感信息管理 - **绝对禁止**在代码中硬编码任何密钥、密码、Token、API Key、私钥、证书 - **绝对禁止**将敏感信息提交到版本控制系统(包括历史提交) - **绝对禁止**在日志/控制台输出中打印用户密码、Token、身份证号、银行卡号等敏感数据 - 敏感配置必须通过环境变量、密钥管理服务(如 Vault、KMS、AWS Secrets Manager)或安全的配置中心注入 - 代码中只引用环境变量名或配置键名,严禁明文存储 ### 1.2 代码安全(跨语言通用) | 风险类别 | 禁止行为 | 正确做法 | |---|---|---| | SQL 注入 | 拼接 SQL 字符串 | 使用参数化查询或 ORM | | 命令注入 | 将用户输入拼接到 shell / system / exec 调用 | 使用参数化接口或白名单校验 | | XSS | 直接渲染未转义的用户输入到 HTML | 对所有外部输入进行转义/编码 | | 路径遍历 | 使用用户输入直接拼接文件路径 | 校验并规范化路径,限制访问目录 | | 反序列化攻击 | 反序列化不受信的数据 | 使用安全的序列化格式或白名单类 | | SSRF | 服务端发起用户可控的请求 | 校验和限制目标地址范围 | ### 1.3 数据与隐私保护 - 用户个人信息的收集和处理必须符合**最小必要原则** - 涉及用户数据的接口必须有权限校验,不得存在未授权访问路径 - 生产环境日志中不得记录完整的用户身份信息(需脱敏处理) - 必须遵守适用的数据保护法规(如 GDPR、个人信息保护法等) ### 1.4 依赖安全 - **禁止使用已停止维护超过 2 年的生产依赖**(存在安全风险且无补丁) - 生产依赖必须在对应语言的包安全审计工具中 **无 high/critical 漏洞**方可上线 - JavaScript/TypeScript: `npm audit` / `pnpm audit` - Python: `pip audit` / `safety` - Java: OWASP Dependency-Check / Snyk - Go: `govulncheck` - Rust: `cargo audit` - 发现漏洞后必须在 **7 个工作日内**修复或升级,无法修复的需上报安全团队并记录原因 --- ## 二、技术选型原则与技术栈偏好 > 本节定义了技术选型的**决策原则**和**默认选择倾向**。决策原则为硬性框架,技术栈偏好在 L2/L3 有明确约定时以 L2/L3 为准。 ### 2.1 技术选型决策框架 选择任何技术栈时,必须回答以下问题并通过评审: #### 必须满足的硬性条件(任一不通过则不可选用) 1. **活跃维护**:项目在过去 6 个月内有持续 commit 和 issue 响应 2. **社区规模**:有足够的使用者基数,非单人维护的"玩具项目" 3. **许可证合规**:许可证类型符合公司法务要求 4. **安全记录**:无已知的高危安全漏洞未修复 5. **版本策略**:有明确的版本发布计划和 breaking change 处理机制 #### 评分维度(综合评估) | 维度 | 权重 | 说明 | |---|---|---| | 成熟度与稳定性 | 高 | 生产验证程度、API 稳定性 | | 性能表现 | 高 | 是否满足业务场景的性能要求 | | 团队熟悉度 | 中 | 团队学习成本和上手速度 | | 生态完善度 | 中 | 文档质量、第三方集成、社区支持 | | 可维护性 | 中 | 代码可读性、架构清晰度 | ### 2.2 全局禁用原则(跨语言) | 类别 | 禁用原则 | 原因 | |---|---|---| | 语言特性 | 已被官方标记为 deprecated / removed 的语法/API | 兼容性、安全性、维护性 | | 浏览器兼容 | IE-only hack 或针对已停止浏览器的特殊处理 | 无实际意义 | | 同步阻塞 | 在支持异步的语言中强制使用同步阻塞 I/O 的模式 | 性能与资源利用率 | | 已终止维护 | 官方宣布 EOL 且无社区接管的依赖/框架 | 安全风险 | ### 2.3 前端技术栈偏好 | 类别 | 首选 | 备选 | 说明 | |---|---|---|---| | UI 框架 | React 18+ | Vue 3.3+ / Svelte | 按项目需求二选一 | | 类型系统 | TypeScript(strict 模式) | — | 新项目强制启用 | | CSS 方案 | Tailwind CSS | CSS Modules | 优先原子化 CSS | | 构建工具 | Vite | 已有项目沿用现有工具 | 新项目优先 Vite | | 状态管理 | Zustand / TanStack Query | Redux Toolkit(大型项目) | 轻量优先 | | 包管理器 | pnpm | npm / yarn | 统一使用 pnpm | ### 2.4 后端技术栈偏好 | 类别 | 首选 | 备选 | 说明 | |---|---|---|---| | 运行时语言 | Java | Go / Node.js / Python | 公司后端主流语言为 Java | | Web 框架(Java) | Spring Boot / Spring Cloud | Quarkus / Micronaut | 优先使用成熟 Java 生态 | | Web 框架(Node) | Fastify / Hono | Express(已有项目) | 新项目优先现代框架 | | Web 框架(Python) | FastAPI | Flask / Django | 异步优先 | | ORM | MyBatis-Plus / JPA(Java) | GORM(Go) / Prisma(Node) / SQLAlchemy(Py) | 按语言对应选择 | | 数据库 | PostgreSQL | MySQL / SQLite | 关系型数据库首选 PG | ### 2.5 DevOps & 工具链偏好 | 类别 | 首选 | 说明 | |---|---|---| | 容器化 | Docker + Docker Compose | 本地开发和部署统一 | | CI/CD | GitHub Actions | 优先使用 | | 代码质量(JS/TS) | ESLint + Prettier | 统一代码风格 | | 代码质量(Go) | golangci-lint | 官方推荐 lint 聚合器 | | 代码质量(Python) | ruff | 比 flake8+black 更快更全 | | 测试框架 | Vitest(前端) / go test(Go) / pytest(Python) | 按语言对应 | --- ## 三、编码质量底线(跨语言通用) ### 命名与可读性 1. **命名自解释**:变量、函数、类、模块名必须能表达其用途,禁止无意义命名(如 `a`, `tmp`, `data`, `foo`, `x`) 2. **遵循语言惯例**:使用该语言社区公认的命名风格(如 camelCase、snake_case、PascalCase) 3. **避免缩写谜题**:除非是行业通用缩写(如 URL、ID、HTTP),否则不使用难以理解的缩写 ### 函数与方法 4. **单一职责**:单个函数/方法只做一件事,逻辑复杂时拆分 5. **参数控制**:函数参数数量建议不超过 5 个,超出时考虑使用对象/结构体/配置项封装 6. **尽早返回(Early Return)**:优先使用 early return 减少嵌套层级,避免"箭头型"代码 7. **纯函数优先**:无副作用函数优先,明确标识有副作用的函数 ### 错误处理 8. **禁止静默吞错**:不允许空 catch / 忽略错误返回值,必须有明确的错误处理逻辑或向上传播 9. **错误信息有意义**:错误消息应包含足够的上下文帮助定位问题,禁止抛出空错误或通用错误字符串 10. **资源释放**:打开的资源必须确保释放,推荐使用语言提供的 RAII / try-finally / defer / using 等机制 ### 代码组织 11. **DRY 原则**:相同逻辑出现 3 次以上必须抽取为公共函数/模块/组件 12. **文件长度控制**:单文件不超过 500 行(配置文件除外),超出则按职责拆分 13. **模块边界清晰**:模块/包之间依赖方向应单向,避免循环依赖 ### 个人加严偏好(可被 L3 覆盖) | 规则 | 底线 | 偏好(更严格) | 说明 | |---|---|---|---| | 单函数长度 | ≤ 80 行 | **≤ 50 行** | 个人偏好更短的函数 | | 单文件长度 | ≤ 500 行 | **≤ 300 行** | 个人偏好更小的模块 | | 提交信息 body | 可选 | **建议必填** | 复杂变更建议补充说明 | --- ## 四、Git 规范与 Code Review ### 4.1 提交信息格式 `(): ` - type: `feat` / `fix` / `refactor` / `docs` / `style` / `perf` / `test` / `chore` / `ci` / `revert` - scope: 可选,影响范围(如模块名、功能名) - subject: 中文或英文,简洁描述做了什么(不是为什么) - body: 可选,详细说明变更原因和影响 ### 4.2 禁止提交的内容 - `node_modules`、`__pycache__`、`.class`、`target/`、`dist/`、`build/` 等依赖/编译产物 - `.env`、`.env.local`、`*.key`、`*.pem`、`credentials.*` 等敏感配置 - IDE 配置文件(`.idea/`、`.vscode/`)中的本地设置 - 操作系统生成的文件(`.DS_Store`、`Thumbs.db`) ### 4.3 分支命名规范 - 功能开发:`feature/<功能简述>` 或 `feature/-<简述>` - Bug 修复:`fix/<问题描述>` 或 `fix/-<简述>` - 紧急修复:`hotfix/<问题描述>` - 版本发布:`release/<版本号>` ### 4.4 Code Review 标准 1. 每个 PR/MR 必须**至少 1 人 Review 通过**后方可合并 2. PR 描述中必须包含:**改了什么**、**为什么改**、**影响范围** 3. **高风险变更**必须由资深开发者 Review(数据库 Schema、权限/认证、支付/财务、安全配置) 4. Review 意见必须**逐条处理** --- ## 五、协作、沟通与 AI 行为 ### 5.1 沟通与响应风格 - 默认使用**中文**回复,技术术语首次出现时保留英文原文 - **结论先行**:先给结论/方案,再解释原因 - **适度简洁**:避免冗长铺垫,但关键决策要说明理由 - **结构化输出**:多步骤任务用有序列表,并列项用无序列表 - 遇到歧义或多种可行方案时,**主动用 AskUserQuestion 询问** - 涉及破坏性操作前必须确认 ### 5.2 代码注释规范 > 统一使用 **JSDoc** 风格文档注释 + **#region** 代码分组,跨语言通用。各语言细节差异由 `language/` 下各语言子目录覆盖。 #### 5.2.1 通用原则 - **业务逻辑复杂处**必须添加注释解释"**为什么**"这样写 - **公共 API / 导出函数 / 导出类型**必须有文档注释 - **TODO / FIXME / HACK** 必须标注责任人和预期解决时间 - 注释与代码保持同步 #### 5.2.2 注释格式模板 **① 类型/接口注释(interface / type / class)** ```typescript // #region {RegionName} /** * {类型简述} * * {详细描述(可选,多行时每行前加 *)} */ interface {TypeName} { /** * {属性简述} * @default {默认值} ← 有默认值时必填 */ propertyName?: string; /** * {属性简述} */ requiredProperty: number; } // #endregion ``` **② 函数/方法注释** ```typescript // #region {RegionName} /** * {动词开头简述}(如:查询用户列表 / 新增订单 / 删除配置) * @param {paramName} {参数说明} * @returns {返回值说明} ← 有返回值时标注,void 省略 * @throws {Error} {异常说明} ← 可能抛异常时标注 */ export function doSomething(params: Params): Result { // ... } // #endregion ``` **③ 枚举注释** ```typescript // #region {RegionName} /** * {枚举简述} */ enum StatusEnum { /** 启用 */ ENABLED = 1, /** 停用 */ DISABLED = 0, } // #endregion ``` **④ 配置项/常量注释** ```typescript // #region {RegionName} /** * {配置项简述} * @default {默认值} */ const CONFIG_ITEM = 'value'; // #endregion ``` #### 5.2.3 #region 分组规则 | 规则 | 说明 | |---|---| | 必须使用 | 一个文件内存在 **2 个及以上** 逻辑分组时使用 | | 可省略 | 整个文件只做一件事、代码量少时无需 region | | 命名格式 | PascalCase,体现业务含义(如 `ArchiverPluginOptions`、`UserAPI`、`TableColumns`) | | 嵌套 | **禁止嵌套** region,保持扁平结构 | | 对称 | 每个 `#region` 必须有对应的 `#endregion` | | 位置 | `#region` 紧跟在注释块上方,`#endregion` 独占一行 | #### 5.2.4 JSDoc 标签使用规则 | 标签 | 使用场景 | 是否必填 | |---|---|---| | 描述(首行) | 所有公共导出 | **必填** | | `@param` | 函数/方法每个参数 | **必填** | | `@returns` | 有返回值的函数 | **必填**(void 省略) | | `@default` | 属性/配置项有默认值时 | 有默认值时**必填** | | `@throws` | 可能抛出异常时 | 可能抛异常时必填 | | `@example` | 用法不直观时 | 可选 | | `@deprecated` | 已废弃的 API | 废弃时**必填** | | `@see` | 引用其他模块/文档时 | 可选 | #### 5.2.5 禁止事项 - **禁止**使用单行注释 `//` 描述公共 API 的用途(应使用 JSDoc) - **禁止** JSDoc 描述与代码行为不一致(注释是契约,必须同步更新) - **禁止**无意义的注释(如 `// 设置name` → 应写 `// 设置用户显示名称,用于前端欢迎语`) - **禁止**在 `#region` 命名中使用技术术语而非业务含义(如 ❌ `Region1` → ✅ `UserAPI`) #### 5.2.6 各语言适配说明 | 语言 | #region 语法 | 文档注释语法 | 备注 | |---|---|---|---| | TypeScript / JavaScript | `// #region Name` / `// #endregion` | `/** ... */` | 原生支持 | | Java | `// region Name` / `// endregion`(IDE 支持) | `/** ... */` | Javadoc 格式 | | Python | `# region Name` / `# endregion` | `""" ... """` | docstring 格式 | | Go | 不使用 region | `// ...`(godoc 格式) | Go 风格不同,按语言文件约定 | | C# | `#region Name` / `#endregion` | `/// ...` | XML 文档注释 | | Vue (`