Skip to content

组织罗盘 OrgCompass v2.3.1

Choose a tag to compare

@github-actions github-actions released this 19 Sep 02:46

OrgCompass v2.3.1

v2.3.1 定位为「事实与口径收口」:不改产品能力、不改文件格式,只让 v2.3.0 已经承诺的事实、口径与不可回退保障真正成立。

向后兼容声明(patch 版本必读)

  • .orgproj 文件格式保持 4,不新增必填字段。 v2.3.1 可以无损读取 v2.3.0 及更早版本生成的文件;v2.3.1 生成的文件也能被 v2.3.0 读取(新增的 assessmentDay 是可选字段,旧版会忽略它并按原逻辑工作,同日判定退化为 v2.3.0 的行为)。
  • 不新增功能、不改变既有导出列、不改变界面入口位置。
  • 本版会改变部分用户已经看到的数字:修正了若干口径失真(见下)。多数情况下诊断结论会从「偏乐观」变为「更准确」,这不是数据出错。

口径修正(会改变诊断结论,方向是「更准确」)

  • 超编不再被判成健康:实际人数超出编制时空岗率为负,此前会因「负值 ≤ 10%」被判为「健康 / 编制基本满编」,且与同一屏的部门级状态方向相反。现在改按超编梯度判读(超编占比 > 20% 预警,否则关注)。
  • 管理幅度不再把负责人本人算作下属:负责人通常同时是本部门成员,此前 直管人数 会把本人计入,导致「负责人无人直管」这一关键信号被降级为「幅度偏窄(1 人)」,全组织仅负责人时管理中位数由 0 变 1、灯号由预警变关注。现在明确剔除本人(口径文案同步写明「不含负责人本人」)。
  • 管理者比分子分母统一按真人去重:此前分子按工号去重、分母按记录条数计数,同一人被重复挂载时比值被系统性低估。
  • 部门表格的「实际人数」与缺口/状态同口径:此前实际人数未按真人去重、缺口却已去重,出现过「编制 3,实际 3,空岗率 33.3%」这类同行自相矛盾的数字与建议文案。
  • 编制冻结与未配置编制分开表达:此前编制全部冻结的部门会被报成「未配置编制,请补充」。现在分别提示「编制冻结、本期不计缺口」与「未配置编制」。
  • 看板的「含下级 / 仅直属」对组织指标同样生效:此前该切换只作用于看板汇总与明细,组织指标始终按整棵子树计算,同一屏出现两套范围;范围指向已失效部门时也不再静默回退全公司。

数据安全与不可回退路径

  • 评分表「评估日期」不再导致整批导入失败:Excel 日期单元格(例如在单元格里直接键入 2026-09-16)此前会被读成序列号而抛出 Invalid time value,整批导入失败且只提示通用文案。现在支持日期单元格、2026-09-16、2026/9/16、未补零与 2026年9月16日;无法识别时给出带行号的可行动错误。
  • 超过 5 万行不再被静默截断:此前单表超过上限只解析前 5 万行且没有任何提示(6 万行只导入约 5 万行),用户会以为数据完整。现在拒绝导入并说明原因,请拆分文件。
  • 旧版本文件迁移不再丢任职关联:早期格式(v1)迁移只给部门树套岗、没有同步名册,导致老用户升级后出现「画布与名册的岗位引用不一致」告警、全员被判「未套岗」、旧任职历史无法建立。现在迁移时以部门树为准对齐名册(只补缺失、不覆盖冲突),原有真实冲突仍会如实报给用户。
  • 导入 .orgproj 与清空工作区前自动留快照:两者都会整体覆盖本地唯一副本,此前没有备份、无法回退。现在会自动保留最近 5 份可恢复快照,并在项目管理里提供「历史快照 → 恢复这一份」;导入前也会先确认。
  • 缺口成本「无法估算」不再写成 0:健康度面板与可导出的诊断报告中,找不到成本依据的岗位此前显示 0w。现在显示「无法估算」(缺口清单链路本就正确,两处口径已对齐)。
  • 同一天补录的评分不再静默失效:评估时点此前混用「本地正午归一」与「真实时刻」,同一天由不同入口写入会被判为不同时点 → 后写入的分数既不建立修订关系、也永远不生效,却提示成功。现在同日判定统一用自然日,同日修改会正确建立修订链,内容冲突则明确提示「评分冲突待核对」。
  • 人工复核留痕不再被 Ctrl+Z 无痕抹除:撤销/重做现在会保留人工确认记录;取消确认必须走显式「撤销确认」(带撤销人、时间、原因)。
  • 无法写入时不再假报成功:确认/撤销在条件不满足(如人岗引用不一致、无唯一在任主岗)时会提示具体原因,而不是提示「已确认…留痕」。
  • 桌面端保存失败不再静默改道:此前原生保存失败会偷偷回退成浏览器下载并提示「已导出」。现在取消与失败明确区分,失败会给出可见错误。
  • 离开页面前落盘:新增 pagehide / 切后台时把待写快照写入本地存储,避免编辑后立刻关闭窗口导致最后一次修改丢失。

工程与质量

  • 版本一致性门禁:package.json / package-lock.json / tauri.conf.json / Cargo.toml / Cargo.lock 五处版本由 npm run version:check 机器校验(v2.3.0 曾出现 lockfile 滞留旧版本一个发布周期)。CI 与发布流程都会执行。
  • 测试文件纳入类型检查:此前测试文件被 tsconfig 排除,从未被 tsc 检查 —— 打开后当场发现 21 处既有类型错误(含从不存在的模块引入类型、缺失导入、调用已移除的 props)。现由 npm run typecheck 覆盖。
  • 覆盖率门槛:新增 npm run test:coverage 与门槛(statements 68 / branches 58 / functions 58 / lines 70),CI 执行。
  • CI 矩阵:Node 20.19 / 22 / 24 三档运行 lint + 类型 + 构建;测试在 Node 22 / 24 上运行。
    原因:测试环境 jsdom 30 依赖的 undici 在 Node 20.19 上会于加载期报错(webidl.util.markAsUncloneable is not a function),
    所有 jsdom 用例直接失败。Node 20.19 仍可正常开发、构建与打包(这正是 engines 的承诺),只是不能跑单测,README 已注明。
  • 门禁的跨平台健壮性:版本一致性校验脚本按 CRLF 归一化读取 —— Windows runner 默认 CRLF 检出,
    首版门禁曾因此在 Windows 发布构建上失败(macOS/Linux 不受影响),已修复并保留 CRLF 容错的正则双保险。
  • 性能:看板派生不再逐员工重建复核索引(1000 人规模下由 26ms 降到约 5ms 量级);常驻抽屉/弹窗在关闭态不再空跑昂贵派生;批量评估的干部判定与评分预填改为一次建索引(旧实现每个员工调用两次 isManager 并各做一次全表扫描)。
  • 反馈一致性:导出的错误提示从原生 alert 统一为应用内提示(保留错误细节),提示区域补充无障碍 live region。
  • 测试有效性修复:修正了两处不可能失败的断言(缺口清单导出仅断言「函数存在」、画布居中断言代数恒等),并为撤销确认读侧、搜索展开、偏好持久化、镜像缺失/过期(T09 类)补齐有判别力的回归断言。

发布验证

  • 自动化测试:41 个测试文件、602 项全部通过(v2.3.0 基线为 32 文件 / 507 项)。
  • npm run verify(版本一致性 → 类型含测试 → lint → 覆盖率门槛 → 构建)全绿。
  • TypeScript 类型检查通过;ESLint 0 error(保留 3 条既有 React Fast Refresh 警告,位于 OrgChart.tsx)。
  • 生产构建通过;构建告警 2 类已登记:INEFFECTIVE_DYNAMIC_IMPORT(tauri.ts 同时被静态与动态导入)与主 chunk 593 kB 超过 500 kB 提示 —— 均为 v2.3.0 既有状态,本版不改变分块策略。
  • .orgproj 格式仍为 4;v1 / v2 / v3 三档 fixture 迁移回归通过。
  • 关键修复均配「回退即失败」断言,并逐项经突变验证(故意回退实现 → 对应断言必须变红):口径 6 项、数据安全 5 项、链路交互 4 项、性能 4 项、工程加固 14 项、测试保护 6 项。

已知开放项(本版未闭环,请据此安排)

  • macOS 安装包为 adhoc 签名,未做 Apple 公证 —— 首次打开可能提示「无法验证开发者」,需右键「打开」或在「系统设置 → 隐私与安全性」放行。README 下载章节已显著声明。
  • Windows 安装包未做代码签名,可能出现 SmartScreen 提示。
  • Windows 真机安装/导入/保存/导出/重开流程尚未由人工实测(CI 已产出安装包)。
  • Tauri 原生「另存为」三条路径(PNG / Excel / .orgproj)尚未人工验证;本版已修正其失败语义,但仍需一次真机确认。
  • Rust / Cargo 侧告警未做 cargo audit 受控核查(glib 中危项的历史结论仅对 macOS 目标成立)。
  • 开发依赖 3 条 npm audit 告警(构建工具链,不入产物)未在本版升级验证。
  • 行业基准引擎、N 场景对比矩阵、场景合并/归档、权限与隐私治理机制均未纳入本版。

边界

  • 本版不包含:AI 自动评价、自动定级、继任推荐、360 评价、九宫格、招聘审批与外部 ATS 集成、云端账号与遥测。
  • 岗位缺口清单是编制缺口事实,不是已批准招聘需求。
  • 能力灯号与人工复核只呈现可追溯依据,不自动输出调岗、晋升或淘汰结论。